commit ea40f18aa61fbab9bf47829c52dbe5c190ad082e Author: LL Date: Fri Nov 14 16:12:32 2025 +0800 初始化版本 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.vs/LL28在线/FileContentIndex/4844fb3e-a04f-43a2-b791-c514b50bad85.vsidx b/.vs/LL28在线/FileContentIndex/4844fb3e-a04f-43a2-b791-c514b50bad85.vsidx new file mode 100644 index 0000000..a062aa4 Binary files /dev/null and b/.vs/LL28在线/FileContentIndex/4844fb3e-a04f-43a2-b791-c514b50bad85.vsidx differ diff --git a/.vs/LL28在线/FileContentIndex/8101019e-a64f-4603-8ce4-7de09eb78397.vsidx b/.vs/LL28在线/FileContentIndex/8101019e-a64f-4603-8ce4-7de09eb78397.vsidx new file mode 100644 index 0000000..70aef67 Binary files /dev/null and b/.vs/LL28在线/FileContentIndex/8101019e-a64f-4603-8ce4-7de09eb78397.vsidx differ diff --git a/.vs/LL28在线/FileContentIndex/90078295-f964-4f12-8e18-f9128e56ef2a.vsidx b/.vs/LL28在线/FileContentIndex/90078295-f964-4f12-8e18-f9128e56ef2a.vsidx new file mode 100644 index 0000000..70aef67 Binary files /dev/null and b/.vs/LL28在线/FileContentIndex/90078295-f964-4f12-8e18-f9128e56ef2a.vsidx differ diff --git a/.vs/LL28在线/FileContentIndex/e45fbc56-0b0a-42a7-bcdb-a5fdcf0f0c7e.vsidx b/.vs/LL28在线/FileContentIndex/e45fbc56-0b0a-42a7-bcdb-a5fdcf0f0c7e.vsidx new file mode 100644 index 0000000..30c512f Binary files /dev/null and b/.vs/LL28在线/FileContentIndex/e45fbc56-0b0a-42a7-bcdb-a5fdcf0f0c7e.vsidx differ diff --git a/.vs/LL28在线/FileContentIndex/f693b06a-f494-453e-bbd0-f0bea2eb1974.vsidx b/.vs/LL28在线/FileContentIndex/f693b06a-f494-453e-bbd0-f0bea2eb1974.vsidx new file mode 100644 index 0000000..cc000c9 Binary files /dev/null and b/.vs/LL28在线/FileContentIndex/f693b06a-f494-453e-bbd0-f0bea2eb1974.vsidx differ diff --git a/.vs/LL28在线/v16/.suo b/.vs/LL28在线/v16/.suo new file mode 100644 index 0000000..02a77b4 Binary files /dev/null and b/.vs/LL28在线/v16/.suo differ diff --git a/.vs/LL28在线/v17/.suo b/.vs/LL28在线/v17/.suo new file mode 100644 index 0000000..088c39e Binary files /dev/null and b/.vs/LL28在线/v17/.suo differ diff --git a/.vs/LL28在线/v17/DocumentLayout.json b/.vs/LL28在线/v17/DocumentLayout.json new file mode 100644 index 0000000..b66eded --- /dev/null +++ b/.vs/LL28在线/v17/DocumentLayout.json @@ -0,0 +1,847 @@ +{ + "Version": 1, + "WorkspaceRootPath": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|d:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{00000000-0000-0000-0000-000000000000}|\u003CSolution\u003E|SLC1-N||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\electricity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\electricity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\electricity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\electricity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\yiqiparam.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\yiqiparam.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\electricity.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\electricity.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_alarm.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_alarm.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_alarm.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_alarm.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_hqmesconfig.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_hqmesconfig.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_hqmesconfig.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_hqmesconfig.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_hbmesset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_hbmesset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form1.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form1.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\modbustcp_28.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\modbustcp_28.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{FB7970FD-F699-4093-83D0-509501B7863C}|tongxin\\NetWorkHelper\\NetWorkHelper.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\tongxin\\networkhelper\\tcp\\itcpclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{FB7970FD-F699-4093-83D0-509501B7863C}|tongxin\\NetWorkHelper\\NetWorkHelper.csproj|solutionrelative:tongxin\\networkhelper\\tcp\\itcpclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_saomaset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_saomaset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_saomaset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_saomaset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_plc_tcp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_plc_tcp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_plccontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_plccontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_plc_tcp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_plc_tcp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_plc_serialport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_plc_serialport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_plc_serialport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_plc_serialport.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\jsonconfig.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\jsonconfig.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_rootset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_rootset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_rootset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_rootset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_plccontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_plccontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\activationmanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\activationmanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_hbmesset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_hbmesset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\mxllog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\mxllog.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\productiondata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\productiondata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\gdmes.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\gdmes.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form1.resx||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form1.resx||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_networkset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_networkset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{FB7970FD-F699-4093-83D0-509501B7863C}|tongxin\\NetWorkHelper\\NetWorkHelper.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\tongxin\\networkhelper\\tcp\\itcpclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{FB7970FD-F699-4093-83D0-509501B7863C}|tongxin\\NetWorkHelper\\NetWorkHelper.csproj|solutionrelative:tongxin\\networkhelper\\tcp\\itcpclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_networkset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_networkset.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\windowautoresizer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\windowautoresizer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\chart.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\chart.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\saomaclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\saomaclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\mes.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\mes.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_save.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_save.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_rootset.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_rootset.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_logon.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_logon.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\warning.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\warning.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\userpassword.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\userpassword.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\usermanagement.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\usermanagement.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\leakcompensate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\leakcompensate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{FB7970FD-F699-4093-83D0-509501B7863C}|tongxin\\NetWorkHelper\\NetWorkHelper.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\tongxin\\networkhelper\\icollections\\collectionconverter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{FB7970FD-F699-4093-83D0-509501B7863C}|tongxin\\NetWorkHelper\\NetWorkHelper.csproj|solutionrelative:tongxin\\networkhelper\\icollections\\collectionconverter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form1.resx||{FF4D6ACA-9352-4A5F-821E-F4D6EBDCAB11}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form1.resx||{FF4D6ACA-9352-4A5F-821E-F4D6EBDCAB11}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\form_saomaset.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\form_saomaset.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\slc1-n\\configini.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F7F71589-095A-45C2-975C-739BE2D1CE15}|SLC1-N\\SLC1-N.csproj|solutionrelative:slc1-n\\configini.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 396, + "SelectedChildIndex": 0, + "Children": [ + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "Form1.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form1.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form1.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form1.cs", + "RelativeToolTip": "SLC1-N\\Form1.cs", + "ViewState": "AQIAAEEGAAAAAAAAAAAAAGUGAAA0AAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-18T01:41:29.412Z", + "IsPinned": true, + "EditorCaption": "" + }, + { + "$type": "Bookmark", + "Name": "ST:130:0:{1fc202d4-d401-403c-9834-5b218574bb67}" + }, + { + "$type": "Bookmark", + "Name": "ST:0:0:{e506b91c-c606-466a-90a9-123d1d1e12b3}" + }, + { + "$type": "Bookmark", + "Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}" + }, + { + "$type": "Bookmark", + "Name": "ST:0:0:{6324226f-61b6-4f28-92ee-18d4b5fe1e48}" + }, + { + "$type": "Bookmark", + "Name": "ST:1139089979:0:{71f361cc-493f-47c0-923f-f2570b6f8618}" + }, + { + "$type": "Bookmark", + "Name": "ST:1330258491:0:{71f361cc-493f-47c0-923f-f2570b6f8618}" + }, + { + "$type": "Bookmark", + "Name": "ST:254354193:0:{71f361cc-493f-47c0-923f-f2570b6f8618}" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "yiqiParam.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\yiqiParam.cs", + "RelativeDocumentMoniker": "SLC1-N\\yiqiParam.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\yiqiParam.cs", + "RelativeToolTip": "SLC1-N\\yiqiParam.cs", + "ViewState": "AQIAAJEAAAAAAAAAAAAUwKIAAAAoAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-11-13T10:34:02.056Z" + }, + { + "$type": "Document", + "DocumentIndex": 16, + "Title": "Form_SaomaSet.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_SaomaSet.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_SaomaSet.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_SaomaSet.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_SaomaSet.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-19T07:59:43.205Z" + }, + { + "$type": "Document", + "DocumentIndex": 10, + "Title": "Form_HQMESconfig.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_HQMESconfig.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_HQMESconfig.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\USB\u626B\u7801\u67AA\u7248\u672C\\huabei4tongdao\\SLC1-N\\Form_HQMESconfig.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\USB\u626B\u7801\u67AA\u7248\u672C\\huabei4tongdao\\SLC1-N\\Form_HQMESconfig.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-11-06T07:27:25.808Z" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "SLC1-N", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\SLC1-N.csproj", + "RelativeDocumentMoniker": "SLC1-N\\SLC1-N.csproj", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\SLC1-N.csproj", + "RelativeToolTip": "SLC1-N\\SLC1-N.csproj", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|", + "WhenOpened": "2025-11-11T02:49:54.535Z" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "Electricity.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Electricity.cs", + "RelativeDocumentMoniker": "SLC1-N\\Electricity.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\\u5355\u4E2A\\USB\u626B\u7801\u67AA\u7248\u672C\\huabei4tongdao\\SLC1-N\\Electricity.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\\u5355\u4E2A\\USB\u626B\u7801\u67AA\u7248\u672C\\huabei4tongdao\\SLC1-N\\Electricity.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-18T01:03:21.678Z" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "Electricity.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Electricity.cs", + "RelativeDocumentMoniker": "SLC1-N\\Electricity.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Electricity.cs", + "RelativeToolTip": "SLC1-N\\Electricity.cs", + "ViewState": "AQIAAJ8AAAAAAAAAAAAYwKoAAABAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-30T02:55:49.085Z" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "Form1.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form1.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form1.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form1.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "SLC1-N\\Form1.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-18T02:52:28.347Z", + "EditorCaption": " [\u8BBE\u8BA1]" + }, + { + "$type": "Bookmark", + "Name": "ST:0:0:{5a4e9529-b6a0-46b5-be4f-0f0b239bc0eb}" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "Electricity.Designer.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Electricity.Designer.cs", + "RelativeDocumentMoniker": "SLC1-N\\Electricity.Designer.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Electricity.Designer.cs", + "RelativeToolTip": "SLC1-N\\Electricity.Designer.cs", + "ViewState": "AQIAANMCAAAAAAAAAAA1wOoCAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-28T09:46:39.581Z" + }, + { + "$type": "Document", + "DocumentIndex": 8, + "Title": "Form_Alarm.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_Alarm.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_Alarm.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\USB\u626B\u7801\u67AA\u7248\u672C\\huabei4tongdao\\SLC1-N\\Form_Alarm.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\USB\u626B\u7801\u67AA\u7248\u672C\\huabei4tongdao\\SLC1-N\\Form_Alarm.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-30T06:50:17.706Z" + }, + { + "$type": "Document", + "DocumentIndex": 7, + "Title": "Form_Alarm.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_Alarm.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_Alarm.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_Alarm.cs", + "RelativeToolTip": "SLC1-N\\Form_Alarm.cs", + "ViewState": "AQIAAIIAAAAAAAAAAAAkwKIAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-30T06:50:21.517Z" + }, + { + "$type": "Document", + "DocumentIndex": 9, + "Title": "Form_HQMESconfig.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_HQMESconfig.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_HQMESconfig.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_HQMESconfig.cs", + "RelativeToolTip": "SLC1-N\\Form_HQMESconfig.cs", + "ViewState": "AQIAAAEAAAAAAAAAAAAhwAwAAAApAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-11-06T07:27:41.521Z" + }, + { + "$type": "Document", + "DocumentIndex": 15, + "Title": "Form_SaomaSet.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_SaomaSet.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_SaomaSet.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_SaomaSet.cs", + "RelativeToolTip": "SLC1-N\\Form_SaomaSet.cs", + "ViewState": "AQIAAOYBAAAAAAAAAAAxwP8BAAA3AAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-19T07:59:44.649Z" + }, + { + "$type": "Document", + "DocumentIndex": 12, + "Title": "Form1.Designer.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form1.Designer.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form1.Designer.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form1.Designer.cs", + "RelativeToolTip": "SLC1-N\\Form1.Designer.cs", + "ViewState": "AQIAACALAAAAAAAAAAAjwDsLAAAiAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-19T01:41:25.114Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 11, + "Title": "Form_hbMESset.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_hbMESset.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_hbMESset.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_hbMESset.cs", + "RelativeToolTip": "SLC1-N\\Form_hbMESset.cs", + "ViewState": "AQIAAB8AAAAAAAAAAADwvy0AAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-28T01:55:33.542Z" + }, + { + "$type": "Document", + "DocumentIndex": 13, + "Title": "ModbusTCP_28.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\ModbusTCP_28.cs", + "RelativeDocumentMoniker": "SLC1-N\\ModbusTCP_28.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\ModbusTCP_28.cs", + "RelativeToolTip": "SLC1-N\\ModbusTCP_28.cs", + "ViewState": "AQIAAIIBAAAAAAAAAAA0wI0BAAA9AAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-18T03:38:22.768Z" + }, + { + "$type": "Document", + "DocumentIndex": 17, + "Title": "Form_PLC_TCP.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_PLC_TCP.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_PLC_TCP.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_PLC_TCP.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_PLC_TCP.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-31T00:58:13.283Z" + }, + { + "$type": "Document", + "DocumentIndex": 14, + "Title": "ITcpClient.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\tongxin\\NetWorkHelper\\TCP\\ITcpClient.cs", + "RelativeDocumentMoniker": "tongxin\\NetWorkHelper\\TCP\\ITcpClient.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\tongxin\\NetWorkHelper\\TCP\\ITcpClient.cs", + "RelativeToolTip": "tongxin\\NetWorkHelper\\TCP\\ITcpClient.cs", + "ViewState": "AQIAAEoBAAAAAAAAAAA0wLMBAAAcAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-21T06:27:43.017Z" + }, + { + "$type": "Document", + "DocumentIndex": 18, + "Title": "Form_PLCcontrol.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_PLCcontrol.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_PLCcontrol.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_PLCcontrol.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_PLCcontrol.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-30T02:12:11.587Z" + }, + { + "$type": "Document", + "DocumentIndex": 19, + "Title": "Form_PLC_TCP.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_PLC_TCP.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_PLC_TCP.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_PLC_TCP.cs", + "RelativeToolTip": "SLC1-N\\Form_PLC_TCP.cs", + "ViewState": "AQIAABAAAAAAAAAAAAAQwBcAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-31T00:59:19.738Z" + }, + { + "$type": "Document", + "DocumentIndex": 25, + "Title": "Form_PLCcontrol.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_PLCcontrol.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_PLCcontrol.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_PLCcontrol.cs", + "RelativeToolTip": "SLC1-N\\Form_PLCcontrol.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAABEAAAAgAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-30T02:20:21.019Z" + }, + { + "$type": "Document", + "DocumentIndex": 20, + "Title": "Form_PLC_Serialport.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_PLC_Serialport.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_PLC_Serialport.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_PLC_Serialport.cs", + "RelativeToolTip": "SLC1-N\\Form_PLC_Serialport.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAABcAAABDAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-17T10:29:03.885Z" + }, + { + "$type": "Document", + "DocumentIndex": 21, + "Title": "Form_PLC_Serialport.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_PLC_Serialport.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_PLC_Serialport.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_PLC_Serialport.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_PLC_Serialport.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-10-17T10:27:27.028Z" + }, + { + "$type": "Document", + "DocumentIndex": 22, + "Title": "JsonConfig.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\JsonConfig.cs", + "RelativeDocumentMoniker": "SLC1-N\\JsonConfig.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\JsonConfig.cs", + "RelativeToolTip": "SLC1-N\\JsonConfig.cs", + "ViewState": "AQIAAC4AAAAAAAAAAAAowEsAAAAaAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-19T01:04:17.355Z" + }, + { + "$type": "Document", + "DocumentIndex": 24, + "Title": "Form_RootSet.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_RootSet.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_RootSet.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_RootSet.cs", + "RelativeToolTip": "SLC1-N\\Form_RootSet.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAABAAAAAJAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-20T08:01:42.441Z" + }, + { + "$type": "Document", + "DocumentIndex": 23, + "Title": "Form_RootSet.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_RootSet.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_RootSet.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_RootSet.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_RootSet.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-20T08:00:24.659Z" + }, + { + "$type": "Document", + "DocumentIndex": 26, + "Title": "ActivationManager.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\ActivationManager.cs", + "RelativeDocumentMoniker": "SLC1-N\\ActivationManager.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\ActivationManager.cs", + "RelativeToolTip": "SLC1-N\\ActivationManager.cs", + "ViewState": "AQIAAEoAAAAAAAAAAAAAwFsAAAAwAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-09-06T06:51:08.233Z" + }, + { + "$type": "Document", + "DocumentIndex": 27, + "Title": "Form_hbMESset.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_hbMESset.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_hbMESset.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\USB\u626B\u7801\u67AA\u7248\u672C\\huabei4tongdao\\SLC1-N\\Form_hbMESset.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\USB\u626B\u7801\u67AA\u7248\u672C\\huabei4tongdao\\SLC1-N\\Form_hbMESset.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-28T00:46:32.087Z" + }, + { + "$type": "Document", + "DocumentIndex": 28, + "Title": "mxlLog.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\mxlLog.cs", + "RelativeDocumentMoniker": "SLC1-N\\mxlLog.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\mxlLog.cs", + "RelativeToolTip": "SLC1-N\\mxlLog.cs", + "ViewState": "AQIAALQAAAAAAAAAAAA3wLQAAABHAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-19T03:42:34.958Z" + }, + { + "$type": "Document", + "DocumentIndex": 30, + "Title": "gdMES.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\gdMES.cs", + "RelativeDocumentMoniker": "SLC1-N\\gdMES.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\gdMES.cs", + "RelativeToolTip": "SLC1-N\\gdMES.cs", + "ViewState": "AQIAACkBAAAAAAAAAAAAwDQBAAARAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-27T09:21:43.386Z" + }, + { + "$type": "Document", + "DocumentIndex": 29, + "Title": "ProductionData.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\ProductionData.cs", + "RelativeDocumentMoniker": "SLC1-N\\ProductionData.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\ProductionData.cs", + "RelativeToolTip": "SLC1-N\\ProductionData.cs", + "ViewState": "AQIAAAUAAAAAAAAAAAA3wAUAAAAhAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-09-20T02:55:57.964Z" + }, + { + "$type": "Document", + "DocumentIndex": 32, + "Title": "Form_NetworkSet.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_NetworkSet.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_NetworkSet.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_NetworkSet.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_NetworkSet.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-18T03:34:40.757Z" + }, + { + "$type": "Document", + "DocumentIndex": 31, + "Title": "Form1.resx", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form1.resx", + "RelativeDocumentMoniker": "SLC1-N\\Form1.resx", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form1.resx", + "RelativeToolTip": "SLC1-N\\Form1.resx", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAGYCAAAHAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001005|", + "WhenOpened": "2025-12-06T07:26:27.479Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 33, + "Title": "ITcpClient.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\tongxin\\NetWorkHelper\\TCP\\ITcpClient.cs", + "RelativeDocumentMoniker": "tongxin\\NetWorkHelper\\TCP\\ITcpClient.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\tongxin\\NetWorkHelper\\TCP\\ITcpClient.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\tongxin\\NetWorkHelper\\TCP\\ITcpClient.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-27T07:15:33.671Z" + }, + { + "$type": "Document", + "DocumentIndex": 34, + "Title": "Form_NetworkSet.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_NetworkSet.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_NetworkSet.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_NetworkSet.cs", + "RelativeToolTip": "SLC1-N\\Form_NetworkSet.cs", + "ViewState": "AQIAAG4AAAAAAAAAAAAwwFQAAAAoAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-18T07:56:29.396Z" + }, + { + "$type": "Document", + "DocumentIndex": 37, + "Title": "SaomaClient.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\SaomaClient.cs", + "RelativeDocumentMoniker": "SLC1-N\\SaomaClient.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\SaomaClient.cs", + "RelativeToolTip": "SLC1-N\\SaomaClient.cs", + "ViewState": "AQIAAHIAAAAAAAAAAAAWwIwAAAA/AAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-19T09:05:23.926Z" + }, + { + "$type": "Document", + "DocumentIndex": 38, + "Title": "MES.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\MES.cs", + "RelativeDocumentMoniker": "SLC1-N\\MES.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\MES.cs", + "RelativeToolTip": "SLC1-N\\MES.cs", + "ViewState": "AQIAADkAAAAAAAAAAAAIwEMAAABVAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-21T02:00:49.337Z" + }, + { + "$type": "Document", + "DocumentIndex": 36, + "Title": "Chart.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Chart.cs", + "RelativeDocumentMoniker": "SLC1-N\\Chart.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Chart.cs", + "RelativeToolTip": "SLC1-N\\Chart.cs", + "ViewState": "AQIAAA8AAAAAAAAAAEBRwEgAAAAvAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-22T08:56:49.778Z" + }, + { + "$type": "Document", + "DocumentIndex": 35, + "Title": "WindowAutoResizer.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\WindowAutoResizer.cs", + "RelativeDocumentMoniker": "SLC1-N\\WindowAutoResizer.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\WindowAutoResizer.cs", + "RelativeToolTip": "SLC1-N\\WindowAutoResizer.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-26T09:27:45.706Z" + }, + { + "$type": "Document", + "DocumentIndex": 39, + "Title": "Form_Save.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_Save.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_Save.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_Save.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_Save.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-20T08:55:12.875Z" + }, + { + "$type": "Document", + "DocumentIndex": 40, + "Title": "Form_RootSet.Designer.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_RootSet.Designer.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_RootSet.Designer.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_RootSet.Designer.cs", + "RelativeToolTip": "SLC1-N\\Form_RootSet.Designer.cs", + "ViewState": "AQIAABMAAAAAAAAAAABXwBYAAAAIAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-20T08:40:54.111Z" + }, + { + "$type": "Document", + "DocumentIndex": 42, + "Title": "Warning.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Warning.cs", + "RelativeDocumentMoniker": "SLC1-N\\Warning.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Warning.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Warning.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-20T08:55:15.663Z" + }, + { + "$type": "Document", + "DocumentIndex": 41, + "Title": "Form_LogOn.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_LogOn.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_LogOn.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_LogOn.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\Form_LogOn.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-20T08:55:27.078Z" + }, + { + "$type": "Document", + "DocumentIndex": 43, + "Title": "UserPassword.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\UserPassword.cs", + "RelativeDocumentMoniker": "SLC1-N\\UserPassword.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\UserPassword.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\UserPassword.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-20T08:55:16.317Z" + }, + { + "$type": "Document", + "DocumentIndex": 44, + "Title": "UserManagement.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\UserManagement.cs", + "RelativeDocumentMoniker": "SLC1-N\\UserManagement.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\UserManagement.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\UserManagement.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-20T08:55:17.04Z" + }, + { + "$type": "Document", + "DocumentIndex": 45, + "Title": "LeakCompensate.cs [\u8BBE\u8BA1]", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\LeakCompensate.cs", + "RelativeDocumentMoniker": "SLC1-N\\LeakCompensate.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\LeakCompensate.cs [\u8BBE\u8BA1]", + "RelativeToolTip": "..\\..\\..\\\u534E\u52E4\\\u534E\u8D1DLL-28\\\u6B63\u8D1F\u538B\\huabei4tongdao\\SLC1-N\\LeakCompensate.cs [\u8BBE\u8BA1]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-20T08:55:25.693Z" + }, + { + "$type": "Document", + "DocumentIndex": 46, + "Title": "CollectionConverter.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\tongxin\\NetWorkHelper\\ICollections\\CollectionConverter.cs", + "RelativeDocumentMoniker": "tongxin\\NetWorkHelper\\ICollections\\CollectionConverter.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\tongxin\\NetWorkHelper\\ICollections\\CollectionConverter.cs", + "RelativeToolTip": "tongxin\\NetWorkHelper\\ICollections\\CollectionConverter.cs", + "ViewState": "AQIAAAkAAAAAAAAAAMBawAwAAAAIAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-20T07:07:26Z" + }, + { + "$type": "Document", + "DocumentIndex": 48, + "Title": "Form_SaomaSet.Designer.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_SaomaSet.Designer.cs", + "RelativeDocumentMoniker": "SLC1-N\\Form_SaomaSet.Designer.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form_SaomaSet.Designer.cs", + "RelativeToolTip": "SLC1-N\\Form_SaomaSet.Designer.cs", + "ViewState": "AQIAABMAAAAAAAAAAABXwBYAAAAIAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-19T09:03:05.271Z" + }, + { + "$type": "Document", + "DocumentIndex": 47, + "Title": "Form1.resx", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form1.resx", + "RelativeDocumentMoniker": "SLC1-N\\Form1.resx", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\Form1.resx", + "RelativeToolTip": "SLC1-N\\Form1.resx", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001005|", + "WhenOpened": "2025-08-20T01:30:09.83Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 49, + "Title": "ConfigINI.cs", + "DocumentMoniker": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\ConfigINI.cs", + "RelativeDocumentMoniker": "SLC1-N\\ConfigINI.cs", + "ToolTip": "D:\\\u684C\u9762\\\u83AB\u79A7\u4EAE\\\u534E\u8D1D\\\u76F4\u538B28\\huabei4tongdao\\SLC1-N\\ConfigINI.cs", + "RelativeToolTip": "SLC1-N\\ConfigINI.cs", + "ViewState": "AQIAACIAAAAAAAAAAADwv0AAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-19T03:42:45.97Z" + } + ] + }, + { + "DockedWidth": 58, + "SelectedChildIndex": -1, + "Children": [ + { + "$type": "Bookmark", + "Name": "ST:323948898:0:{81164725-9a96-4ece-a4cb-440d8fd285e5}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/LL-28通讯地址.xlsm b/LL-28通讯地址.xlsm new file mode 100644 index 0000000..68a874a Binary files /dev/null and b/LL-28通讯地址.xlsm differ diff --git a/LL28在线.sln b/LL28在线.sln new file mode 100644 index 0000000..f8f94f6 --- /dev/null +++ b/LL28在线.sln @@ -0,0 +1,51 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29905.134 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SLC1-N", "SLC1-N\SLC1-N.csproj", "{F7F71589-095A-45C2-975C-739BE2D1CE15}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetWorkHelper", "tongxin\NetWorkHelper\NetWorkHelper.csproj", "{FB7970FD-F699-4093-83D0-509501B7863C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F7F71589-095A-45C2-975C-739BE2D1CE15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F7F71589-095A-45C2-975C-739BE2D1CE15}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F7F71589-095A-45C2-975C-739BE2D1CE15}.Debug|x64.ActiveCfg = Debug|Any CPU + {F7F71589-095A-45C2-975C-739BE2D1CE15}.Debug|x64.Build.0 = Debug|Any CPU + {F7F71589-095A-45C2-975C-739BE2D1CE15}.Debug|x86.ActiveCfg = Debug|Any CPU + {F7F71589-095A-45C2-975C-739BE2D1CE15}.Debug|x86.Build.0 = Debug|Any CPU + {F7F71589-095A-45C2-975C-739BE2D1CE15}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F7F71589-095A-45C2-975C-739BE2D1CE15}.Release|Any CPU.Build.0 = Release|Any CPU + {F7F71589-095A-45C2-975C-739BE2D1CE15}.Release|x64.ActiveCfg = Release|Any CPU + {F7F71589-095A-45C2-975C-739BE2D1CE15}.Release|x64.Build.0 = Release|Any CPU + {F7F71589-095A-45C2-975C-739BE2D1CE15}.Release|x86.ActiveCfg = Release|Any CPU + {F7F71589-095A-45C2-975C-739BE2D1CE15}.Release|x86.Build.0 = Release|Any CPU + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|x64.ActiveCfg = Debug|x64 + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|x64.Build.0 = Debug|x64 + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|x86.ActiveCfg = Debug|x86 + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|x86.Build.0 = Debug|x86 + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|Any CPU.Build.0 = Release|Any CPU + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|x64.ActiveCfg = Release|x64 + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|x64.Build.0 = Release|x64 + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|x86.ActiveCfg = Release|x86 + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {33800EBE-90F6-46E8-BF97-17F906AAB6A9} + EndGlobalSection +EndGlobal diff --git a/SLC1-N/.vs/SLC1-N.csproj.dtbcache.json b/SLC1-N/.vs/SLC1-N.csproj.dtbcache.json new file mode 100644 index 0000000..e27c1a8 --- /dev/null +++ b/SLC1-N/.vs/SLC1-N.csproj.dtbcache.json @@ -0,0 +1 @@ +{"RootPath":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\正负压\\USB扫码枪版本\\huabei4tongdao\\SLC1-N","ProjectFileName":"SLC1-N.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"ActivationManager.cs"},{"SourceFile":"Chart.cs"},{"SourceFile":"ConfigINI.cs"},{"SourceFile":"Form_Alarm.cs"},{"SourceFile":"Form_Alarm.Designer.cs"},{"SourceFile":"Form_hbMESset.cs"},{"SourceFile":"Form_hbMESset.Designer.cs"},{"SourceFile":"Form_HQMESconfig.cs"},{"SourceFile":"Form_HQMESconfig.Designer.cs"},{"SourceFile":"Form_NetworkSet.cs"},{"SourceFile":"Form_NetworkSet.Designer.cs"},{"SourceFile":"dllCall.cs"},{"SourceFile":"Electricity.cs"},{"SourceFile":"Electricity.Designer.cs"},{"SourceFile":"Form1.cs"},{"SourceFile":"Form1.Designer.cs"},{"SourceFile":"Form_PLC_Serialport.cs"},{"SourceFile":"Form_PLC_Serialport.Designer.cs"},{"SourceFile":"Form_PLCcontrol.cs"},{"SourceFile":"Form_PLCcontrol.Designer.cs"},{"SourceFile":"Form_PLC_TCP.cs"},{"SourceFile":"Form_PLC_TCP.Designer.cs"},{"SourceFile":"Form_RootSet.cs"},{"SourceFile":"Form_RootSet.Designer.cs"},{"SourceFile":"gdMES.cs"},{"SourceFile":"GetIP.cs"},{"SourceFile":"JsonConfig.cs"},{"SourceFile":"LeakCompensate.cs"},{"SourceFile":"LeakCompensate.Designer.cs"},{"SourceFile":"Form_LogOn.cs"},{"SourceFile":"Form_LogOn.Designer.cs"},{"SourceFile":"MES.cs"},{"SourceFile":"ModbusTCP_28.cs"},{"SourceFile":"mxlLog.cs"},{"SourceFile":"NGDatabase.cs"},{"SourceFile":"Form_SaomaSet.cs"},{"SourceFile":"Form_SaomaSet.Designer.cs"},{"SourceFile":"ProductionData.cs"},{"SourceFile":"Program.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"SaomaClient.cs"},{"SourceFile":"Form_Save.cs"},{"SourceFile":"Form_Save.Designer.cs"},{"SourceFile":"UDPBroadcast.cs"},{"SourceFile":"UserManagement.cs"},{"SourceFile":"UserManagement.Designer.cs"},{"SourceFile":"UserPassword.cs"},{"SourceFile":"UserPassword.Designer.cs"},{"SourceFile":"Warning.cs"},{"SourceFile":"Warning.Designer.cs"},{"SourceFile":"WindowAutoResizer.cs"},{"SourceFile":"yiqiParam.cs"},{"SourceFile":"Properties\\Resources.Designer.cs"},{"SourceFile":"Properties\\Settings.Designer.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.8.AssemblyAttributes.cs"}],"References":[{"Reference":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\正负压\\USB扫码枪版本\\huabei4tongdao\\SLC1-N\\DLL\\DocumentFormat.OpenXml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\正负压\\USB扫码枪版本\\huabei4tongdao\\packages\\EasyModbusTCP.5.6.0\\lib\\net40\\EasyModbus.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\正负压\\USB扫码枪版本\\huabei4tongdao\\SLC1-N\\DLL\\Guna.UI.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\正负压\\USB扫码枪版本\\huabei4tongdao\\SLC1-N\\DLL\\Guna.UI2.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\正负压\\USB扫码枪版本\\huabei4tongdao\\SLC1-N\\DLL\\HslCommunication.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\正负压\\USB扫码枪版本\\huabei4tongdao\\packages\\Microsoft.Office.Interop.Excel.15.0.4795.1001\\lib\\net20\\Microsoft.Office.Interop.Excel.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\Microsoft.VisualBasic.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\正负压\\USB扫码枪版本\\huabei4tongdao\\tongxin\\NetWorkHelper\\bin\\Debug\\NetWorkHelper.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":true,"ProjectPath":""},{"Reference":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\正负压\\USB扫码枪版本\\huabei4tongdao\\packages\\Newtonsoft.Json.13.0.1\\lib\\net45\\Newtonsoft.Json.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\正负压\\USB扫码枪版本\\huabei4tongdao\\SLC1-N\\DLL\\Spire.XLS.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\正负压\\USB扫码枪版本\\huabei4tongdao\\SLC1-N\\DLL\\SunnyUI.Common.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\正负压\\USB扫码枪版本\\huabei4tongdao\\SLC1-N\\DLL\\SunnyUI.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Deployment.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Drawing.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Management.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Web.Services.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Windows.Forms.DataVisualization.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Windows.Forms.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\正负压\\USB扫码枪版本\\huabei4tongdao\\SLC1-N\\bin\\Debug\\LL28-V25111104.exe","OutputItemRelativePath":"LL28-V25111104.exe"},{"OutputItemFullPath":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\正负压\\USB扫码枪版本\\huabei4tongdao\\SLC1-N\\bin\\Debug\\LL28-V25111104.pdb","OutputItemRelativePath":"LL28-V25111104.pdb"}],"CopyToOutputEntries":[]} \ No newline at end of file diff --git a/SLC1-N/ActivationManager.cs b/SLC1-N/ActivationManager.cs new file mode 100644 index 0000000..fc24a89 --- /dev/null +++ b/SLC1-N/ActivationManager.cs @@ -0,0 +1,175 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SLC1_N +{ + public static class ActivationManager + { + private static readonly string ActivationFilePath; + + static ActivationManager() + { + // 设置激活文件路径 + string userFolder = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); + ActivationFilePath = Path.Combine(userFolder, "AppData", "Local", "mxlSoftware", "activation.bin"); + + // 确保目录存在 + Directory.CreateDirectory(Path.GetDirectoryName(ActivationFilePath)); + } + + // 写入激活状态和到期时间 + public static void WriteActivationStatus(bool isActivated, DateTime expiryTime) + { + try + { + string content = $"{isActivated}|{expiryTime:yyyy-MM-dd HH:mm:ss}"; + File.WriteAllText(ActivationFilePath, content); + } + catch (Exception ex) + { + + } + } + + // 写入激活状态并设置有效期 + public static void WriteActivationStatus(bool isActivated, int validDays) + { + DateTime expiryTime = isActivated ? DateTime.Now.AddDays(validDays) : DateTime.MinValue; + WriteActivationStatus(isActivated, expiryTime); + } + + // 只写入激活状态 + public static void WriteActivationStatus(bool isActivated) + { + DateTime expiryTime = isActivated ? DateTime.MaxValue : DateTime.MinValue; + WriteActivationStatus(isActivated, expiryTime); + } + + // 读取激活状态和到期时间 + public static (bool IsActivated, DateTime ExpiryTime) ReadActivationStatus() + { + try + { + if (!File.Exists(ActivationFilePath)) + { + return (false, DateTime.MinValue); + } + + string content = File.ReadAllText(ActivationFilePath); + + if (!content.Contains('|')) + { + bool status = bool.Parse(content); + DateTime etime = status ? DateTime.MaxValue : DateTime.MinValue; + return (status, etime); + } + + string[] parts = content.Split('|'); + bool isActivated = bool.Parse(parts[0]); + DateTime expiryTime = DateTime.ParseExact(parts[1], "yyyy-MM-dd HH:mm:ss", null); + + return (isActivated, expiryTime); + } + catch (Exception ex) + { + return (false, DateTime.MinValue); + } + } + + // 只读取激活状态 + public static bool ReadActivationStatusSimple() + { + var (isActivated, _) = ReadActivationStatus(); + return isActivated; + } + + // 检查激活是否过期 + public static bool CheckActivationExpiry() + { + var (isActivated, expiryTime) = ReadActivationStatus(); + + if (!isActivated) + return false; + + // 检查是否过期 + return DateTime.Now >= expiryTime; + } + + // 获取剩余时间 + public static TimeSpan GetRemainingTime() + { + var (isActivated, expiryTime) = ReadActivationStatus(); + + if (!isActivated || DateTime.Now > expiryTime) + return TimeSpan.Zero; + + return expiryTime - DateTime.Now; + } + + // 获取剩余天数 + public static double GetRemainingDays() + { + TimeSpan remaining = GetRemainingTime(); + return remaining.TotalDays; + } + + // 获取剩余小时数 + public static double GetRemainingHours() + { + TimeSpan remaining = GetRemainingTime(); + return remaining.TotalHours; + } + + // 判断是否是永久激活 + public static bool IsPermanentActivation() + { + var (isActivated, expiryTime) = ReadActivationStatus(); + return isActivated && expiryTime == DateTime.MaxValue; + } + + // 重置激活状态(删除文件) + public static void ResetActivation() + { + try + { + if (File.Exists(ActivationFilePath)) + { + File.Delete(ActivationFilePath); + } + } + catch (Exception ex) + { + MessageBox.Show($"重置激活状态失败: {ex.Message}"); + } + } + } +} + +/* + * +// 写入激活状态和具体到期时间 +ActivationManager.WriteActivationStatus(true, new DateTime(2024, 12, 31)); + +// 写入激活状态并设置30天有效期 +ActivationManager.WriteActivationStatus(true, 30); + +// 写入永久激活 +ActivationManager.WriteActivationStatus(true); + +// 读取激活状态和到期时间 +var (isActivated, expiryTime) = ActivationManager.ReadActivationStatus(); + +// 检查是否过期 +bool isValid = ActivationManager.CheckActivationExpiry(); + +// 获取剩余天数 +double remainingDays = ActivationManager.GetRemainingDays(); + +// 检查是否是永久激活 +bool isPermanent = ActivationManager.IsPermanentActivation(); + */ diff --git a/SLC1-N/App.config b/SLC1-N/App.config new file mode 100644 index 0000000..dcc85ee --- /dev/null +++ b/SLC1-N/App.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/SLC1-N/Chart.cs b/SLC1-N/Chart.cs new file mode 100644 index 0000000..08d63f2 --- /dev/null +++ b/SLC1-N/Chart.cs @@ -0,0 +1,357 @@ +using Sunny.UI.Win32; +using System; +using System.Collections.Generic; +using System.Data; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Excel = Microsoft.Office.Interop.Excel; +using System.Windows.Forms.DataVisualization; +using System.Windows.Forms.DataVisualization.Charting; +using System.Drawing.Imaging; +using System.Drawing; +using DocumentFormat.OpenXml.EMMA; + +namespace SLC1_N +{ + class Chart + { + // 生成泄漏量趋势图 + public static void Create_TrendChart(int CH, string filepath, int maxProducts = 10) + { + try + { + string datatime = DateTime.Now.ToString("yyyyMMdd"); + //string filepath = GetExcelFilePath(CH, datatime); + + if (!File.Exists(filepath)) + { + mxlLog.Instance.Error($"Excel文件不存在,无法生成图表"); + return; + } + + // 读取Excel数据 + var Exceldata = ReadExcelData(filepath, maxProducts); + + if (Exceldata.Rows.Count == 0) + { + mxlLog.Instance.Error($"没有足够的数据生成趋势图"); + return; + } + + // 提取泄漏量数据 + List leakValues_list = new List(); + List productLabels = new List(); + List code_list = new List(); + List results_list = new List(); + + for (int i = 0; i < Exceldata.Rows.Count; i++) + { + string leakStr = Exceldata.Rows[i]["微漏泄漏量"].ToString(); + Console.WriteLine($"Chart:{i}: {leakStr}"); + + // 移除单位,只保留数值 + leakStr = leakStr.Replace("KPa", "") + .Replace("Pa/s", "") + .Replace("mbar/s", "") + .Replace("Pa", "") + .Replace("s", "").Trim(); + Console.WriteLine($"Chart2:{i}: {leakStr}"); + + if (double.TryParse(leakStr, out double leakage)) + { + leakValues_list.Add(leakage); + productLabels.Add($"产品{i + 1}"); + code_list.Add(Exceldata.Rows[i]["条形码"].ToString()); + results_list.Add(Exceldata.Rows[i]["测试结果"].ToString()); + } + } + + if (leakValues_list.Count == 0) + { + mxlLog.Instance.Error($"没有有效的泄漏量数据"); + return; + } + + // 创建图表图像 + int width = 1000; + int height = 600; + using (Bitmap bitmap = new Bitmap(width, height)) + using (Graphics graphics = Graphics.FromImage(bitmap)) + { + graphics.Clear(Color.White); + graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; // 抗锯齿 + + // 设置边距 + int margin = 50; + int chartWidth = width - 2 * margin; + int chartHeight = height - 2 * margin; + + // 计算Y轴数据范围(最大值加10%,最小值减10%,但不小于0) + double maxValue = leakValues_list.Max() * 1.1; + double minValue = Math.Max(0, leakValues_list.Min() * 0.9); + + // 绘制标题 + using (Font titleFont = new Font("Arial", 16, FontStyle.Bold)) + using (Brush titleBrush = new SolidBrush(Color.Black)) + { + graphics.DrawString($"通道{CH} - 最近{maxProducts}个产品泄漏量趋势", + titleFont, titleBrush, + new PointF(width / 2 - 150, 10)); // 居中 + } + + // 绘制坐标轴(Y轴坐标是向下的,原点(50,550)) + using (Pen axisPen = new Pen(Color.Black, 2)) + { + // X轴 + graphics.DrawLine(axisPen, margin, height - margin, width - margin, height - margin); + // Y轴 + graphics.DrawLine(axisPen, margin, margin, margin, height - margin); + } + + // 绘制Y轴刻度 + using (Font scaleFont = new Font("Arial", 8)) + using (Brush scaleBrush = new SolidBrush(Color.Black)) + { + for (int i = 0; i <= 5; i++) // 在 Y 轴上绘制 5 个等分刻度。 + { + double value = minValue + (maxValue - minValue) * i / 5; + int y = height - margin - (int)(chartHeight * i / 5); + graphics.DrawString(value.ToString("F2"), scaleFont, scaleBrush, + margin - 45, y - 10); // 刻度标签坐标 + } + } + + // 绘制数据点 + using (Pen dataPen = new Pen(Color.Blue, 2)) // 连线 + using (Brush pointBrush = new SolidBrush(Color.Red)) // 坐标点 + using (Font labelFont = new Font("Arial", 8)) + using (Brush labelBrush = new SolidBrush(Color.DarkBlue)) // 数据点数值标签 + { + for (int i = 0; i < leakValues_list.Count; i++) + { + double leakvalue = leakValues_list[i]; + int x = margin + (int)(chartWidth * i / (leakValues_list.Count - 1)); + int y = height - margin - (int)(chartHeight * (leakvalue - minValue) / (maxValue - minValue)); + + // 绘制数据点连接线 + if (i > 0) + { + double prevValue = leakValues_list[i - 1]; // 前一个数据值 + int prevX = margin + (int)(chartWidth * (i - 1) / (leakValues_list.Count - 1)); + int prevY = height - margin - (int)(chartHeight * (prevValue - minValue) / (maxValue - minValue)); + graphics.DrawLine(dataPen, prevX, prevY, x, y); // 连接前一个点和当前点 + } + + // 绘制数据点 + graphics.FillEllipse(pointBrush, x - 4, y - 4, 8, 8); + + // 绘制数值标签 + string label = leakvalue.ToString("F2"); + graphics.DrawString(label, labelFont, labelBrush, x - 15, y - 20); + + // 绘制X轴标签 + graphics.DrawString(productLabels[i], labelFont, labelBrush, + x - 10, height - margin + 10); + } + } + + // 绘制图例 + using (Font legendFont = new Font("Arial", 10)) + using (Brush legendBrush = new SolidBrush(Color.Black)) + { + graphics.DrawString("泄漏量趋势", legendFont, legendBrush, width - 150, margin); + graphics.DrawLine(new Pen(Color.Blue, 2), width - 170, margin + 10, width - 140, margin + 10); + graphics.FillEllipse(Brushes.Red, width - 145, margin + 6, 8, 8); + } + + // 保存图表 + string chartDir = Path.Combine(Path.GetDirectoryName(filepath), "Charts"); + if (!Directory.Exists(chartDir)) + Directory.CreateDirectory(chartDir); + + string chartPath = Path.Combine(chartDir, $"CH{CH}_LeakageTrend_{datatime}.png"); + bitmap.Save(chartPath, ImageFormat.Png); + + //MessageBox.Show($"图表已保存至: {chartPath}"); + } + } + catch (Exception ex) + { + mxlLog.Instance.Error($"图表生成错误: {ex.Message}", ex); + } + } + + // 生成结果统计图 + public static void Create_PieChart(int CH, string filepath) + { + try + { + string datatime = DateTime.Now.ToString("yyyyMMdd"); + //string filepath = GetExcelFilePath(CH, datatime); + + if (!File.Exists(filepath)) + return; + + var data = ReadExcelData(filepath, 1000); + + int okCount = 0; + int ngCount = 0; + + foreach (DataRow row in data.Rows) + { + string result = row["测试结果"].ToString(); + if (result.Equals("OK", StringComparison.OrdinalIgnoreCase)) + okCount++; + else if (result.Equals("NG", StringComparison.OrdinalIgnoreCase)) + ngCount++; + } + + int total = okCount + ngCount; + if (total == 0) + return; + + // 创建统计图 + int width = 600; + int height = 400; + using (Bitmap bitmap = new Bitmap(width, height)) + using (Graphics graphics = Graphics.FromImage(bitmap)) + { + graphics.Clear(Color.White); + graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + + // 绘制标题 + using (Font titleFont = new Font("Arial", 16, FontStyle.Bold)) + { + graphics.DrawString($"通道{CH} - 测试结果统计", titleFont, Brushes.Black, 150, 10); + graphics.DrawString($"总计: {total} 个产品", titleFont, Brushes.Black, 200, 40); + } + + // 绘制饼图 + int centerX = width / 2; + int centerY = height / 2 + 20; + int radius = 120; + + if (okCount > 0) + { + float okAngle = 360f * okCount / total; + graphics.FillPie(Brushes.Green, centerX - radius, centerY - radius, + radius * 2, radius * 2, 0, okAngle); + } + + if (ngCount > 0) + { + float ngAngle = 360f * ngCount / total; + graphics.FillPie(Brushes.Red, centerX - radius, centerY - radius, + radius * 2, radius * 2, 360f * okCount / total, ngAngle); + } + + // 绘制图例 + using (Font legendFont = new Font("Arial", 12)) + { + graphics.FillRectangle(Brushes.Green, 100, height - 80, 20, 20); + graphics.DrawString($"OK: {okCount} ({okCount * 100f / total:F1}%)", + legendFont, Brushes.Black, 130, height - 80); + + graphics.FillRectangle(Brushes.Red, 300, height - 80, 20, 20); + graphics.DrawString($"NG: {ngCount} ({ngCount * 100f / total:F1}%)", + legendFont, Brushes.Black, 330, height - 80); + } + + // 保存图表 + string chartDir = Path.Combine(Path.GetDirectoryName(filepath), "Charts"); + if (!Directory.Exists(chartDir)) + Directory.CreateDirectory(chartDir); + + string chartPath = Path.Combine(chartDir, $"CH{CH}_ResultStat_{datatime}.png"); + bitmap.Save(chartPath, ImageFormat.Png); + } + } + catch (Exception ex) + { + mxlLog.Instance.Error($"生成统计图错误: {ex.Message}", ex); + } + } + + // 读取Excel数据 + private static DataTable ReadExcelData(string filePath, int maxRows = 10) + { + DataTable dt = new DataTable(); + + Excel.Application xapp = null; + Excel.Workbook xbook = null; + + try + { + xapp = new Excel.Application(); + xapp.Visible = false; + xapp.DisplayAlerts = false; + + xbook = xapp.Workbooks.Open(filePath); + Excel.Worksheet xsheet = (Excel.Worksheet)xbook.Sheets[1]; + + // 获取最后一行 + int lastRow = xsheet.Cells.Find("*", System.Reflection.Missing.Value, + System.Reflection.Missing.Value, + System.Reflection.Missing.Value, + Excel.XlSearchOrder.xlByRows, + Excel.XlSearchDirection.xlPrevious, + false, System.Reflection.Missing.Value, + System.Reflection.Missing.Value).Row; + + // 读取表头创建列 + for (int col = 1; col <= 15; col++) + { + string header = (xsheet.Cells[1, col] as Excel.Range)?.Value2?.ToString() ?? $"Column{col}"; + dt.Columns.Add(header); + } + + // 读取数据(从最后maxRows行开始) + int startRow = Math.Max(2, lastRow - maxRows + 1); + for (int row = startRow; row <= lastRow; row++) + { + DataRow dr = dt.NewRow(); + for (int col = 1; col <= 15; col++) + { + var cellValue = (xsheet.Cells[row, col] as Excel.Range)?.Value2; + dr[col - 1] = cellValue?.ToString() ?? ""; + } + dt.Rows.Add(dr); + } + } + catch (Exception ex) + { + mxlLog.Instance.Error($"读取Excel数据错误", ex); + } + finally + { + if (xbook != null) + { + xbook.Close(false); + System.Runtime.InteropServices.Marshal.ReleaseComObject(xbook); + } + if (xapp != null) + { + xapp.Quit(); + System.Runtime.InteropServices.Marshal.ReleaseComObject(xapp); + } + GC.Collect(); + GC.WaitForPendingFinalizers(); + } + + return dt; + } + + // 获取Excel文件路径 + private static string GetExcelFilePath(int CH, string date) + { + string basePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + string chPath = CH == 1 ? "CH1" : "CH2"; + return Path.Combine(basePath, chPath, $"{CH}_{date}.xls"); + } + } + +} diff --git a/SLC1-N/ConfigINI.cs b/SLC1-N/ConfigINI.cs new file mode 100644 index 0000000..5d1a666 --- /dev/null +++ b/SLC1-N/ConfigINI.cs @@ -0,0 +1,64 @@ +using System.IO; +using System.Runtime.InteropServices; +using System.Text; + +namespace SLC1_N +{ + public class ConfigINI + { + public string inipath; + [DllImport("kernel32")] + private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); + [DllImport("kernel32")] + private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); + /// + /// 构造方法 + /// + /// 文件路径 + public ConfigINI(string Folder, string INIPath) + { + inipath = System.AppDomain.CurrentDomain.BaseDirectory + "Config\\" + Folder + "\\"; + if (!Directory.Exists(inipath)) + { + Directory.CreateDirectory(inipath); + } + inipath += INIPath; + } + + /// + /// 写入INI文件 + /// + /// 项目名称(如 [TypeName] ) + /// 键 + /// 值 + public void IniWriteValue(string Section, string Key, string Value) + { + WritePrivateProfileString(Section, Key, Value, this.inipath); + } + + /// + /// 读出INI文件 + /// + /// 项目名称(如 [TypeName] ) + /// 键 + public string IniReadValue(string Section, string Key) + { + if (ExistINIFile()) + { + StringBuilder temp = new StringBuilder(500); + int i = GetPrivateProfileString(Section, Key, "", temp, 500, this.inipath); + return temp.ToString(); + } + return null; + } + + /// + /// 验证文件是否存在 + /// + /// 布尔值 + public bool ExistINIFile() + { + return File.Exists(inipath); + } + } +} diff --git a/SLC1-N/DLL/DocumentFormat.OpenXml.dll b/SLC1-N/DLL/DocumentFormat.OpenXml.dll new file mode 100644 index 0000000..839ed13 Binary files /dev/null and b/SLC1-N/DLL/DocumentFormat.OpenXml.dll differ diff --git a/SLC1-N/DLL/Guna.UI.dll b/SLC1-N/DLL/Guna.UI.dll new file mode 100644 index 0000000..cc77d39 Binary files /dev/null and b/SLC1-N/DLL/Guna.UI.dll differ diff --git a/SLC1-N/DLL/Guna.UI2.dll b/SLC1-N/DLL/Guna.UI2.dll new file mode 100644 index 0000000..e172ba3 Binary files /dev/null and b/SLC1-N/DLL/Guna.UI2.dll differ diff --git a/SLC1-N/DLL/HslCommunication.dll b/SLC1-N/DLL/HslCommunication.dll new file mode 100644 index 0000000..82148f6 Binary files /dev/null and b/SLC1-N/DLL/HslCommunication.dll differ diff --git a/SLC1-N/DLL/NetWorkHelper.dll b/SLC1-N/DLL/NetWorkHelper.dll new file mode 100644 index 0000000..0b27014 Binary files /dev/null and b/SLC1-N/DLL/NetWorkHelper.dll differ diff --git a/SLC1-N/DLL/Newtonsoft.Json.dll b/SLC1-N/DLL/Newtonsoft.Json.dll new file mode 100644 index 0000000..7af125a Binary files /dev/null and b/SLC1-N/DLL/Newtonsoft.Json.dll differ diff --git a/SLC1-N/DLL/Spire.XLS.dll b/SLC1-N/DLL/Spire.XLS.dll new file mode 100644 index 0000000..60d90ba Binary files /dev/null and b/SLC1-N/DLL/Spire.XLS.dll differ diff --git a/SLC1-N/DLL/SunnyUI.Common.dll b/SLC1-N/DLL/SunnyUI.Common.dll new file mode 100644 index 0000000..546e7a7 Binary files /dev/null and b/SLC1-N/DLL/SunnyUI.Common.dll differ diff --git a/SLC1-N/DLL/SunnyUI.dll b/SLC1-N/DLL/SunnyUI.dll new file mode 100644 index 0000000..30e3477 Binary files /dev/null and b/SLC1-N/DLL/SunnyUI.dll differ diff --git a/SLC1-N/DLL/USB2XXX.dll b/SLC1-N/DLL/USB2XXX.dll new file mode 100644 index 0000000..8094e55 Binary files /dev/null and b/SLC1-N/DLL/USB2XXX.dll differ diff --git a/SLC1-N/DLL/libusb-1.0.dll b/SLC1-N/DLL/libusb-1.0.dll new file mode 100644 index 0000000..5377cb4 Binary files /dev/null and b/SLC1-N/DLL/libusb-1.0.dll differ diff --git a/SLC1-N/DLL/microsoft.office.interop.excel.dll b/SLC1-N/DLL/microsoft.office.interop.excel.dll new file mode 100644 index 0000000..31b9e29 Binary files /dev/null and b/SLC1-N/DLL/microsoft.office.interop.excel.dll differ diff --git a/SLC1-N/Electricity.Designer.cs b/SLC1-N/Electricity.Designer.cs new file mode 100644 index 0000000..032403a --- /dev/null +++ b/SLC1-N/Electricity.Designer.cs @@ -0,0 +1,1713 @@ +namespace SLC1_N +{ + partial class Electricity + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Electricity)); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.lb_PLCsaomamsg = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.tb_ContinueTestCount = new Sunny.UI.UITextBox(); + this.chk_ContinueTest = new System.Windows.Forms.CheckBox(); + this.chk_ch4saoma = new System.Windows.Forms.CheckBox(); + this.chk_ch3saoma = new System.Windows.Forms.CheckBox(); + this.chk_ch2saoma = new System.Windows.Forms.CheckBox(); + this.chk_ch1saoma = new System.Windows.Forms.CheckBox(); + this.uiGroupBox2 = new Sunny.UI.UIGroupBox(); + this.tb_code4len = new Sunny.UI.UITextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.tb_code2len = new Sunny.UI.UITextBox(); + this.tb_code3len = new Sunny.UI.UITextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.uiTextBox1 = new Sunny.UI.UITextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.uiTextBox2 = new Sunny.UI.UITextBox(); + this.uiTextBox3 = new Sunny.UI.UITextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.tb_code1len = new Sunny.UI.UITextBox(); + this.bt_savelen = new Sunny.UI.UISymbolButton(); + this.label7 = new System.Windows.Forms.Label(); + this.uiGroupBox1 = new Sunny.UI.UIGroupBox(); + this.PressingTimeMin = new Sunny.UI.UITextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.PressMin = new Sunny.UI.UITextBox(); + this.PressingTimeMax = new Sunny.UI.UITextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.PressMax = new Sunny.UI.UITextBox(); + this.SaveConfig = new Sunny.UI.UISymbolButton(); + this.label33 = new System.Windows.Forms.Label(); + this.uiGroupBox13 = new Sunny.UI.UIGroupBox(); + this.chk_ChkBee = new System.Windows.Forms.CheckBox(); + this.rbt_NpressureMode = new System.Windows.Forms.RadioButton(); + this.tb_ParaName = new Sunny.UI.UITextBox(); + this.cb_ParaNum = new Sunny.UI.UIComboBox(); + this.rbt_PpressureMode = new System.Windows.Forms.RadioButton(); + this.cb_MachineNum = new Sunny.UI.UIComboBox(); + this.bt_BtnKeep = new Sunny.UI.UISymbolButton(); + this.bt_BtnRead = new Sunny.UI.UISymbolButton(); + this.bt_BtnUpload = new Sunny.UI.UISymbolButton(); + this.uiGroupBox15 = new Sunny.UI.UIGroupBox(); + this.cb_LUnit = new Sunny.UI.UIComboBox(); + this.rbt_OpeningMode = new System.Windows.Forms.RadioButton(); + this.cb_PUnit = new Sunny.UI.UIComboBox(); + this.lb_LUnit2 = new System.Windows.Forms.Label(); + this.rbt_VolumeMode = new System.Windows.Forms.RadioButton(); + this.lb_LUnit1 = new System.Windows.Forms.Label(); + this.tb_Leaklowlimit = new Sunny.UI.UITextBox(); + this.label117 = new System.Windows.Forms.Label(); + this.tb_Leaktoplimit = new Sunny.UI.UITextBox(); + this.label116 = new System.Windows.Forms.Label(); + this.tb_BalanPreMin = new Sunny.UI.UITextBox(); + this.lb_PUnit2 = new System.Windows.Forms.Label(); + this.tb_BalanPreMax = new Sunny.UI.UITextBox(); + this.lb_PUnit1 = new System.Windows.Forms.Label(); + this.tb_FPlowlimit = new Sunny.UI.UITextBox(); + this.tb_FPtoplimit = new Sunny.UI.UITextBox(); + this.label106 = new System.Windows.Forms.Label(); + this.label107 = new System.Windows.Forms.Label(); + this.label108 = new System.Windows.Forms.Label(); + this.label109 = new System.Windows.Forms.Label(); + this.label110 = new System.Windows.Forms.Label(); + this.label111 = new System.Windows.Forms.Label(); + this.label112 = new System.Windows.Forms.Label(); + this.label113 = new System.Windows.Forms.Label(); + this.uiGroupBox14 = new Sunny.UI.UIGroupBox(); + this.label105 = new System.Windows.Forms.Label(); + this.label104 = new System.Windows.Forms.Label(); + this.tb_Evolume = new Sunny.UI.UITextBox(); + this.label103 = new System.Windows.Forms.Label(); + this.tb_RelieveDelay = new Sunny.UI.UITextBox(); + this.label102 = new System.Windows.Forms.Label(); + this.tb_DelayTime2 = new Sunny.UI.UITextBox(); + this.label101 = new System.Windows.Forms.Label(); + this.tb_DelayTime1 = new Sunny.UI.UITextBox(); + this.label100 = new System.Windows.Forms.Label(); + this.label99 = new System.Windows.Forms.Label(); + this.label98 = new System.Windows.Forms.Label(); + this.tb_ExhaustTime = new Sunny.UI.UITextBox(); + this.tb_TestTime1 = new Sunny.UI.UITextBox(); + this.tb_BalanTime = new Sunny.UI.UITextBox(); + this.tb_FullTime = new Sunny.UI.UITextBox(); + this.label90 = new System.Windows.Forms.Label(); + this.label97 = new System.Windows.Forms.Label(); + this.label91 = new System.Windows.Forms.Label(); + this.label96 = new System.Windows.Forms.Label(); + this.label92 = new System.Windows.Forms.Label(); + this.label95 = new System.Windows.Forms.Label(); + this.label93 = new System.Windows.Forms.Label(); + this.label94 = new System.Windows.Forms.Label(); + this.label87 = new System.Windows.Forms.Label(); + this.label88 = new System.Windows.Forms.Label(); + this.label89 = new System.Windows.Forms.Label(); + this.SendText = new System.Windows.Forms.TextBox(); + this.uiTabControlMenu1 = new Sunny.UI.UITabControlMenu(); + this.tabPage3.SuspendLayout(); + this.uiGroupBox2.SuspendLayout(); + this.uiGroupBox1.SuspendLayout(); + this.uiGroupBox13.SuspendLayout(); + this.uiGroupBox15.SuspendLayout(); + this.uiGroupBox14.SuspendLayout(); + this.uiTabControlMenu1.SuspendLayout(); + this.SuspendLayout(); + // + // tabPage3 + // + this.tabPage3.BackColor = System.Drawing.Color.LightBlue; + this.tabPage3.Controls.Add(this.lb_PLCsaomamsg); + this.tabPage3.Controls.Add(this.label17); + this.tabPage3.Controls.Add(this.tb_ContinueTestCount); + this.tabPage3.Controls.Add(this.chk_ContinueTest); + this.tabPage3.Controls.Add(this.chk_ch4saoma); + this.tabPage3.Controls.Add(this.chk_ch3saoma); + this.tabPage3.Controls.Add(this.chk_ch2saoma); + this.tabPage3.Controls.Add(this.chk_ch1saoma); + this.tabPage3.Controls.Add(this.uiGroupBox2); + this.tabPage3.Controls.Add(this.uiGroupBox1); + this.tabPage3.Controls.Add(this.uiGroupBox13); + this.tabPage3.Controls.Add(this.SendText); + this.tabPage3.Location = new System.Drawing.Point(146, 0); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(1418, 1131); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "仪器参数设置"; + // + // lb_PLCsaomamsg + // + this.lb_PLCsaomamsg.AutoSize = true; + this.lb_PLCsaomamsg.Font = new System.Drawing.Font("宋体", 15F); + this.lb_PLCsaomamsg.Location = new System.Drawing.Point(758, 569); + this.lb_PLCsaomamsg.Name = "lb_PLCsaomamsg"; + this.lb_PLCsaomamsg.Size = new System.Drawing.Size(29, 20); + this.lb_PLCsaomamsg.TabIndex = 483; + this.lb_PLCsaomamsg.Text = "##"; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Font = new System.Drawing.Font("宋体", 15F); + this.label17.Location = new System.Drawing.Point(789, 530); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(59, 20); + this.label17.TabIndex = 482; + this.label17.Text = "次数:"; + // + // tb_ContinueTestCount + // + this.tb_ContinueTestCount.ButtonSymbol = 61761; + this.tb_ContinueTestCount.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_ContinueTestCount.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_ContinueTestCount.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_ContinueTestCount.Location = new System.Drawing.Point(851, 526); + this.tb_ContinueTestCount.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_ContinueTestCount.Maximum = 2147483647D; + this.tb_ContinueTestCount.Minimum = -2147483648D; + this.tb_ContinueTestCount.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_ContinueTestCount.Name = "tb_ContinueTestCount"; + this.tb_ContinueTestCount.Size = new System.Drawing.Size(80, 29); + this.tb_ContinueTestCount.Style = Sunny.UI.UIStyle.Custom; + this.tb_ContinueTestCount.TabIndex = 250; + this.tb_ContinueTestCount.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + this.tb_ContinueTestCount.TextChanged += new System.EventHandler(this.tb_ContinueTestCount_TextChanged); + // + // chk_ContinueTest + // + this.chk_ContinueTest.AutoSize = true; + this.chk_ContinueTest.BackColor = System.Drawing.Color.LightBlue; + this.chk_ContinueTest.Font = new System.Drawing.Font("宋体", 15F); + this.chk_ContinueTest.Location = new System.Drawing.Point(791, 494); + this.chk_ContinueTest.Name = "chk_ContinueTest"; + this.chk_ContinueTest.Size = new System.Drawing.Size(108, 24); + this.chk_ContinueTest.TabIndex = 481; + this.chk_ContinueTest.Text = "连续测试"; + this.chk_ContinueTest.UseVisualStyleBackColor = false; + this.chk_ContinueTest.CheckedChanged += new System.EventHandler(this.chk_ContinueTest_CheckedChanged); + // + // chk_ch4saoma + // + this.chk_ch4saoma.AutoSize = true; + this.chk_ch4saoma.BackColor = System.Drawing.Color.LightBlue; + this.chk_ch4saoma.Font = new System.Drawing.Font("宋体", 15F); + this.chk_ch4saoma.Location = new System.Drawing.Point(887, 638); + this.chk_ch4saoma.Name = "chk_ch4saoma"; + this.chk_ch4saoma.Size = new System.Drawing.Size(118, 24); + this.chk_ch4saoma.TabIndex = 480; + this.chk_ch4saoma.Text = "通道4扫码"; + this.chk_ch4saoma.UseVisualStyleBackColor = false; + this.chk_ch4saoma.CheckedChanged += new System.EventHandler(this.chk_ch4saoma_CheckedChanged); + // + // chk_ch3saoma + // + this.chk_ch3saoma.AutoSize = true; + this.chk_ch3saoma.BackColor = System.Drawing.Color.LightBlue; + this.chk_ch3saoma.Font = new System.Drawing.Font("宋体", 15F); + this.chk_ch3saoma.Location = new System.Drawing.Point(763, 638); + this.chk_ch3saoma.Name = "chk_ch3saoma"; + this.chk_ch3saoma.Size = new System.Drawing.Size(118, 24); + this.chk_ch3saoma.TabIndex = 479; + this.chk_ch3saoma.Text = "通道3扫码"; + this.chk_ch3saoma.UseVisualStyleBackColor = false; + this.chk_ch3saoma.CheckedChanged += new System.EventHandler(this.chk_ch3saoma_CheckedChanged); + // + // chk_ch2saoma + // + this.chk_ch2saoma.AutoSize = true; + this.chk_ch2saoma.BackColor = System.Drawing.Color.LightBlue; + this.chk_ch2saoma.Font = new System.Drawing.Font("宋体", 15F); + this.chk_ch2saoma.Location = new System.Drawing.Point(887, 601); + this.chk_ch2saoma.Name = "chk_ch2saoma"; + this.chk_ch2saoma.Size = new System.Drawing.Size(118, 24); + this.chk_ch2saoma.TabIndex = 478; + this.chk_ch2saoma.Text = "通道2扫码"; + this.chk_ch2saoma.UseVisualStyleBackColor = false; + this.chk_ch2saoma.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged); + // + // chk_ch1saoma + // + this.chk_ch1saoma.AutoSize = true; + this.chk_ch1saoma.BackColor = System.Drawing.Color.LightBlue; + this.chk_ch1saoma.Font = new System.Drawing.Font("宋体", 15F); + this.chk_ch1saoma.Location = new System.Drawing.Point(763, 601); + this.chk_ch1saoma.Name = "chk_ch1saoma"; + this.chk_ch1saoma.Size = new System.Drawing.Size(118, 24); + this.chk_ch1saoma.TabIndex = 477; + this.chk_ch1saoma.Text = "通道1扫码"; + this.chk_ch1saoma.UseVisualStyleBackColor = false; + this.chk_ch1saoma.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // uiGroupBox2 + // + this.uiGroupBox2.Controls.Add(this.tb_code4len); + this.uiGroupBox2.Controls.Add(this.label9); + this.uiGroupBox2.Controls.Add(this.tb_code2len); + this.uiGroupBox2.Controls.Add(this.tb_code3len); + this.uiGroupBox2.Controls.Add(this.label8); + this.uiGroupBox2.Controls.Add(this.label10); + this.uiGroupBox2.Controls.Add(this.uiTextBox1); + this.uiGroupBox2.Controls.Add(this.label4); + this.uiGroupBox2.Controls.Add(this.uiTextBox2); + this.uiGroupBox2.Controls.Add(this.uiTextBox3); + this.uiGroupBox2.Controls.Add(this.label5); + this.uiGroupBox2.Controls.Add(this.label6); + this.uiGroupBox2.Controls.Add(this.tb_code1len); + this.uiGroupBox2.Controls.Add(this.bt_savelen); + this.uiGroupBox2.Controls.Add(this.label7); + this.uiGroupBox2.FillColor = System.Drawing.Color.LightBlue; + this.uiGroupBox2.Font = new System.Drawing.Font("宋体", 20F); + this.uiGroupBox2.Location = new System.Drawing.Point(15, 478); + this.uiGroupBox2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox2.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox2.Name = "uiGroupBox2"; + this.uiGroupBox2.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox2.Size = new System.Drawing.Size(466, 167); + this.uiGroupBox2.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox2.TabIndex = 248; + this.uiGroupBox2.Text = "参数设置"; + this.uiGroupBox2.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // tb_code4len + // + this.tb_code4len.ButtonSymbol = 61761; + this.tb_code4len.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_code4len.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_code4len.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_code4len.Location = new System.Drawing.Point(139, 126); + this.tb_code4len.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_code4len.Maximum = 2147483647D; + this.tb_code4len.Minimum = -2147483648D; + this.tb_code4len.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_code4len.Name = "tb_code4len"; + this.tb_code4len.Size = new System.Drawing.Size(118, 29); + this.tb_code4len.Style = Sunny.UI.UIStyle.Custom; + this.tb_code4len.TabIndex = 253; + this.tb_code4len.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Font = new System.Drawing.Font("宋体", 15F); + this.label9.Location = new System.Drawing.Point(139, 101); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(99, 20); + this.label9.TabIndex = 252; + this.label9.Text = "条码4长度"; + // + // tb_code2len + // + this.tb_code2len.ButtonSymbol = 61761; + this.tb_code2len.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_code2len.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_code2len.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_code2len.Location = new System.Drawing.Point(139, 63); + this.tb_code2len.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_code2len.Maximum = 2147483647D; + this.tb_code2len.Minimum = -2147483648D; + this.tb_code2len.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_code2len.Name = "tb_code2len"; + this.tb_code2len.Size = new System.Drawing.Size(118, 29); + this.tb_code2len.Style = Sunny.UI.UIStyle.Custom; + this.tb_code2len.TabIndex = 249; + this.tb_code2len.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // tb_code3len + // + this.tb_code3len.ButtonSymbol = 61761; + this.tb_code3len.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_code3len.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_code3len.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_code3len.Location = new System.Drawing.Point(11, 126); + this.tb_code3len.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_code3len.Maximum = 2147483647D; + this.tb_code3len.Minimum = -2147483648D; + this.tb_code3len.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_code3len.Name = "tb_code3len"; + this.tb_code3len.Size = new System.Drawing.Size(118, 29); + this.tb_code3len.Style = Sunny.UI.UIStyle.Custom; + this.tb_code3len.TabIndex = 251; + this.tb_code3len.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Font = new System.Drawing.Font("宋体", 15F); + this.label8.Location = new System.Drawing.Point(139, 38); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(99, 20); + this.label8.TabIndex = 248; + this.label8.Text = "条码2长度"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Font = new System.Drawing.Font("宋体", 15F); + this.label10.Location = new System.Drawing.Point(11, 101); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(99, 20); + this.label10.TabIndex = 250; + this.label10.Text = "条码3长度"; + // + // uiTextBox1 + // + this.uiTextBox1.ButtonSymbol = 61761; + this.uiTextBox1.Cursor = System.Windows.Forms.Cursors.IBeam; + this.uiTextBox1.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiTextBox1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiTextBox1.Location = new System.Drawing.Point(163, 204); + this.uiTextBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiTextBox1.Maximum = 2147483647D; + this.uiTextBox1.Minimum = -2147483648D; + this.uiTextBox1.MinimumSize = new System.Drawing.Size(1, 16); + this.uiTextBox1.Name = "uiTextBox1"; + this.uiTextBox1.Size = new System.Drawing.Size(118, 29); + this.uiTextBox1.Style = Sunny.UI.UIStyle.Custom; + this.uiTextBox1.TabIndex = 247; + this.uiTextBox1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("宋体", 15F); + this.label4.Location = new System.Drawing.Point(163, 179); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(129, 20); + this.label4.TabIndex = 246; + this.label4.Text = "压合时间下限"; + // + // uiTextBox2 + // + this.uiTextBox2.ButtonSymbol = 61761; + this.uiTextBox2.Cursor = System.Windows.Forms.Cursors.IBeam; + this.uiTextBox2.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiTextBox2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiTextBox2.Location = new System.Drawing.Point(11, 204); + this.uiTextBox2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiTextBox2.Maximum = 2147483647D; + this.uiTextBox2.Minimum = -2147483648D; + this.uiTextBox2.MinimumSize = new System.Drawing.Size(1, 16); + this.uiTextBox2.Name = "uiTextBox2"; + this.uiTextBox2.Size = new System.Drawing.Size(118, 29); + this.uiTextBox2.Style = Sunny.UI.UIStyle.Custom; + this.uiTextBox2.TabIndex = 243; + this.uiTextBox2.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiTextBox3 + // + this.uiTextBox3.ButtonSymbol = 61761; + this.uiTextBox3.Cursor = System.Windows.Forms.Cursors.IBeam; + this.uiTextBox3.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiTextBox3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiTextBox3.Location = new System.Drawing.Point(754, 57); + this.uiTextBox3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiTextBox3.Maximum = 2147483647D; + this.uiTextBox3.Minimum = -2147483648D; + this.uiTextBox3.MinimumSize = new System.Drawing.Size(1, 16); + this.uiTextBox3.Name = "uiTextBox3"; + this.uiTextBox3.Size = new System.Drawing.Size(118, 29); + this.uiTextBox3.Style = Sunny.UI.UIStyle.Custom; + this.uiTextBox3.TabIndex = 245; + this.uiTextBox3.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + this.uiTextBox3.Visible = false; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("宋体", 15F); + this.label5.Location = new System.Drawing.Point(11, 179); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(89, 20); + this.label5.TabIndex = 242; + this.label5.Text = "压力下限"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("宋体", 15F); + this.label6.Location = new System.Drawing.Point(743, 32); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(129, 20); + this.label6.TabIndex = 244; + this.label6.Text = "压合时间上限"; + this.label6.Visible = false; + // + // tb_code1len + // + this.tb_code1len.ButtonSymbol = 61761; + this.tb_code1len.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_code1len.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_code1len.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_code1len.Location = new System.Drawing.Point(11, 63); + this.tb_code1len.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_code1len.Maximum = 2147483647D; + this.tb_code1len.Minimum = -2147483648D; + this.tb_code1len.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_code1len.Name = "tb_code1len"; + this.tb_code1len.Size = new System.Drawing.Size(118, 29); + this.tb_code1len.Style = Sunny.UI.UIStyle.Custom; + this.tb_code1len.TabIndex = 230; + this.tb_code1len.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // bt_savelen + // + this.bt_savelen.Cursor = System.Windows.Forms.Cursors.Hand; + this.bt_savelen.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_savelen.Location = new System.Drawing.Point(284, 86); + this.bt_savelen.MinimumSize = new System.Drawing.Size(1, 1); + this.bt_savelen.Name = "bt_savelen"; + this.bt_savelen.Size = new System.Drawing.Size(149, 35); + this.bt_savelen.Style = Sunny.UI.UIStyle.Custom; + this.bt_savelen.Symbol = 61678; + this.bt_savelen.TabIndex = 241; + this.bt_savelen.Text = "保存设置"; + this.bt_savelen.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_savelen.Click += new System.EventHandler(this.uiSymbolButton1_Click); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("宋体", 15F); + this.label7.Location = new System.Drawing.Point(11, 38); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(99, 20); + this.label7.TabIndex = 222; + this.label7.Text = "条码1长度"; + // + // uiGroupBox1 + // + this.uiGroupBox1.Controls.Add(this.PressingTimeMin); + this.uiGroupBox1.Controls.Add(this.label2); + this.uiGroupBox1.Controls.Add(this.PressMin); + this.uiGroupBox1.Controls.Add(this.PressingTimeMax); + this.uiGroupBox1.Controls.Add(this.label1); + this.uiGroupBox1.Controls.Add(this.label3); + this.uiGroupBox1.Controls.Add(this.PressMax); + this.uiGroupBox1.Controls.Add(this.SaveConfig); + this.uiGroupBox1.Controls.Add(this.label33); + this.uiGroupBox1.FillColor = System.Drawing.Color.LightBlue; + this.uiGroupBox1.Font = new System.Drawing.Font("宋体", 20F); + this.uiGroupBox1.Location = new System.Drawing.Point(15, 665); + this.uiGroupBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox1.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox1.Name = "uiGroupBox1"; + this.uiGroupBox1.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox1.Size = new System.Drawing.Size(1014, 33); + this.uiGroupBox1.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox1.TabIndex = 224; + this.uiGroupBox1.Text = "参数设置"; + this.uiGroupBox1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + this.uiGroupBox1.Visible = false; + // + // PressingTimeMin + // + this.PressingTimeMin.ButtonSymbol = 61761; + this.PressingTimeMin.Cursor = System.Windows.Forms.Cursors.IBeam; + this.PressingTimeMin.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.PressingTimeMin.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.PressingTimeMin.Location = new System.Drawing.Point(163, 125); + this.PressingTimeMin.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.PressingTimeMin.Maximum = 2147483647D; + this.PressingTimeMin.Minimum = -2147483648D; + this.PressingTimeMin.MinimumSize = new System.Drawing.Size(1, 16); + this.PressingTimeMin.Name = "PressingTimeMin"; + this.PressingTimeMin.Size = new System.Drawing.Size(118, 29); + this.PressingTimeMin.Style = Sunny.UI.UIStyle.Custom; + this.PressingTimeMin.TabIndex = 247; + this.PressingTimeMin.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("宋体", 15F); + this.label2.Location = new System.Drawing.Point(163, 100); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(129, 20); + this.label2.TabIndex = 246; + this.label2.Text = "压合时间下限"; + // + // PressMin + // + this.PressMin.ButtonSymbol = 61761; + this.PressMin.Cursor = System.Windows.Forms.Cursors.IBeam; + this.PressMin.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.PressMin.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.PressMin.Location = new System.Drawing.Point(11, 125); + this.PressMin.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.PressMin.Maximum = 2147483647D; + this.PressMin.Minimum = -2147483648D; + this.PressMin.MinimumSize = new System.Drawing.Size(1, 16); + this.PressMin.Name = "PressMin"; + this.PressMin.Size = new System.Drawing.Size(118, 29); + this.PressMin.Style = Sunny.UI.UIStyle.Custom; + this.PressMin.TabIndex = 243; + this.PressMin.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // PressingTimeMax + // + this.PressingTimeMax.ButtonSymbol = 61761; + this.PressingTimeMax.Cursor = System.Windows.Forms.Cursors.IBeam; + this.PressingTimeMax.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.PressingTimeMax.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.PressingTimeMax.Location = new System.Drawing.Point(163, 63); + this.PressingTimeMax.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.PressingTimeMax.Maximum = 2147483647D; + this.PressingTimeMax.Minimum = -2147483648D; + this.PressingTimeMax.MinimumSize = new System.Drawing.Size(1, 16); + this.PressingTimeMax.Name = "PressingTimeMax"; + this.PressingTimeMax.Size = new System.Drawing.Size(118, 29); + this.PressingTimeMax.Style = Sunny.UI.UIStyle.Custom; + this.PressingTimeMax.TabIndex = 245; + this.PressingTimeMax.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("宋体", 15F); + this.label1.Location = new System.Drawing.Point(11, 100); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(89, 20); + this.label1.TabIndex = 242; + this.label1.Text = "压力下限"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("宋体", 15F); + this.label3.Location = new System.Drawing.Point(163, 38); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(129, 20); + this.label3.TabIndex = 244; + this.label3.Text = "压合时间上限"; + // + // PressMax + // + this.PressMax.ButtonSymbol = 61761; + this.PressMax.Cursor = System.Windows.Forms.Cursors.IBeam; + this.PressMax.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.PressMax.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.PressMax.Location = new System.Drawing.Point(11, 63); + this.PressMax.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.PressMax.Maximum = 2147483647D; + this.PressMax.Minimum = -2147483648D; + this.PressMax.MinimumSize = new System.Drawing.Size(1, 16); + this.PressMax.Name = "PressMax"; + this.PressMax.Size = new System.Drawing.Size(118, 29); + this.PressMax.Style = Sunny.UI.UIStyle.Custom; + this.PressMax.TabIndex = 230; + this.PressMax.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // SaveConfig + // + this.SaveConfig.Cursor = System.Windows.Forms.Cursors.Hand; + this.SaveConfig.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.SaveConfig.Location = new System.Drawing.Point(329, 57); + this.SaveConfig.MinimumSize = new System.Drawing.Size(1, 1); + this.SaveConfig.Name = "SaveConfig"; + this.SaveConfig.Size = new System.Drawing.Size(149, 35); + this.SaveConfig.Style = Sunny.UI.UIStyle.Custom; + this.SaveConfig.Symbol = 61678; + this.SaveConfig.TabIndex = 241; + this.SaveConfig.Text = "保存设置"; + this.SaveConfig.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.SaveConfig.Click += new System.EventHandler(this.SaveConfig_Click); + // + // label33 + // + this.label33.AutoSize = true; + this.label33.Font = new System.Drawing.Font("宋体", 15F); + this.label33.Location = new System.Drawing.Point(11, 38); + this.label33.Name = "label33"; + this.label33.Size = new System.Drawing.Size(89, 20); + this.label33.TabIndex = 222; + this.label33.Text = "压力上限"; + // + // uiGroupBox13 + // + this.uiGroupBox13.Controls.Add(this.chk_ChkBee); + this.uiGroupBox13.Controls.Add(this.rbt_NpressureMode); + this.uiGroupBox13.Controls.Add(this.tb_ParaName); + this.uiGroupBox13.Controls.Add(this.cb_ParaNum); + this.uiGroupBox13.Controls.Add(this.rbt_PpressureMode); + this.uiGroupBox13.Controls.Add(this.cb_MachineNum); + this.uiGroupBox13.Controls.Add(this.bt_BtnKeep); + this.uiGroupBox13.Controls.Add(this.bt_BtnRead); + this.uiGroupBox13.Controls.Add(this.bt_BtnUpload); + this.uiGroupBox13.Controls.Add(this.uiGroupBox15); + this.uiGroupBox13.Controls.Add(this.uiGroupBox14); + this.uiGroupBox13.Controls.Add(this.label87); + this.uiGroupBox13.Controls.Add(this.label88); + this.uiGroupBox13.Controls.Add(this.label89); + this.uiGroupBox13.FillColor = System.Drawing.Color.LightBlue; + this.uiGroupBox13.Font = new System.Drawing.Font("宋体", 20F); + this.uiGroupBox13.Location = new System.Drawing.Point(4, 14); + this.uiGroupBox13.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox13.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox13.Name = "uiGroupBox13"; + this.uiGroupBox13.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox13.Size = new System.Drawing.Size(1014, 443); + this.uiGroupBox13.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox13.TabIndex = 0; + this.uiGroupBox13.Text = "仪器参数设置"; + this.uiGroupBox13.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // chk_ChkBee + // + this.chk_ChkBee.AutoSize = true; + this.chk_ChkBee.Font = new System.Drawing.Font("宋体", 18F); + this.chk_ChkBee.Location = new System.Drawing.Point(22, 371); + this.chk_ChkBee.Margin = new System.Windows.Forms.Padding(4); + this.chk_ChkBee.Name = "chk_ChkBee"; + this.chk_ChkBee.Size = new System.Drawing.Size(101, 28); + this.chk_ChkBee.TabIndex = 474; + this.chk_ChkBee.Text = "蜂鸣器"; + this.chk_ChkBee.UseVisualStyleBackColor = true; + this.chk_ChkBee.CheckedChanged += new System.EventHandler(this.chk_ChkBee_CheckedChanged); + // + // rbt_NpressureMode + // + this.rbt_NpressureMode.AutoSize = true; + this.rbt_NpressureMode.Font = new System.Drawing.Font("宋体", 16F); + this.rbt_NpressureMode.Location = new System.Drawing.Point(15, 311); + this.rbt_NpressureMode.Name = "rbt_NpressureMode"; + this.rbt_NpressureMode.Size = new System.Drawing.Size(116, 26); + this.rbt_NpressureMode.TabIndex = 250; + this.rbt_NpressureMode.TabStop = true; + this.rbt_NpressureMode.Text = "负压模式"; + this.rbt_NpressureMode.UseVisualStyleBackColor = true; + this.rbt_NpressureMode.Click += new System.EventHandler(this.rbt_PpressureModeOr_NpressureMode_Click); + // + // tb_ParaName + // + this.tb_ParaName.ButtonSymbol = 61761; + this.tb_ParaName.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_ParaName.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_ParaName.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_ParaName.Location = new System.Drawing.Point(11, 217); + this.tb_ParaName.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_ParaName.Maximum = 2147483647D; + this.tb_ParaName.Minimum = -2147483648D; + this.tb_ParaName.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_ParaName.Name = "tb_ParaName"; + this.tb_ParaName.Size = new System.Drawing.Size(118, 29); + this.tb_ParaName.Style = Sunny.UI.UIStyle.Custom; + this.tb_ParaName.TabIndex = 230; + this.tb_ParaName.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // cb_ParaNum + // + this.cb_ParaNum.DataSource = null; + this.cb_ParaNum.FillColor = System.Drawing.Color.White; + this.cb_ParaNum.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.cb_ParaNum.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cb_ParaNum.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10"}); + this.cb_ParaNum.Location = new System.Drawing.Point(11, 146); + this.cb_ParaNum.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.cb_ParaNum.MinimumSize = new System.Drawing.Size(63, 0); + this.cb_ParaNum.Name = "cb_ParaNum"; + this.cb_ParaNum.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2); + this.cb_ParaNum.Size = new System.Drawing.Size(118, 29); + this.cb_ParaNum.Style = Sunny.UI.UIStyle.Custom; + this.cb_ParaNum.TabIndex = 243; + this.cb_ParaNum.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + this.cb_ParaNum.SelectedIndexChanged += new System.EventHandler(this.ParaNum_SelectedIndexChanged); + // + // rbt_PpressureMode + // + this.rbt_PpressureMode.AutoSize = true; + this.rbt_PpressureMode.Font = new System.Drawing.Font("宋体", 16F); + this.rbt_PpressureMode.Location = new System.Drawing.Point(15, 267); + this.rbt_PpressureMode.Name = "rbt_PpressureMode"; + this.rbt_PpressureMode.Size = new System.Drawing.Size(116, 26); + this.rbt_PpressureMode.TabIndex = 249; + this.rbt_PpressureMode.TabStop = true; + this.rbt_PpressureMode.Text = "正压模式"; + this.rbt_PpressureMode.UseVisualStyleBackColor = true; + this.rbt_PpressureMode.Click += new System.EventHandler(this.rbt_PpressureModeOr_NpressureMode_Click); + // + // cb_MachineNum + // + this.cb_MachineNum.DataSource = null; + this.cb_MachineNum.FillColor = System.Drawing.Color.White; + this.cb_MachineNum.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.cb_MachineNum.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cb_MachineNum.Items.AddRange(new object[] { + "1", + "2", + "3", + "4"}); + this.cb_MachineNum.Location = new System.Drawing.Point(11, 79); + this.cb_MachineNum.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.cb_MachineNum.MinimumSize = new System.Drawing.Size(63, 0); + this.cb_MachineNum.Name = "cb_MachineNum"; + this.cb_MachineNum.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2); + this.cb_MachineNum.Size = new System.Drawing.Size(118, 29); + this.cb_MachineNum.Style = Sunny.UI.UIStyle.Custom; + this.cb_MachineNum.TabIndex = 242; + this.cb_MachineNum.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + this.cb_MachineNum.SelectedIndexChanged += new System.EventHandler(this.MachineNum_SelectedIndexChanged); + this.cb_MachineNum.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.MachineNum_KeyPress); + // + // bt_BtnKeep + // + this.bt_BtnKeep.Cursor = System.Windows.Forms.Cursors.Hand; + this.bt_BtnKeep.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_BtnKeep.Location = new System.Drawing.Point(787, 385); + this.bt_BtnKeep.MinimumSize = new System.Drawing.Size(1, 1); + this.bt_BtnKeep.Name = "bt_BtnKeep"; + this.bt_BtnKeep.Size = new System.Drawing.Size(149, 35); + this.bt_BtnKeep.Style = Sunny.UI.UIStyle.Custom; + this.bt_BtnKeep.Symbol = 61678; + this.bt_BtnKeep.TabIndex = 241; + this.bt_BtnKeep.Text = "保存参数"; + this.bt_BtnKeep.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_BtnKeep.Click += new System.EventHandler(this.BtnKeep_Click); + // + // bt_BtnRead + // + this.bt_BtnRead.Cursor = System.Windows.Forms.Cursors.Hand; + this.bt_BtnRead.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_BtnRead.Location = new System.Drawing.Point(366, 385); + this.bt_BtnRead.MinimumSize = new System.Drawing.Size(1, 1); + this.bt_BtnRead.Name = "bt_BtnRead"; + this.bt_BtnRead.Size = new System.Drawing.Size(149, 35); + this.bt_BtnRead.Style = Sunny.UI.UIStyle.Custom; + this.bt_BtnRead.Symbol = 61677; + this.bt_BtnRead.TabIndex = 240; + this.bt_BtnRead.Text = "读取参数"; + this.bt_BtnRead.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_BtnRead.Click += new System.EventHandler(this.BtnRead_Click); + // + // bt_BtnUpload + // + this.bt_BtnUpload.Cursor = System.Windows.Forms.Cursors.Hand; + this.bt_BtnUpload.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_BtnUpload.Location = new System.Drawing.Point(178, 385); + this.bt_BtnUpload.MinimumSize = new System.Drawing.Size(1, 1); + this.bt_BtnUpload.Name = "bt_BtnUpload"; + this.bt_BtnUpload.Size = new System.Drawing.Size(149, 35); + this.bt_BtnUpload.Style = Sunny.UI.UIStyle.Custom; + this.bt_BtnUpload.Symbol = 61480; + this.bt_BtnUpload.TabIndex = 239; + this.bt_BtnUpload.Text = "上传参数"; + this.bt_BtnUpload.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_BtnUpload.Click += new System.EventHandler(this.BtnUpload_Click); + // + // uiGroupBox15 + // + this.uiGroupBox15.Controls.Add(this.cb_LUnit); + this.uiGroupBox15.Controls.Add(this.rbt_OpeningMode); + this.uiGroupBox15.Controls.Add(this.cb_PUnit); + this.uiGroupBox15.Controls.Add(this.lb_LUnit2); + this.uiGroupBox15.Controls.Add(this.rbt_VolumeMode); + this.uiGroupBox15.Controls.Add(this.lb_LUnit1); + this.uiGroupBox15.Controls.Add(this.tb_Leaklowlimit); + this.uiGroupBox15.Controls.Add(this.label117); + this.uiGroupBox15.Controls.Add(this.tb_Leaktoplimit); + this.uiGroupBox15.Controls.Add(this.label116); + this.uiGroupBox15.Controls.Add(this.tb_BalanPreMin); + this.uiGroupBox15.Controls.Add(this.lb_PUnit2); + this.uiGroupBox15.Controls.Add(this.tb_BalanPreMax); + this.uiGroupBox15.Controls.Add(this.lb_PUnit1); + this.uiGroupBox15.Controls.Add(this.tb_FPlowlimit); + this.uiGroupBox15.Controls.Add(this.tb_FPtoplimit); + this.uiGroupBox15.Controls.Add(this.label106); + this.uiGroupBox15.Controls.Add(this.label107); + this.uiGroupBox15.Controls.Add(this.label108); + this.uiGroupBox15.Controls.Add(this.label109); + this.uiGroupBox15.Controls.Add(this.label110); + this.uiGroupBox15.Controls.Add(this.label111); + this.uiGroupBox15.Controls.Add(this.label112); + this.uiGroupBox15.Controls.Add(this.label113); + this.uiGroupBox15.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiGroupBox15.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox15.Location = new System.Drawing.Point(556, 57); + this.uiGroupBox15.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox15.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox15.Name = "uiGroupBox15"; + this.uiGroupBox15.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox15.Size = new System.Drawing.Size(429, 313); + this.uiGroupBox15.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox15.TabIndex = 237; + this.uiGroupBox15.Text = "压力参数"; + this.uiGroupBox15.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // cb_LUnit + // + this.cb_LUnit.DataSource = null; + this.cb_LUnit.FillColor = System.Drawing.Color.White; + this.cb_LUnit.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.cb_LUnit.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cb_LUnit.Items.AddRange(new object[] { + "Pa", + "KPa", + "mbar", + "atm", + "sccm", + "ccm3/s", + "Pa/s"}); + this.cb_LUnit.Location = new System.Drawing.Point(245, 228); + this.cb_LUnit.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.cb_LUnit.MinimumSize = new System.Drawing.Size(63, 0); + this.cb_LUnit.Name = "cb_LUnit"; + this.cb_LUnit.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2); + this.cb_LUnit.Size = new System.Drawing.Size(106, 29); + this.cb_LUnit.Style = Sunny.UI.UIStyle.Custom; + this.cb_LUnit.TabIndex = 226; + this.cb_LUnit.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + this.cb_LUnit.TextChanged += new System.EventHandler(this.LUnit_TextChanged); + // + // rbt_OpeningMode + // + this.rbt_OpeningMode.AutoSize = true; + this.rbt_OpeningMode.Location = new System.Drawing.Point(44, 276); + this.rbt_OpeningMode.Name = "rbt_OpeningMode"; + this.rbt_OpeningMode.Size = new System.Drawing.Size(89, 20); + this.rbt_OpeningMode.TabIndex = 250; + this.rbt_OpeningMode.TabStop = true; + this.rbt_OpeningMode.Text = "开口模式"; + this.rbt_OpeningMode.UseVisualStyleBackColor = true; + this.rbt_OpeningMode.Visible = false; + // + // cb_PUnit + // + this.cb_PUnit.DataSource = null; + this.cb_PUnit.FillColor = System.Drawing.Color.White; + this.cb_PUnit.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.cb_PUnit.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cb_PUnit.Items.AddRange(new object[] { + "Pa", + "KPa", + "MPa", + "bar", + "Psi", + "kg/cm^2", + "atm", + "mmHg"}); + this.cb_PUnit.Location = new System.Drawing.Point(245, 168); + this.cb_PUnit.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.cb_PUnit.MinimumSize = new System.Drawing.Size(63, 0); + this.cb_PUnit.Name = "cb_PUnit"; + this.cb_PUnit.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2); + this.cb_PUnit.Size = new System.Drawing.Size(106, 29); + this.cb_PUnit.Style = Sunny.UI.UIStyle.Custom; + this.cb_PUnit.TabIndex = 226; + this.cb_PUnit.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + this.cb_PUnit.TextChanged += new System.EventHandler(this.PUnit_TextChanged); + // + // lb_LUnit2 + // + this.lb_LUnit2.AutoSize = true; + this.lb_LUnit2.Location = new System.Drawing.Point(381, 120); + this.lb_LUnit2.Name = "lb_LUnit2"; + this.lb_LUnit2.Size = new System.Drawing.Size(39, 16); + this.lb_LUnit2.TabIndex = 241; + this.lb_LUnit2.Text = "单位"; + // + // rbt_VolumeMode + // + this.rbt_VolumeMode.AutoSize = true; + this.rbt_VolumeMode.Location = new System.Drawing.Point(151, 276); + this.rbt_VolumeMode.Name = "rbt_VolumeMode"; + this.rbt_VolumeMode.Size = new System.Drawing.Size(89, 20); + this.rbt_VolumeMode.TabIndex = 249; + this.rbt_VolumeMode.TabStop = true; + this.rbt_VolumeMode.Text = "容积模式"; + this.rbt_VolumeMode.UseVisualStyleBackColor = true; + this.rbt_VolumeMode.Visible = false; + // + // lb_LUnit1 + // + this.lb_LUnit1.AutoSize = true; + this.lb_LUnit1.Location = new System.Drawing.Point(381, 66); + this.lb_LUnit1.Name = "lb_LUnit1"; + this.lb_LUnit1.Size = new System.Drawing.Size(39, 16); + this.lb_LUnit1.TabIndex = 241; + this.lb_LUnit1.Text = "单位"; + // + // tb_Leaklowlimit + // + this.tb_Leaklowlimit.ButtonSymbol = 61761; + this.tb_Leaklowlimit.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_Leaklowlimit.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_Leaklowlimit.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_Leaklowlimit.Location = new System.Drawing.Point(245, 114); + this.tb_Leaklowlimit.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_Leaklowlimit.Maximum = 2147483647D; + this.tb_Leaklowlimit.Minimum = -2147483648D; + this.tb_Leaklowlimit.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_Leaklowlimit.Name = "tb_Leaklowlimit"; + this.tb_Leaklowlimit.Size = new System.Drawing.Size(135, 29); + this.tb_Leaklowlimit.Style = Sunny.UI.UIStyle.Custom; + this.tb_Leaklowlimit.TabIndex = 240; + this.tb_Leaklowlimit.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label117 + // + this.label117.AutoSize = true; + this.label117.Location = new System.Drawing.Point(173, 230); + this.label117.Name = "label117"; + this.label117.Size = new System.Drawing.Size(23, 16); + this.label117.TabIndex = 241; + this.label117.Text = "Pa"; + // + // tb_Leaktoplimit + // + this.tb_Leaktoplimit.ButtonSymbol = 61761; + this.tb_Leaktoplimit.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_Leaktoplimit.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_Leaktoplimit.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_Leaktoplimit.Location = new System.Drawing.Point(245, 60); + this.tb_Leaktoplimit.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_Leaktoplimit.Maximum = 2147483647D; + this.tb_Leaktoplimit.Minimum = -2147483648D; + this.tb_Leaktoplimit.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_Leaktoplimit.Name = "tb_Leaktoplimit"; + this.tb_Leaktoplimit.Size = new System.Drawing.Size(135, 29); + this.tb_Leaktoplimit.Style = Sunny.UI.UIStyle.Custom; + this.tb_Leaktoplimit.TabIndex = 240; + this.tb_Leaktoplimit.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label116 + // + this.label116.AutoSize = true; + this.label116.Location = new System.Drawing.Point(173, 172); + this.label116.Name = "label116"; + this.label116.Size = new System.Drawing.Size(23, 16); + this.label116.TabIndex = 241; + this.label116.Text = "Pa"; + // + // tb_BalanPreMin + // + this.tb_BalanPreMin.ButtonSymbol = 61761; + this.tb_BalanPreMin.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_BalanPreMin.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_BalanPreMin.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_BalanPreMin.Location = new System.Drawing.Point(39, 224); + this.tb_BalanPreMin.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_BalanPreMin.Maximum = 2147483647D; + this.tb_BalanPreMin.Minimum = -2147483648D; + this.tb_BalanPreMin.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_BalanPreMin.Name = "tb_BalanPreMin"; + this.tb_BalanPreMin.Size = new System.Drawing.Size(135, 29); + this.tb_BalanPreMin.Style = Sunny.UI.UIStyle.Custom; + this.tb_BalanPreMin.TabIndex = 240; + this.tb_BalanPreMin.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // lb_PUnit2 + // + this.lb_PUnit2.AutoSize = true; + this.lb_PUnit2.Location = new System.Drawing.Point(173, 120); + this.lb_PUnit2.Name = "lb_PUnit2"; + this.lb_PUnit2.Size = new System.Drawing.Size(39, 16); + this.lb_PUnit2.TabIndex = 241; + this.lb_PUnit2.Text = "单位"; + // + // tb_BalanPreMax + // + this.tb_BalanPreMax.ButtonSymbol = 61761; + this.tb_BalanPreMax.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_BalanPreMax.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_BalanPreMax.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_BalanPreMax.Location = new System.Drawing.Point(37, 166); + this.tb_BalanPreMax.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_BalanPreMax.Maximum = 2147483647D; + this.tb_BalanPreMax.Minimum = -2147483648D; + this.tb_BalanPreMax.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_BalanPreMax.Name = "tb_BalanPreMax"; + this.tb_BalanPreMax.Size = new System.Drawing.Size(135, 29); + this.tb_BalanPreMax.Style = Sunny.UI.UIStyle.Custom; + this.tb_BalanPreMax.TabIndex = 240; + this.tb_BalanPreMax.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // lb_PUnit1 + // + this.lb_PUnit1.AutoSize = true; + this.lb_PUnit1.Location = new System.Drawing.Point(173, 66); + this.lb_PUnit1.Name = "lb_PUnit1"; + this.lb_PUnit1.Size = new System.Drawing.Size(39, 16); + this.lb_PUnit1.TabIndex = 239; + this.lb_PUnit1.Text = "单位"; + // + // tb_FPlowlimit + // + this.tb_FPlowlimit.ButtonSymbol = 61761; + this.tb_FPlowlimit.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_FPlowlimit.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_FPlowlimit.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_FPlowlimit.Location = new System.Drawing.Point(38, 114); + this.tb_FPlowlimit.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_FPlowlimit.Maximum = 2147483647D; + this.tb_FPlowlimit.Minimum = -2147483648D; + this.tb_FPlowlimit.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_FPlowlimit.Name = "tb_FPlowlimit"; + this.tb_FPlowlimit.Size = new System.Drawing.Size(135, 29); + this.tb_FPlowlimit.Style = Sunny.UI.UIStyle.Custom; + this.tb_FPlowlimit.TabIndex = 240; + this.tb_FPlowlimit.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // tb_FPtoplimit + // + this.tb_FPtoplimit.ButtonSymbol = 61761; + this.tb_FPtoplimit.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_FPtoplimit.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_FPtoplimit.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_FPtoplimit.Location = new System.Drawing.Point(37, 60); + this.tb_FPtoplimit.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_FPtoplimit.Maximum = 2147483647D; + this.tb_FPtoplimit.Minimum = -2147483648D; + this.tb_FPtoplimit.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_FPtoplimit.Name = "tb_FPtoplimit"; + this.tb_FPtoplimit.Size = new System.Drawing.Size(135, 29); + this.tb_FPtoplimit.Style = Sunny.UI.UIStyle.Custom; + this.tb_FPtoplimit.TabIndex = 238; + this.tb_FPtoplimit.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label106 + // + this.label106.AutoSize = true; + this.label106.Font = new System.Drawing.Font("宋体", 11F); + this.label106.Location = new System.Drawing.Point(245, 148); + this.label106.Name = "label106"; + this.label106.Size = new System.Drawing.Size(67, 15); + this.label106.TabIndex = 195; + this.label106.Text = "压力单位"; + // + // label107 + // + this.label107.AutoSize = true; + this.label107.Font = new System.Drawing.Font("宋体", 11F); + this.label107.Location = new System.Drawing.Point(245, 208); + this.label107.Name = "label107"; + this.label107.Size = new System.Drawing.Size(82, 15); + this.label107.TabIndex = 194; + this.label107.Text = "泄漏量单位"; + // + // label108 + // + this.label108.AutoSize = true; + this.label108.Font = new System.Drawing.Font("宋体", 11F); + this.label108.Location = new System.Drawing.Point(34, 40); + this.label108.Name = "label108"; + this.label108.Size = new System.Drawing.Size(97, 15); + this.label108.TabIndex = 188; + this.label108.Text = "充气压力上限"; + // + // label109 + // + this.label109.AutoSize = true; + this.label109.Font = new System.Drawing.Font("宋体", 11F); + this.label109.Location = new System.Drawing.Point(35, 94); + this.label109.Name = "label109"; + this.label109.Size = new System.Drawing.Size(97, 15); + this.label109.TabIndex = 189; + this.label109.Text = "充气压力下限"; + // + // label110 + // + this.label110.AutoSize = true; + this.label110.Font = new System.Drawing.Font("宋体", 11F); + this.label110.Location = new System.Drawing.Point(245, 40); + this.label110.Name = "label110"; + this.label110.Size = new System.Drawing.Size(82, 15); + this.label110.TabIndex = 190; + this.label110.Text = "泄漏量上限"; + // + // label111 + // + this.label111.AutoSize = true; + this.label111.Font = new System.Drawing.Font("宋体", 11F); + this.label111.Location = new System.Drawing.Point(34, 149); + this.label111.Name = "label111"; + this.label111.Size = new System.Drawing.Size(97, 15); + this.label111.TabIndex = 192; + this.label111.Text = "平衡压力上限"; + // + // label112 + // + this.label112.AutoSize = true; + this.label112.Font = new System.Drawing.Font("宋体", 11F); + this.label112.Location = new System.Drawing.Point(36, 209); + this.label112.Name = "label112"; + this.label112.Size = new System.Drawing.Size(97, 15); + this.label112.TabIndex = 193; + this.label112.Text = "平衡压力下限"; + // + // label113 + // + this.label113.AutoSize = true; + this.label113.Font = new System.Drawing.Font("宋体", 11F); + this.label113.Location = new System.Drawing.Point(245, 94); + this.label113.Name = "label113"; + this.label113.Size = new System.Drawing.Size(82, 15); + this.label113.TabIndex = 191; + this.label113.Text = "泄漏量下限"; + // + // uiGroupBox14 + // + this.uiGroupBox14.Controls.Add(this.label105); + this.uiGroupBox14.Controls.Add(this.label104); + this.uiGroupBox14.Controls.Add(this.tb_Evolume); + this.uiGroupBox14.Controls.Add(this.label103); + this.uiGroupBox14.Controls.Add(this.tb_RelieveDelay); + this.uiGroupBox14.Controls.Add(this.label102); + this.uiGroupBox14.Controls.Add(this.tb_DelayTime2); + this.uiGroupBox14.Controls.Add(this.label101); + this.uiGroupBox14.Controls.Add(this.tb_DelayTime1); + this.uiGroupBox14.Controls.Add(this.label100); + this.uiGroupBox14.Controls.Add(this.label99); + this.uiGroupBox14.Controls.Add(this.label98); + this.uiGroupBox14.Controls.Add(this.tb_ExhaustTime); + this.uiGroupBox14.Controls.Add(this.tb_TestTime1); + this.uiGroupBox14.Controls.Add(this.tb_BalanTime); + this.uiGroupBox14.Controls.Add(this.tb_FullTime); + this.uiGroupBox14.Controls.Add(this.label90); + this.uiGroupBox14.Controls.Add(this.label97); + this.uiGroupBox14.Controls.Add(this.label91); + this.uiGroupBox14.Controls.Add(this.label96); + this.uiGroupBox14.Controls.Add(this.label92); + this.uiGroupBox14.Controls.Add(this.label95); + this.uiGroupBox14.Controls.Add(this.label93); + this.uiGroupBox14.Controls.Add(this.label94); + this.uiGroupBox14.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiGroupBox14.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox14.Location = new System.Drawing.Point(154, 57); + this.uiGroupBox14.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox14.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox14.Name = "uiGroupBox14"; + this.uiGroupBox14.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox14.Size = new System.Drawing.Size(394, 313); + this.uiGroupBox14.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox14.TabIndex = 236; + this.uiGroupBox14.Text = "时间参数"; + this.uiGroupBox14.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // label105 + // + this.label105.AutoSize = true; + this.label105.Font = new System.Drawing.Font("宋体", 11F); + this.label105.Location = new System.Drawing.Point(363, 247); + this.label105.Name = "label105"; + this.label105.Size = new System.Drawing.Size(23, 15); + this.label105.TabIndex = 238; + this.label105.Text = "ml"; + // + // label104 + // + this.label104.AutoSize = true; + this.label104.Font = new System.Drawing.Font("宋体", 11F); + this.label104.Location = new System.Drawing.Point(363, 187); + this.label104.Name = "label104"; + this.label104.Size = new System.Drawing.Size(15, 15); + this.label104.TabIndex = 238; + this.label104.Text = "S"; + this.label104.Visible = false; + // + // tb_Evolume + // + this.tb_Evolume.ButtonSymbol = 61761; + this.tb_Evolume.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_Evolume.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_Evolume.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_Evolume.Location = new System.Drawing.Point(226, 240); + this.tb_Evolume.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_Evolume.Maximum = 2147483647D; + this.tb_Evolume.Minimum = -2147483648D; + this.tb_Evolume.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_Evolume.Name = "tb_Evolume"; + this.tb_Evolume.Size = new System.Drawing.Size(135, 29); + this.tb_Evolume.Style = Sunny.UI.UIStyle.Custom; + this.tb_Evolume.TabIndex = 237; + this.tb_Evolume.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label103 + // + this.label103.AutoSize = true; + this.label103.Font = new System.Drawing.Font("宋体", 11F); + this.label103.Location = new System.Drawing.Point(363, 127); + this.label103.Name = "label103"; + this.label103.Size = new System.Drawing.Size(15, 15); + this.label103.TabIndex = 238; + this.label103.Text = "S"; + // + // tb_RelieveDelay + // + this.tb_RelieveDelay.ButtonSymbol = 61761; + this.tb_RelieveDelay.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_RelieveDelay.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_RelieveDelay.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_RelieveDelay.Location = new System.Drawing.Point(226, 180); + this.tb_RelieveDelay.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_RelieveDelay.Maximum = 2147483647D; + this.tb_RelieveDelay.Minimum = -2147483648D; + this.tb_RelieveDelay.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_RelieveDelay.Name = "tb_RelieveDelay"; + this.tb_RelieveDelay.Size = new System.Drawing.Size(135, 29); + this.tb_RelieveDelay.Style = Sunny.UI.UIStyle.Custom; + this.tb_RelieveDelay.TabIndex = 237; + this.tb_RelieveDelay.Text = "0"; + this.tb_RelieveDelay.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + this.tb_RelieveDelay.Visible = false; + // + // label102 + // + this.label102.AutoSize = true; + this.label102.Font = new System.Drawing.Font("宋体", 11F); + this.label102.Location = new System.Drawing.Point(363, 67); + this.label102.Name = "label102"; + this.label102.Size = new System.Drawing.Size(15, 15); + this.label102.TabIndex = 238; + this.label102.Text = "S"; + // + // tb_DelayTime2 + // + this.tb_DelayTime2.ButtonSymbol = 61761; + this.tb_DelayTime2.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_DelayTime2.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_DelayTime2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_DelayTime2.Location = new System.Drawing.Point(226, 120); + this.tb_DelayTime2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_DelayTime2.Maximum = 2147483647D; + this.tb_DelayTime2.Minimum = -2147483648D; + this.tb_DelayTime2.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_DelayTime2.Name = "tb_DelayTime2"; + this.tb_DelayTime2.Size = new System.Drawing.Size(135, 29); + this.tb_DelayTime2.Style = Sunny.UI.UIStyle.Custom; + this.tb_DelayTime2.TabIndex = 237; + this.tb_DelayTime2.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label101 + // + this.label101.AutoSize = true; + this.label101.Font = new System.Drawing.Font("宋体", 11F); + this.label101.Location = new System.Drawing.Point(172, 247); + this.label101.Name = "label101"; + this.label101.Size = new System.Drawing.Size(15, 15); + this.label101.TabIndex = 239; + this.label101.Text = "S"; + // + // tb_DelayTime1 + // + this.tb_DelayTime1.ButtonSymbol = 61761; + this.tb_DelayTime1.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_DelayTime1.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_DelayTime1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_DelayTime1.Location = new System.Drawing.Point(226, 60); + this.tb_DelayTime1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_DelayTime1.Maximum = 2147483647D; + this.tb_DelayTime1.Minimum = -2147483648D; + this.tb_DelayTime1.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_DelayTime1.Name = "tb_DelayTime1"; + this.tb_DelayTime1.Size = new System.Drawing.Size(135, 29); + this.tb_DelayTime1.Style = Sunny.UI.UIStyle.Custom; + this.tb_DelayTime1.TabIndex = 237; + this.tb_DelayTime1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label100 + // + this.label100.AutoSize = true; + this.label100.Font = new System.Drawing.Font("宋体", 11F); + this.label100.Location = new System.Drawing.Point(172, 187); + this.label100.Name = "label100"; + this.label100.Size = new System.Drawing.Size(15, 15); + this.label100.TabIndex = 238; + this.label100.Text = "S"; + // + // label99 + // + this.label99.AutoSize = true; + this.label99.Font = new System.Drawing.Font("宋体", 11F); + this.label99.Location = new System.Drawing.Point(172, 127); + this.label99.Name = "label99"; + this.label99.Size = new System.Drawing.Size(15, 15); + this.label99.TabIndex = 237; + this.label99.Text = "S"; + // + // label98 + // + this.label98.AutoSize = true; + this.label98.Font = new System.Drawing.Font("宋体", 11F); + this.label98.Location = new System.Drawing.Point(172, 67); + this.label98.Name = "label98"; + this.label98.Size = new System.Drawing.Size(15, 15); + this.label98.TabIndex = 236; + this.label98.Text = "S"; + // + // tb_ExhaustTime + // + this.tb_ExhaustTime.ButtonSymbol = 61761; + this.tb_ExhaustTime.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_ExhaustTime.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_ExhaustTime.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_ExhaustTime.Location = new System.Drawing.Point(35, 240); + this.tb_ExhaustTime.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_ExhaustTime.Maximum = 2147483647D; + this.tb_ExhaustTime.Minimum = -2147483648D; + this.tb_ExhaustTime.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_ExhaustTime.Name = "tb_ExhaustTime"; + this.tb_ExhaustTime.Size = new System.Drawing.Size(135, 29); + this.tb_ExhaustTime.Style = Sunny.UI.UIStyle.Custom; + this.tb_ExhaustTime.TabIndex = 229; + this.tb_ExhaustTime.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // tb_TestTime1 + // + this.tb_TestTime1.ButtonSymbol = 61761; + this.tb_TestTime1.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_TestTime1.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_TestTime1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_TestTime1.Location = new System.Drawing.Point(35, 180); + this.tb_TestTime1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_TestTime1.Maximum = 2147483647D; + this.tb_TestTime1.Minimum = -2147483648D; + this.tb_TestTime1.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_TestTime1.Name = "tb_TestTime1"; + this.tb_TestTime1.Size = new System.Drawing.Size(135, 29); + this.tb_TestTime1.Style = Sunny.UI.UIStyle.Custom; + this.tb_TestTime1.TabIndex = 229; + this.tb_TestTime1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // tb_BalanTime + // + this.tb_BalanTime.ButtonSymbol = 61761; + this.tb_BalanTime.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_BalanTime.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_BalanTime.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_BalanTime.Location = new System.Drawing.Point(35, 120); + this.tb_BalanTime.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_BalanTime.Maximum = 2147483647D; + this.tb_BalanTime.Minimum = -2147483648D; + this.tb_BalanTime.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_BalanTime.Name = "tb_BalanTime"; + this.tb_BalanTime.Size = new System.Drawing.Size(135, 29); + this.tb_BalanTime.Style = Sunny.UI.UIStyle.Custom; + this.tb_BalanTime.TabIndex = 229; + this.tb_BalanTime.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // tb_FullTime + // + this.tb_FullTime.ButtonSymbol = 61761; + this.tb_FullTime.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_FullTime.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_FullTime.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_FullTime.Location = new System.Drawing.Point(35, 60); + this.tb_FullTime.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_FullTime.Maximum = 2147483647D; + this.tb_FullTime.Minimum = -2147483648D; + this.tb_FullTime.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_FullTime.Name = "tb_FullTime"; + this.tb_FullTime.Size = new System.Drawing.Size(135, 29); + this.tb_FullTime.Style = Sunny.UI.UIStyle.Custom; + this.tb_FullTime.TabIndex = 228; + this.tb_FullTime.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label90 + // + this.label90.AutoSize = true; + this.label90.Font = new System.Drawing.Font("宋体", 11F); + this.label90.Location = new System.Drawing.Point(223, 160); + this.label90.Name = "label90"; + this.label90.Size = new System.Drawing.Size(75, 15); + this.label90.TabIndex = 235; + this.label90.Text = "解除2延时"; + this.label90.Visible = false; + // + // label97 + // + this.label97.AutoSize = true; + this.label97.Font = new System.Drawing.Font("宋体", 11F); + this.label97.Location = new System.Drawing.Point(223, 40); + this.label97.Name = "label97"; + this.label97.Size = new System.Drawing.Size(45, 15); + this.label97.TabIndex = 232; + this.label97.Text = "延时1"; + // + // label91 + // + this.label91.AutoSize = true; + this.label91.Font = new System.Drawing.Font("宋体", 11F); + this.label91.Location = new System.Drawing.Point(35, 100); + this.label91.Name = "label91"; + this.label91.Size = new System.Drawing.Size(67, 15); + this.label91.TabIndex = 229; + this.label91.Text = "平衡时间"; + // + // label96 + // + this.label96.AutoSize = true; + this.label96.Font = new System.Drawing.Font("宋体", 11F); + this.label96.Location = new System.Drawing.Point(223, 100); + this.label96.Name = "label96"; + this.label96.Size = new System.Drawing.Size(45, 15); + this.label96.TabIndex = 233; + this.label96.Text = "延时2"; + // + // label92 + // + this.label92.AutoSize = true; + this.label92.Font = new System.Drawing.Font("宋体", 11F); + this.label92.Location = new System.Drawing.Point(35, 40); + this.label92.Name = "label92"; + this.label92.Size = new System.Drawing.Size(67, 15); + this.label92.TabIndex = 228; + this.label92.Text = "充气时间"; + // + // label95 + // + this.label95.AutoSize = true; + this.label95.Font = new System.Drawing.Font("宋体", 11F); + this.label95.Location = new System.Drawing.Point(223, 220); + this.label95.Name = "label95"; + this.label95.Size = new System.Drawing.Size(67, 15); + this.label95.TabIndex = 234; + this.label95.Text = "等效容积"; + // + // label93 + // + this.label93.AutoSize = true; + this.label93.Font = new System.Drawing.Font("宋体", 11F); + this.label93.Location = new System.Drawing.Point(35, 160); + this.label93.Name = "label93"; + this.label93.Size = new System.Drawing.Size(75, 15); + this.label93.TabIndex = 230; + this.label93.Text = "检测时间1"; + // + // label94 + // + this.label94.AutoSize = true; + this.label94.Font = new System.Drawing.Font("宋体", 11F); + this.label94.Location = new System.Drawing.Point(35, 220); + this.label94.Name = "label94"; + this.label94.Size = new System.Drawing.Size(67, 15); + this.label94.TabIndex = 231; + this.label94.Text = "排气时间"; + // + // label87 + // + this.label87.AutoSize = true; + this.label87.Font = new System.Drawing.Font("宋体", 15F); + this.label87.Location = new System.Drawing.Point(11, 54); + this.label87.Name = "label87"; + this.label87.Size = new System.Drawing.Size(89, 20); + this.label87.TabIndex = 224; + this.label87.Text = "仪器编号"; + // + // label88 + // + this.label88.AutoSize = true; + this.label88.Font = new System.Drawing.Font("宋体", 15F); + this.label88.Location = new System.Drawing.Point(11, 121); + this.label88.Name = "label88"; + this.label88.Size = new System.Drawing.Size(89, 20); + this.label88.TabIndex = 223; + this.label88.Text = "参数编号"; + // + // label89 + // + this.label89.AutoSize = true; + this.label89.Font = new System.Drawing.Font("宋体", 15F); + this.label89.Location = new System.Drawing.Point(11, 192); + this.label89.Name = "label89"; + this.label89.Size = new System.Drawing.Size(89, 20); + this.label89.TabIndex = 222; + this.label89.Text = "参数名称"; + // + // SendText + // + this.SendText.BackColor = System.Drawing.Color.LightBlue; + this.SendText.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.SendText.Location = new System.Drawing.Point(119, 498); + this.SendText.Margin = new System.Windows.Forms.Padding(4); + this.SendText.Multiline = true; + this.SendText.Name = "SendText"; + this.SendText.Size = new System.Drawing.Size(245, 78); + this.SendText.TabIndex = 223; + this.SendText.Visible = false; + // + // uiTabControlMenu1 + // + this.uiTabControlMenu1.Alignment = System.Windows.Forms.TabAlignment.Left; + this.uiTabControlMenu1.Controls.Add(this.tabPage3); + this.uiTabControlMenu1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; + this.uiTabControlMenu1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiTabControlMenu1.ItemSize = new System.Drawing.Size(40, 145); + this.uiTabControlMenu1.Location = new System.Drawing.Point(0, 0); + this.uiTabControlMenu1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.uiTabControlMenu1.MenuStyle = Sunny.UI.UIMenuStyle.Custom; + this.uiTabControlMenu1.Multiline = true; + this.uiTabControlMenu1.Name = "uiTabControlMenu1"; + this.uiTabControlMenu1.SelectedIndex = 0; + this.uiTabControlMenu1.Size = new System.Drawing.Size(1564, 1131); + this.uiTabControlMenu1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.uiTabControlMenu1.Style = Sunny.UI.UIStyle.Custom; + this.uiTabControlMenu1.TabBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(115)))), ((int)(((byte)(144)))), ((int)(((byte)(153))))); + this.uiTabControlMenu1.TabIndex = 3; + this.uiTabControlMenu1.TabSelectedColor = System.Drawing.Color.LightBlue; + this.uiTabControlMenu1.TabSelectedForeColor = System.Drawing.Color.Black; + this.uiTabControlMenu1.TabUnSelectedForeColor = System.Drawing.Color.Black; + // + // Electricity + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1163, 693); + this.Controls.Add(this.uiTabControlMenu1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Electricity"; + this.Text = "参数设置"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Electricity_FormClosed); + this.Load += new System.EventHandler(this.Electricity_Load); + this.tabPage3.ResumeLayout(false); + this.tabPage3.PerformLayout(); + this.uiGroupBox2.ResumeLayout(false); + this.uiGroupBox2.PerformLayout(); + this.uiGroupBox1.ResumeLayout(false); + this.uiGroupBox1.PerformLayout(); + this.uiGroupBox13.ResumeLayout(false); + this.uiGroupBox13.PerformLayout(); + this.uiGroupBox15.ResumeLayout(false); + this.uiGroupBox15.PerformLayout(); + this.uiGroupBox14.ResumeLayout(false); + this.uiGroupBox14.PerformLayout(); + this.uiTabControlMenu1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.TabPage tabPage3; + private Sunny.UI.UIGroupBox uiGroupBox13; + private System.Windows.Forms.CheckBox chk_ChkBee; + private Sunny.UI.UITextBox tb_ParaName; + private Sunny.UI.UIComboBox cb_ParaNum; + private Sunny.UI.UIComboBox cb_MachineNum; + private Sunny.UI.UISymbolButton bt_BtnKeep; + private Sunny.UI.UISymbolButton bt_BtnRead; + private Sunny.UI.UISymbolButton bt_BtnUpload; + private Sunny.UI.UIGroupBox uiGroupBox15; + private Sunny.UI.UIComboBox cb_LUnit; + private Sunny.UI.UIComboBox cb_PUnit; + private System.Windows.Forms.Label lb_LUnit2; + private System.Windows.Forms.Label lb_LUnit1; + private Sunny.UI.UITextBox tb_Leaklowlimit; + private System.Windows.Forms.Label label117; + private Sunny.UI.UITextBox tb_Leaktoplimit; + private System.Windows.Forms.Label label116; + private Sunny.UI.UITextBox tb_BalanPreMin; + private System.Windows.Forms.Label lb_PUnit2; + private Sunny.UI.UITextBox tb_BalanPreMax; + private System.Windows.Forms.Label lb_PUnit1; + private Sunny.UI.UITextBox tb_FPlowlimit; + private Sunny.UI.UITextBox tb_FPtoplimit; + private System.Windows.Forms.Label label106; + private System.Windows.Forms.Label label107; + private System.Windows.Forms.Label label108; + private System.Windows.Forms.Label label109; + private System.Windows.Forms.Label label110; + private System.Windows.Forms.Label label111; + private System.Windows.Forms.Label label112; + private System.Windows.Forms.Label label113; + private Sunny.UI.UIGroupBox uiGroupBox14; + private System.Windows.Forms.Label label105; + private System.Windows.Forms.Label label104; + private Sunny.UI.UITextBox tb_Evolume; + private System.Windows.Forms.Label label103; + private Sunny.UI.UITextBox tb_RelieveDelay; + private System.Windows.Forms.Label label102; + private Sunny.UI.UITextBox tb_DelayTime2; + private System.Windows.Forms.Label label101; + private Sunny.UI.UITextBox tb_DelayTime1; + private System.Windows.Forms.Label label100; + private System.Windows.Forms.Label label99; + private System.Windows.Forms.Label label98; + private Sunny.UI.UITextBox tb_ExhaustTime; + private Sunny.UI.UITextBox tb_TestTime1; + private Sunny.UI.UITextBox tb_BalanTime; + private Sunny.UI.UITextBox tb_FullTime; + private System.Windows.Forms.Label label90; + private System.Windows.Forms.Label label97; + private System.Windows.Forms.Label label91; + private System.Windows.Forms.Label label96; + private System.Windows.Forms.Label label92; + private System.Windows.Forms.Label label95; + private System.Windows.Forms.Label label93; + private System.Windows.Forms.Label label94; + private System.Windows.Forms.Label label87; + private System.Windows.Forms.Label label88; + private System.Windows.Forms.Label label89; + public System.Windows.Forms.TextBox SendText; + private Sunny.UI.UITabControlMenu uiTabControlMenu1; + private Sunny.UI.UIGroupBox uiGroupBox1; + private Sunny.UI.UITextBox PressingTimeMin; + private System.Windows.Forms.Label label2; + private Sunny.UI.UITextBox PressMin; + private Sunny.UI.UITextBox PressingTimeMax; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label3; + private Sunny.UI.UITextBox PressMax; + private Sunny.UI.UISymbolButton SaveConfig; + private System.Windows.Forms.Label label33; + private Sunny.UI.UIGroupBox uiGroupBox2; + private Sunny.UI.UITextBox uiTextBox1; + private System.Windows.Forms.Label label4; + private Sunny.UI.UITextBox uiTextBox2; + private Sunny.UI.UITextBox uiTextBox3; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private Sunny.UI.UITextBox tb_code1len; + private Sunny.UI.UISymbolButton bt_savelen; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.RadioButton rbt_OpeningMode; + private System.Windows.Forms.RadioButton rbt_VolumeMode; + private System.Windows.Forms.CheckBox chk_ch1saoma; + private System.Windows.Forms.CheckBox chk_ch2saoma; + private Sunny.UI.UITextBox tb_code2len; + private System.Windows.Forms.Label label8; + private Sunny.UI.UITextBox tb_code4len; + private System.Windows.Forms.Label label9; + private Sunny.UI.UITextBox tb_code3len; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.CheckBox chk_ch4saoma; + private System.Windows.Forms.CheckBox chk_ch3saoma; + private System.Windows.Forms.RadioButton rbt_NpressureMode; + private System.Windows.Forms.RadioButton rbt_PpressureMode; + private System.Windows.Forms.CheckBox chk_ContinueTest; + private System.Windows.Forms.Label label17; + private Sunny.UI.UITextBox tb_ContinueTestCount; + private System.Windows.Forms.Label lb_PLCsaomamsg; + } +} \ No newline at end of file diff --git a/SLC1-N/Electricity.cs b/SLC1-N/Electricity.cs new file mode 100644 index 0000000..5251f2c --- /dev/null +++ b/SLC1-N/Electricity.cs @@ -0,0 +1,716 @@ +using EasyModbus; +using Sunny.UI; +using System; +using System.Drawing; +using System.Linq; +using System.Web.Services.Description; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class Electricity : Form + { + public Electricity() + { + InitializeComponent(); + } + + public delegate void MySignalHandler(int msg, bool mode); // 声明信号 + public event MySignalHandler Signal_PLC_WriteCoil; + + private void Electricity_Load(object sender, EventArgs e) + { + label90.Visible = false; + tb_RelieveDelay.Visible = false; + label104.Visible = false; + + // 读取一次本地参数 + cb_MachineNum.SelectedIndex = 0; + cb_ParaNum.SelectedIndex = 0; + + + if (Form1.f1.User == "操作员") + { + chk_ChkBee.Enabled = false; + + bt_BtnKeep.Enabled = false; + tb_FullTime.Enabled = false; + tb_BalanTime.Enabled = false; + tb_TestTime1.Enabled = false; + tb_ExhaustTime.Enabled = false; + tb_DelayTime1.Enabled = false; + tb_DelayTime2.Enabled = false; + tb_RelieveDelay.Enabled = false; + tb_Evolume.Enabled = false; + tb_FPtoplimit.Enabled = false; + tb_FPlowlimit.Enabled = false; + tb_BalanPreMax.Enabled = false; + tb_BalanPreMin.Enabled = false; + tb_Leaktoplimit.Enabled = false; + tb_Leaklowlimit.Enabled = false; + cb_PUnit.Enabled = false; + cb_LUnit.Enabled = false; + } + if (Form1.f1.User == "工程师") + { + cb_PUnit.Enabled = false; + cb_LUnit.Enabled = false; + tb_FullTime.Enabled = false; + tb_BalanTime.Enabled=false; + tb_TestTime1.Enabled = false; + tb_ExhaustTime.Enabled=false; + tb_FPlowlimit.Enabled=false; + tb_FPtoplimit.Enabled=false; + tb_Leaktoplimit.Enabled=false; + tb_Leaklowlimit.Enabled=false; + } + + if (Form1.f1.User != "厂商") + { + //消失 + label111.Visible = false; + label112.Visible = false; + + label117.Visible = false; + tb_BalanPreMax.Visible = false; + tb_BalanPreMin.Visible = false; + label116.Visible = false; + } + + //PressMax.Text = Form1.f1.PressMax.ToString(); + //PressMin.Text = Form1.f1.PressMin.ToString(); + //PressingTimeMax.Text = Form1.f1.PressingTimeMax.ToString(); + //PressingTimeMin.Text = Form1.f1.PressingTimeMin.ToString(); + //ReadParameters(MachineNum.SelectedIndex + 1, ParaNum.SelectedIndex + 1); + + // Json记录读取 + var config = new JsonConfig("config.json"); + + // 条码长度 + tb_code1len.Text = config.GetValue("CodeLength1", "9"); + tb_code2len.Text = config.GetValue("CodeLength2", "9"); + tb_code3len.Text = config.GetValue("CodeLength3", "9"); + tb_code4len.Text = config.GetValue("CodeLength4", "9"); + + // 是否扫码 + if (Form1.f1.HCPLC_client?.Connected == true) + { + chk_ch1saoma.Checked = Form1.f1.coilSaoma[0]; + chk_ch2saoma.Checked = Form1.f1.coilSaoma[1]; + chk_ch3saoma.Checked = Form1.f1.coilSaoma[2]; + chk_ch4saoma.Checked = Form1.f1.coilSaoma[3]; + } + else + { + lb_PLCsaomamsg.Text = "PLC未连接"; + lb_PLCsaomamsg.ForeColor = Color.Red; + } + //chk_ch1saoma.Checked = config.GetValue("chk_ch1saoma", true); + //chk_ch2saoma.Checked = config.GetValue("chk_ch2saoma", true); + //chk_ch3saoma.Checked = config.GetValue("chk_ch3saoma", true); + //chk_ch4saoma.Checked = config.GetValue("chk_ch4saoma", true); + + + // 正负压 + rbt_PpressureMode.Checked = config.GetValue("rbt_PpressureMode", true); + rbt_NpressureMode.Checked = config.GetValue("rbt_NpressureMode", true); + + string PorN = "P"; + if (rbt_PpressureMode.Checked) + PorN = "P"; + else if (rbt_NpressureMode.Checked) + PorN = "N"; + ReadParametersJson("1", "1", PorN); + + // 连续测试/次数 + chk_ContinueTest.Checked = config.GetValue("chk_ContinueTest", true); + tb_ContinueTestCount.Enabled = chk_ContinueTest.Checked; + tb_ContinueTestCount.Text = config.GetValue("tb_ContinueTestCount", 1).ToString(); + } + + //上传参数 + private void BtnUpload_Click(object sender, EventArgs e) + { + try + { + bt_BtnUpload.Enabled = false; + tb_RelieveDelay.Text = "0"; + if (tb_FullTime.Text == "" || tb_BalanTime.Text == "" || tb_TestTime1.Text == "" || tb_ExhaustTime.Text == "" || + tb_DelayTime1.Text == "" || tb_DelayTime2.Text == "" || tb_RelieveDelay.Text == "" || tb_Evolume.Text == "" || + cb_LUnit.Text == "" || cb_PUnit.Text == "" || tb_FPtoplimit.Text == "" || tb_FPlowlimit.Text == "" || + tb_BalanPreMax.Text == "" || tb_BalanPreMin.Text == "" || tb_Leaktoplimit.Text == "" || tb_Leaklowlimit.Text == "") + { + MessageBox.Show("输入参数格式不对"); + } + else + { + // 拆分 float + int[] FPtoplimit = Fun_SplitBytes(float.Parse(tb_FPtoplimit.Text)); // [low, high] + int[] FPlowlimit = Fun_SplitBytes(float.Parse(tb_FPlowlimit.Text)); + int[] BalanPreMax = Fun_SplitBytes(float.Parse(tb_BalanPreMax.Text)); + int[] BalanPreMin = Fun_SplitBytes(float.Parse(tb_BalanPreMin.Text)); + int[] Leaktoplimit = Fun_SplitBytes(float.Parse(tb_Leaktoplimit.Text)); + int[] Leaklowlimit = Fun_SplitBytes(float.Parse(tb_Leaklowlimit.Text)); + + int[] Evolume = Fun_SplitBytes(float.Parse(tb_Evolume.Text)); + + // 合并数据(float + int) + int[] values = new int[] + { + Convert.ToInt32(tb_FullTime.Text) * 10, // 充气时间 + Convert.ToInt32(tb_BalanTime.Text) * 10, // 平衡时间 + Convert.ToInt32(tb_TestTime1.Text) * 10, // 检测时间 + Convert.ToInt32(tb_ExhaustTime.Text) * 10, // 排气时间 + + Convert.ToInt32(tb_RelieveDelay.Text),// 解除2延时 + Convert.ToInt32(tb_DelayTime1.Text), // 延时1 + Convert.ToInt32(tb_DelayTime2.Text), // 延时2 + + FPtoplimit[0], FPtoplimit[1], // 充气上限 + FPlowlimit[0], FPlowlimit[1], // 充气下限 + BalanPreMax[0], BalanPreMax[1], // 平衡上限 + BalanPreMin[0], BalanPreMin[1], // 平衡下限 + Leaktoplimit[0], Leaktoplimit[1],// 泄漏量上限 + Leaklowlimit[0], Leaklowlimit[1],// 泄漏量下限 + + Evolume[0], Evolume[1], // 等效容积 + cb_PUnit.SelectedIndex, // 压力单位 + cb_LUnit.SelectedIndex, // 泄漏量单位 + }; // [low, high, 1] + + switch (cb_MachineNum.SelectedIndex) + { + case 0: + Form1.f1.LL28CH1client.writeRegisters(1006, values); // 通道1 从1006 开始写入 + Signal_PLC_WriteCoil?.Invoke(1008, rbt_NpressureMode.Checked); + break; + case 1: + Form1.f1.LL28CH2client.writeRegisters(1006, values); // 通道2 从1006 开始写入 + Signal_PLC_WriteCoil?.Invoke(1009, rbt_NpressureMode.Checked); + break; + case 2: + Form1.f1.LL28CH3client.writeRegisters(1006, values); // 通道3 从1006 开始写入 + Signal_PLC_WriteCoil?.Invoke(1010, rbt_NpressureMode.Checked); + break; + case 3: + Form1.f1.LL28CH4client.writeRegisters(1006, values); // 通道4 从1006 开始写入 + Signal_PLC_WriteCoil?.Invoke(1011, rbt_NpressureMode.Checked); + break; + } + } + + bt_BtnUpload.Enabled = true; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + mxlLog.Instance.Error($"参数界面上传异常,行号{ex.StackTrace} ", ex); + } + } + + // 将 float 拆分为两个(低字在前,高字在后) + public int[] Fun_SplitBytes(float value) + { + byte[] bytes = BitConverter.GetBytes(value); + ushort lowWord = BitConverter.ToUInt16(bytes, 0); // 低位(地址1015) + ushort highWord = BitConverter.ToUInt16(bytes, 2); // 高位(地址1016) + return new int[] { lowWord, highWord }; // 返回 [low, high] + } + + //修改蜂鸣器设定,写入0是打开蜂鸣器,写入1是关闭蜂鸣器 + + // 读取参数 按钮 + private void BtnRead_Click(object sender, EventArgs e) + { + try + { + // 通道1 + if(cb_MachineNum.Text == "1") + { + tb_FullTime.Text = (Form1.f1.LL28CH1client.ArrRegister[6] / 10.0).ToString(); + tb_BalanTime.Text = (Form1.f1.LL28CH1client.ArrRegister[7] / 10.0).ToString(); + tb_TestTime1.Text = (Form1.f1.LL28CH1client.ArrRegister[8] / 10.0).ToString(); + tb_ExhaustTime.Text = (Form1.f1.LL28CH1client.ArrRegister[9] / 10.0).ToString(); + + tb_DelayTime1.Text = Form1.f1.LL28CH1client.ArrRegister[11].ToString(); + tb_DelayTime2.Text = Form1.f1.LL28CH1client.ArrRegister[12].ToString(); + tb_Evolume.Text = Form1.f1.LL28CH1client.readFloat(25); + + tb_FPtoplimit.Text = Form1.f1.LL28CH1client.readFloat(13); + tb_FPlowlimit.Text = Form1.f1.LL28CH1client.readFloat(15); + cb_PUnit.SelectedIndex = Convert.ToInt32(Form1.f1.LL28CH1client.ArrRegister[27]); + cb_LUnit.SelectedIndex = Convert.ToInt32(Form1.f1.LL28CH1client.ArrRegister[28]); + + tb_BalanPreMax.Text = Form1.f1.LL28CH1client.readFloat(17); + tb_BalanPreMin.Text = Form1.f1.LL28CH1client.readFloat(19); + tb_Leaktoplimit.Text = Form1.f1.LL28CH1client.readFloat(21); + tb_Leaklowlimit.Text = Form1.f1.LL28CH1client.readFloat(23); + + chk_ChkBee.Checked = Form1.f1.LL28CH1client.ArrCoil[4]; + } + + // 通道2 + if (cb_MachineNum.Text == "2") + { + tb_FullTime.Text = (Form1.f1.LL28CH2client.ArrRegister[6] / 10.0).ToString(); + tb_BalanTime.Text = (Form1.f1.LL28CH2client.ArrRegister[7] / 10.0).ToString(); + tb_TestTime1.Text = (Form1.f1.LL28CH2client.ArrRegister[8] / 10.0).ToString(); + tb_ExhaustTime.Text = (Form1.f1.LL28CH2client.ArrRegister[9] / 10.0).ToString(); + + tb_DelayTime1.Text = Form1.f1.LL28CH2client.ArrRegister[11].ToString(); + tb_DelayTime2.Text = Form1.f1.LL28CH2client.ArrRegister[12].ToString(); + tb_Evolume.Text = Form1.f1.LL28CH2client.readFloat(25); + + tb_FPtoplimit.Text = Form1.f1.LL28CH2client.readFloat(13); + tb_FPlowlimit.Text = Form1.f1.LL28CH2client.readFloat(15); + cb_PUnit.SelectedIndex = Convert.ToInt32(Form1.f1.LL28CH2client.ArrRegister[27]); + cb_LUnit.SelectedIndex = Convert.ToInt32(Form1.f1.LL28CH2client.ArrRegister[28]); + + tb_BalanPreMax.Text = Form1.f1.LL28CH2client.readFloat(17); + tb_BalanPreMin.Text = Form1.f1.LL28CH2client.readFloat(19); + tb_Leaktoplimit.Text = Form1.f1.LL28CH2client.readFloat(21); + tb_Leaklowlimit.Text = Form1.f1.LL28CH2client.readFloat(23); + + chk_ChkBee.Checked = Form1.f1.LL28CH2client.ArrCoil[4]; + } + + // 通道3 + if (cb_MachineNum.Text == "3") + { + tb_FullTime.Text = (Form1.f1.LL28CH3client.ArrRegister[6] / 10.0).ToString(); + tb_BalanTime.Text = (Form1.f1.LL28CH3client.ArrRegister[7] / 10.0).ToString(); + tb_TestTime1.Text = (Form1.f1.LL28CH3client.ArrRegister[8] / 10.0).ToString(); + tb_ExhaustTime.Text = (Form1.f1.LL28CH3client.ArrRegister[9] / 10.0).ToString(); + + tb_DelayTime1.Text = Form1.f1.LL28CH3client.ArrRegister[11].ToString(); + tb_DelayTime2.Text = Form1.f1.LL28CH3client.ArrRegister[12].ToString(); + tb_Evolume.Text = Form1.f1.LL28CH3client.readFloat(25); + + tb_FPtoplimit.Text = Form1.f1.LL28CH3client.readFloat(13); + tb_FPlowlimit.Text = Form1.f1.LL28CH3client.readFloat(15); + cb_PUnit.SelectedIndex = Convert.ToInt32(Form1.f1.LL28CH3client.ArrRegister[27]); + cb_LUnit.SelectedIndex = Convert.ToInt32(Form1.f1.LL28CH3client.ArrRegister[28]); + + tb_BalanPreMax.Text = Form1.f1.LL28CH3client.readFloat(17); + tb_BalanPreMin.Text = Form1.f1.LL28CH3client.readFloat(19); + tb_Leaktoplimit.Text = Form1.f1.LL28CH3client.readFloat(21); + tb_Leaklowlimit.Text = Form1.f1.LL28CH3client.readFloat(23); + + chk_ChkBee.Checked = Form1.f1.LL28CH3client.ArrCoil[4]; + } + + // 通道4 + if (cb_MachineNum.Text == "4") + { + tb_FullTime.Text = (Form1.f1.LL28CH4client.ArrRegister[6] / 10.0).ToString(); + tb_BalanTime.Text = (Form1.f1.LL28CH4client.ArrRegister[7] / 10.0).ToString(); + tb_TestTime1.Text = (Form1.f1.LL28CH4client.ArrRegister[8] / 10.0).ToString(); + tb_ExhaustTime.Text = (Form1.f1.LL28CH4client.ArrRegister[9] / 10.0).ToString(); + + tb_DelayTime1.Text = Form1.f1.LL28CH4client.ArrRegister[11].ToString(); + tb_DelayTime2.Text = Form1.f1.LL28CH4client.ArrRegister[12].ToString(); + tb_Evolume.Text = Form1.f1.LL28CH4client.readFloat(25); + + tb_FPtoplimit.Text = Form1.f1.LL28CH4client.readFloat(13); + tb_FPlowlimit.Text = Form1.f1.LL28CH4client.readFloat(15); + cb_PUnit.SelectedIndex = Convert.ToInt32(Form1.f1.LL28CH4client.ArrRegister[27]); + cb_LUnit.SelectedIndex = Convert.ToInt32(Form1.f1.LL28CH4client.ArrRegister[28]); + + tb_BalanPreMax.Text = Form1.f1.LL28CH4client.readFloat(17); + tb_BalanPreMin.Text = Form1.f1.LL28CH4client.readFloat(19); + tb_Leaktoplimit.Text = Form1.f1.LL28CH4client.readFloat(21); + tb_Leaklowlimit.Text = Form1.f1.LL28CH4client.readFloat(23); + + chk_ChkBee.Checked = Form1.f1.LL28CH4client.ArrCoil[4]; + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + mxlLog.Instance.Error($"参数界面读取异常,行号{ex.StackTrace} ", ex); + } + } + + // 保存参数 按钮 + private void BtnKeep_Click(object sender, EventArgs e) + { + string PorN = "P"; + if(rbt_PpressureMode.Checked) + PorN = "P"; + else if (rbt_NpressureMode.Checked) + PorN = "N"; + + SetParametersJson(Convert.ToInt32(cb_MachineNum.Text), cb_ParaNum.Text, PorN); // 通道-编号 + } + + // 写入参数 通道-编号 + private void SetParametersJson(int CH, string i, string PorN) + { + // 保存到本地文件 + var config = new JsonConfig("config.json"); + config.SetValue($"{CH}" + PorN + "params_number" + i, cb_ParaNum.Text); + config.SetValue($"{CH}" + PorN + "paraname" + i, tb_ParaName.Text); + + config.SetValue($"{CH}" + PorN + "fulltime" + i, tb_FullTime.Text); + config.SetValue($"{CH}" + PorN + "balantime" + i, tb_BalanTime.Text); + config.SetValue($"{CH}" + PorN + "testtime1" + i, tb_TestTime1.Text); + config.SetValue($"{CH}" + PorN + "exhausttime" + i, tb_ExhaustTime.Text); + + config.SetValue($"{CH}" + PorN + "delaytime1" + i, tb_DelayTime1.Text); + config.SetValue($"{CH}" + PorN + "delaytime2" + i, tb_DelayTime2.Text); + config.SetValue($"{CH}" + PorN + "relievedelay" + i, tb_RelieveDelay.Text); + config.SetValue($"{CH}" + PorN + "evolume" + i, tb_Evolume.Text); + + config.SetValue($"{CH}" + PorN + "fptoplimit" + i, tb_FPtoplimit.Text); + config.SetValue($"{CH}" + PorN + "fplowlimit" + i, tb_FPlowlimit.Text); + config.SetValue($"{CH}" + PorN + "balanpremax" + i, tb_BalanPreMax.Text); + config.SetValue($"{CH}" + PorN + "balanpremin" + i, tb_BalanPreMin.Text); + + config.SetValue($"{CH}" + PorN + "leaktoplimit" + i, tb_Leaktoplimit.Text); + config.SetValue($"{CH}" + PorN + "leaklowlimit" + i, tb_Leaklowlimit.Text); + config.SetValue($"{CH}" + PorN + "punit" + i, cb_PUnit.SelectedIndex); + config.SetValue($"{CH}" + PorN + "lunit" + i, cb_LUnit.SelectedIndex); + + config.SetValue($"{CH}" + PorN + "bee" + i, chk_ChkBee.Checked); + + // 保存开口、容积 + if(rbt_OpeningMode.Checked) + { + config.SetValue($"{CH}" + PorN + "opmode" + i, false); + } + else if (rbt_VolumeMode.Checked) + { + config.SetValue($"{CH}" + PorN + "opmode" + i, true); + } + + // 保存到主界面变量 + Form1.f1.GetYiqiParam(CH, PorN).fulltime = Convert.ToInt32(tb_FullTime.Text); + Form1.f1.GetYiqiParam(CH, PorN).balantime = Convert.ToInt32(tb_BalanTime.Text); + Form1.f1.GetYiqiParam(CH, PorN).testtime1 = Convert.ToInt32(tb_TestTime1.Text); + Form1.f1.GetYiqiParam(CH, PorN).exhausttime = Convert.ToInt32(tb_ExhaustTime.Text); + + Form1.f1.GetYiqiParam(CH, PorN).delaytime1 = Convert.ToInt32(tb_DelayTime1.Text); + Form1.f1.GetYiqiParam(CH, PorN).delaytime2 = Convert.ToInt32(tb_DelayTime2.Text); + Form1.f1.GetYiqiParam(CH, PorN).relievedelay = Convert.ToInt32(tb_RelieveDelay.Text); + Form1.f1.GetYiqiParam(CH, PorN).evolume = Convert.ToInt32(tb_Evolume.Text); + + Form1.f1.GetYiqiParam(CH, PorN).fptoplimit = Convert.ToInt32(tb_FPtoplimit.Text); + Form1.f1.GetYiqiParam(CH, PorN).fplowlimit = Convert.ToInt32(tb_FPlowlimit.Text); + Form1.f1.GetYiqiParam(CH, PorN).balanpremax = Convert.ToInt32(tb_BalanPreMax.Text); + Form1.f1.GetYiqiParam(CH, PorN).balanpremin = Convert.ToInt32(tb_BalanPreMin.Text); + + Form1.f1.GetYiqiParam(CH, PorN).leaktoplimit = Convert.ToInt32(tb_Leaktoplimit.Text); + Form1.f1.GetYiqiParam(CH, PorN).leaklowlimit = Convert.ToInt32(tb_Leaklowlimit.Text); + Form1.f1.GetYiqiParam(CH, PorN).punit = cb_PUnit.SelectedIndex; + Form1.f1.GetYiqiParam(CH, PorN).lunit = cb_LUnit.SelectedIndex; + + Form1.f1.GetYiqiParam(CH, PorN).opmode = rbt_VolumeMode.Checked; + + //mesconfig.IniWriteValue("Parameters", CH + "unit", CHKUnit.Checked.ToString()); + //mesconfig.IniWriteValue("Parameters", CH + "presscompensation", PressCompensation.Text); + //MessageBox.Show("仪器编号:" + CH + "保存" + i + "组参数成功!"); + } + + // 读取本地参数记录 + private void ReadParametersJson(string CH, string i, string PorN) + { + var config = new JsonConfig("config.json"); + //ParaNum.Text = config.GetValue($"{CH}" + "params_number" + i, ""); + tb_ParaName.Text = config.GetValue($"{CH}" + PorN + "paraname" + i, "0"); + + tb_FullTime.Text = config.GetValue($"{CH}" + PorN + "fulltime" + i, "0"); + tb_BalanTime.Text = config.GetValue($"{CH}" + PorN + "balantime" + i, "0"); + tb_TestTime1.Text = config.GetValue($"{CH}" + PorN + "testtime1" + i, "0"); + tb_ExhaustTime.Text = config.GetValue($"{CH}" + PorN + "exhausttime" + i, "0"); + + tb_DelayTime1.Text = config.GetValue($"{CH}" + PorN + "delaytime1" + i, "0"); + tb_DelayTime2.Text = config.GetValue($"{CH}" + PorN + "delaytime2" + i, "0"); + tb_RelieveDelay.Text = config.GetValue($"{CH}" + PorN + "relievedelay" + i, "0"); + tb_Evolume.Text = config.GetValue($"{CH}" + PorN + "evolume" + i, "0"); + + tb_FPtoplimit.Text = config.GetValue($"{CH}" + PorN + "fptoplimit" + i, "0"); + tb_FPlowlimit.Text = config.GetValue($"{CH}" + PorN + "fplowlimit" + i, "0"); + tb_BalanPreMax.Text = config.GetValue($"{CH}" + PorN + "balanpremax" + i, "0"); + tb_BalanPreMin.Text = config.GetValue($"{CH}" + PorN + "balanpremin" + i, "0"); + + tb_Leaktoplimit.Text = config.GetValue($"{CH}" + PorN + "leaktoplimit" + i, "0"); + tb_Leaklowlimit.Text = config.GetValue($"{CH}" + PorN + "leaklowlimit" + i, "0"); + cb_PUnit.SelectedIndex = config.GetValue($"{CH}" + PorN + "punit" + i, 1); + cb_LUnit.SelectedIndex = config.GetValue($"{CH}" + PorN + "lunit" + i, 1); + + chk_ChkBee.Checked = config.GetValue($"{CH}" + PorN + "bee" + i, false); + + // 容积/开口 + bool kk = config.GetValue($"{CH}" + PorN + "opmode" + i, false); + if (kk == false) + { + rbt_OpeningMode.Checked = true; + } + else if (kk == true) + { + rbt_VolumeMode.Checked = true; + } + } + + private void MachineNum_KeyPress(object sender, KeyPressEventArgs e) + { + e.Handled = true; // 通道下拉框禁止所有输入 + } + + // 通道下拉框变化 + private void MachineNum_SelectedIndexChanged(object sender, EventArgs e) + { + string PorN = "P"; + if (rbt_PpressureMode.Checked) + PorN = "P"; + else if (rbt_NpressureMode.Checked) + PorN = "N"; + + ReadParametersJson(cb_MachineNum.Text, cb_ParaNum.Text, PorN); + } + + // 编号下拉框变化 + private void ParaNum_SelectedIndexChanged(object sender, EventArgs e) + { + string PorN = "P"; + if (rbt_PpressureMode.Checked) + PorN = "P"; + else if (rbt_NpressureMode.Checked) + PorN = "N"; + + ReadParametersJson(cb_MachineNum.Text, cb_ParaNum.Text, PorN); + } + + // 不知道干嘛的,隐藏在下面 + private void SaveConfig_Click(object sender, EventArgs e) + { + try + { + //Form1.f1.PressMax = Convert.ToDouble(PressMax.Text); + //Form1.f1.PressMin = Convert.ToDouble(PressMin.Text); + //Form1.f1.PressingTimeMax = Convert.ToDouble(PressingTimeMax.Text); + //Form1.f1.PressingTimeMin = Convert.ToDouble(PressingTimeMin.Text); + //string dialog = Form1.f1.machine; + //ConfigINI mesconfig = new ConfigINI("Model", dialog); + //mesconfig.IniWriteValue("Press", "PressMax", PressMax.Text); + //mesconfig.IniWriteValue("Press", "PressMin", PressMin.Text); + //mesconfig.IniWriteValue("Press", "PressingTimeMax", PressingTimeMax.Text); + //mesconfig.IniWriteValue("Press", "PressingTimeMin", PressingTimeMin.Text); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + + private void Electricity_FormClosed(object sender, FormClosedEventArgs e) + { + Signal_PLC_WriteCoil = null; + } + + // 条码长度保存按钮 + private void uiSymbolButton1_Click(object sender, EventArgs e) + { + Form1.f1.tb_CH1codeLeng.Text = tb_code1len.Text; + Form1.f1.tb_CH2codeLeng.Text = tb_code2len.Text; + Form1.f1.tb_CH3codeLeng.Text = tb_code3len.Text; + Form1.f1.tb_CH4codeLeng.Text = tb_code4len.Text; + + if (Form1.f1.saomaClient1 != null) + Form1.f1.saomaClient1.codeLength = Convert.ToInt32(tb_code1len.Text); + if (Form1.f1.saomaClient2 != null) + Form1.f1.saomaClient2.codeLength = Convert.ToInt32(tb_code2len.Text); + //if (Form1.f1.saomaClient3 != null) + // Form1.f1.saomaClient3.codeLength = Convert.ToInt32(tb_code1len.Text); + //if (Form1.f1.saomaClient4 != null) + // Form1.f1.saomaClient5.codeLength = Convert.ToInt32(tb_code2len.Text); + + // Json记录 + var config = new JsonConfig("config.json"); + config.SetValue("CodeLength1", tb_code1len.Text); + config.SetValue("CodeLength2", tb_code2len.Text); + config.SetValue("CodeLength3", tb_code3len.Text); + config.SetValue("CodeLength4", tb_code4len.Text); + + //MessageBox.Show("设置成功"); + } + + // 通道1扫码 + private void checkBox1_CheckedChanged(object sender, EventArgs e) + { + if (chk_ch1saoma.Checked) + { + Signal_PLC_WriteCoil?.Invoke(1012, true); + } + else + { + Signal_PLC_WriteCoil?.Invoke(1012, false); + } + var config = new JsonConfig("config.json"); + config.SetValue("chk_ch1saoma", chk_ch1saoma.Checked); + } + + // 通道2扫码 + private void checkBox2_CheckedChanged(object sender, EventArgs e) + { + if (chk_ch2saoma.Checked) + { + Signal_PLC_WriteCoil?.Invoke(1013, true); + } + else + { + Signal_PLC_WriteCoil?.Invoke(1013, false); + } + var config = new JsonConfig("config.json"); + config.SetValue("chk_ch2saoma", chk_ch2saoma.Checked); + } + + // 通道3扫码 + private void chk_ch3saoma_CheckedChanged(object sender, EventArgs e) + { + if (chk_ch3saoma.Checked) + { + Signal_PLC_WriteCoil?.Invoke(1014, true); + } + else + { + Signal_PLC_WriteCoil?.Invoke(1014, false); + } + var config = new JsonConfig("config.json"); + config.SetValue("chk_ch3saoma", chk_ch3saoma.Checked); + } + + // 通道4扫码 + private void chk_ch4saoma_CheckedChanged(object sender, EventArgs e) + { + if (chk_ch4saoma.Checked) + { + Signal_PLC_WriteCoil?.Invoke(1015, true); + } + else + { + Signal_PLC_WriteCoil?.Invoke(1015, false); + } + var config = new JsonConfig("config.json"); + config.SetValue("chk_ch4saoma", chk_ch4saoma.Checked); + } + + // 单位下拉框 + private void PUnit_TextChanged(object sender, EventArgs e) + { + lb_PUnit1.Text = cb_PUnit.Text; + lb_PUnit2.Text = cb_PUnit.Text; + } + private void LUnit_TextChanged(object sender, EventArgs e) + { + lb_LUnit1.Text = cb_LUnit.Text; + lb_LUnit2.Text = cb_LUnit.Text; + } + + // 蜂鸣器 + private void chk_ChkBee_CheckedChanged(object sender, EventArgs e) + { + switch (cb_MachineNum.SelectedIndex) + { + case 0: + Form1.f1.LL28CH1client.writeCoil("4", chk_ChkBee.Checked); + break; + case 1: + Form1.f1.LL28CH2client.writeCoil("4", chk_ChkBee.Checked); + break; + case 2: + Form1.f1.LL28CH3client.writeCoil("4", chk_ChkBee.Checked); + break; + case 3: + Form1.f1.LL28CH4client.writeCoil("4", chk_ChkBee.Checked); + break; + } + } + + //// 容积模式/开口模式 + //private void rbt_VolumeModeOrOpeningMode_Click(object sender, EventArgs e) + //{ + // if(rbt_VolumeMode.Checked) + // { + // Signal_PLC_WriteCoil?.Invoke(1000, true); + // Signal_PLC_WriteCoil?.Invoke(1001, true); + // Signal_PLC_WriteCoil?.Invoke(1002, true); + // Signal_PLC_WriteCoil?.Invoke(1003, true); + // } + // else if(rbt_OpeningMode.Checked) + // { + // Signal_PLC_WriteCoil?.Invoke(1000, false); + // Signal_PLC_WriteCoil?.Invoke(1001, false); + // Signal_PLC_WriteCoil?.Invoke(1002, false); + // Signal_PLC_WriteCoil?.Invoke(1003, false); + // } + + // var config = new JsonConfig("config.json"); + // config.SetValue("rbt_VolumeMode", rbt_VolumeMode.Checked); + // config.SetValue("rbt_OpeningMode", rbt_OpeningMode.Checked); + //} + + // 正负压 + private void rbt_PpressureModeOr_NpressureMode_Click(object sender, EventArgs e) + { + if (rbt_PpressureMode.Checked) + { + string PorN = "P"; + if (rbt_PpressureMode.Checked) + PorN = "P"; + else if (rbt_NpressureMode.Checked) + PorN = "N"; + + ReadParametersJson(cb_MachineNum.Text, cb_ParaNum.Text, PorN); + + //Signal_PLC_WriteCoil?.Invoke(1008, false); + //Signal_PLC_WriteCoil?.Invoke(1009, false); + //Signal_PLC_WriteCoil?.Invoke(1010, false); + //Signal_PLC_WriteCoil?.Invoke(1011, false); + } + else if (rbt_NpressureMode.Checked) + { + string PorN = "P"; + if (rbt_PpressureMode.Checked) + PorN = "P"; + else if (rbt_NpressureMode.Checked) + PorN = "N"; + + ReadParametersJson(cb_MachineNum.Text, cb_ParaNum.Text, PorN); + + //Signal_PLC_WriteCoil?.Invoke(1008, true); + //Signal_PLC_WriteCoil?.Invoke(1009, true); + //Signal_PLC_WriteCoil?.Invoke(1010, true); + //Signal_PLC_WriteCoil?.Invoke(1011, true); + } + + var config = new JsonConfig("config.json"); + config.SetValue("rbt_PpressureMode", rbt_PpressureMode.Checked); + config.SetValue("rbt_NpressureMode", rbt_NpressureMode.Checked); + } + + // 是否连续测试 + private void chk_ContinueTest_CheckedChanged(object sender, EventArgs e) + { + Form1.f1.m_ContinueTest = chk_ContinueTest.Checked; + + tb_ContinueTestCount.Enabled = chk_ContinueTest.Checked; + + var config = new JsonConfig("config.json"); + config.SetValue("chk_ContinueTest", chk_ContinueTest.Checked); + } + + // 连续次数 + private void tb_ContinueTestCount_TextChanged(object sender, EventArgs e) + { + if(string.IsNullOrEmpty(tb_ContinueTestCount.Text)) + return; + + Form1.f1.m_ContinueTestCount = Convert.ToInt32(tb_ContinueTestCount.Text); + + var config = new JsonConfig("config.json"); + config.SetValue("tb_ContinueTestCount", Convert.ToInt32(tb_ContinueTestCount.Text)); + } + + } +} diff --git a/SLC1-N/Electricity.resx b/SLC1-N/Electricity.resx new file mode 100644 index 0000000..46d1fa7 --- /dev/null +++ b/SLC1-N/Electricity.resx @@ -0,0 +1,549 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 138 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAACq + qnqHeoqqgAAAAAAAAAAAAAAAAAAACqiAAAAAAAAAeqgAAAAAAAAAAAAAAAAKqAAAAAAAAAAAAAqoAAAA + AAAAAAAAAAegAAAAAAAAAAAAAAAIoAAAAAAAAAAAAKcAAAAAAAAAAAAAAAAACqAAAAAAAAAACgAIenqq + qqqqqqqqqqAAAIoAAAAAAAAAoAAAAKqqqqqqqqqqqqgAAAigAAAAAAAKAAAAiqqqqqqqqqqqqqoAAACK + AAAAAAB3AAAAeHiqqqqqqqqqqqoAAAAKAAAAAACgAAAAAAqqqqqqqqqqqqoAAAAAoAAAAAqAAAAAAKqq + qqqqoAAAAAAAAAAAgAAAAAoAAAAAAAAIqqqqpwAAAAAAAAAACgAAAAoAAAAAAAAKqqqqqgAAAAAAAAAA + CgAAAAgAAAAAAAiqqqqqqqAAAAAAAAAABwAAAAoAAAAAAAAACKqqqqAAAAAAAAAACgAAAAgAAAAAAAAA + qqqqqqgAAAAAAAAACgAAAAoAAAAAAAAKqqqqqqoAAAAAAAAACgAAAAoAAAAAAAAAAAqqqqpwAAAAAAAA + CgAAAAoAAAAAAAAAAKqqqqqgAAAAAAAAiAAAAACAAAAAAAAAB6iqqqqoAAAAAAAAoAAAAACgAAAAAAAA + AACKqqqqAAAAAAAIoAAAAAAKAAAAAAAAAAqqqqqqgAAAAAAKAAAAAAAAoAAAAAAAAIqKiqqqoAAAAACg + AAAAAAAAigAAAAAAAAAAqqqqqAAAAAoAAAAAAAAACKAAAAAAAAAKqqqqqgAAAKAAAAAAAAAAAAqAAAAA + AAAAAAAAAAAAqgAAAAAAAAAAAACqgAAAAAAAAAAAAAB6gAAAAAAAAAAAAAAAeqAAAAAAAAAAAKqAAAAA + AAAAAAAAAAAAAAenoAAAAAB6qAAAAAAAAAAAAAAAAAAAAAAAinqqqqhwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////P///AAD//8AAf/8AAP/+H/8P/wAA//j//+P/ + AAD/5///+f8AAP/P///+fwAA/7gAAB8/AAD/fwAAD58AAP78AAAPzwAA/PwAAA/vAAD9/4AAD/cAAPn/ + AB//9wAA+//gD//7AAD7/+AP//sAAPv/gAf/+wAA+//4B//7AAD7//AD//sAAPv/4AP/+wAA+//+Af/7 + AAD7//wB//MAAP3/+AD/9wAA/f//AP/nAAD+//4Af+8AAP9//AB/3wAA/z//wD+/AAD/n/+AP38AAP/n + ///8/wAA//H///H/AAD//H//x/8AAP//h/w//wAA///wAf//AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAACKqAAAenAAAAAAAAAAAACoAAAAAAAAegAAAAAAAAB3AAAAAAAAAACKAAAAAA + AKAAqqqqqqqqoAAIAAAAAAoAAIqqqqqqqqoAAKAAAACAAAinqqqqqqqqAAAIAAAAoAAACqqqqqeqigAA + CgAACAAAAAiKqqoAAAAAAAAAAAoAAAAAqqqqoAAAAAAAgAAKAAAAAACqqqAAAAAAAKAACAAAAAAIqqqq + AAAAAABwAAoAAAAAAAqqqgAAAAAAcAAAAAAAAACqqqqgAAAAAAAAAHAAAAAAAKqqoAAAAAoAAAAIAAAA + AAqqqqgAAACAAAAACgAAAAAACKqqAAAIAAAAAACHAAAAAKqqqqAAoAAAAAAAAKAAAAAAAAAACAAAAAAA + AAAAdwAAAAAAigAAAAAAAAAAAAAHqKeooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////+Hj//+f/n/+f/+f/cAB7/vAAPf3gAD79+AA++/g + P//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/Ad//f/+//8/8///4B/////////////// + //////////////////8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqoAAAAAAKqoAAAAAAAAiqoA + AAAAAAAKqgAAAAAAAAiqgAAAAAAAAHqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAP//AAD//wAA//8AAP//AAD4DwAA/D8AAPw/AAD+PwAA/h8AAP8fAAD//wAA//8AAP// + AAD//wAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAAP4AAAX+ + BQAJ/wkADf4NABH/EQAW/hYAGf8ZAB3+HQAh/iEAJv4mACr+KgAt/i0AMf4xADX+NQA5/jkAPf49AEH+ + QQBF/kUAS/9LAE3+TQBR/lEAVf5VAFn+WQBe/14AYf5hAGX+ZQBp/mkAbv9uAHD/cAB1/nUAef55AH7+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFggIDhMXFxsXFxIOBgobAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFgwSIAAAAAAAAAAAAAAAAAAdEQwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMHQAA + AAAAAAAAAAAAAAAAAAAAAAAbDBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAbCAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAB0IAAAAAAAAAAAAAAAAAAAAAAAAAAwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREA + AAAAAAAAAAAAAAAAAAAACgAAACAbFgwBAQEBAQEBAQEBAQEBAQEBAQEAAAAAABsOAAAAAAAAAAAAAAAA + AAAKAAAAAAAAAAwBAQEBAQEBAQEBAQEBAQEBAQEbAAAAAAAgDgAAAAAAAAAAAAAAAA4AAAAAAAAdBAEB + AQEBAQEBAQEBAQEBAQEBAQEOAAAAAAAAGxIAAAAAAAAAAAAAGxYAAAAAAAAgICAgCgEBAQEBAQEBAQEB + AQEBAQEBAAAAAAAAAA4AAAAAAAAAAAAADAAAAAAAAAAAAAAWAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAA + AAAKAAAAAAAAAAAWHQAAAAAAAAAAAAwBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAK + AAAAAAAAAAAAAAAAACAGAQEBAQEBFgAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAOAAAAAAAAAAAAAAAA + AAgBAQEBAQEBBAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAATAAAAAAAAAAAAAAAXAQEBAQEBAQEBARYA + AAAAAAAAAAAAAAAAAAAADAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAFwEBAQEBAQYAAAAAAAAAAAAAAAAA + AAAADAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAWAQEBAQEBAQEXAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAS + AAAAAAAAAAAAAAAAAAoBBAQBAQEBAQEEAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAA + AAAAAAAOAQEBAQEBGwAAAAAAAAAAAAAAAAAAEQAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAYBAQEBAQEB + BAAAAAAAAAAAAAAAAAAbFwAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAEQwODAQBAQEBAR0AAAAAAAAAAAAA + AAAKAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAIAQBAQEBAQgAAAAAAAAAAAAAAB0WAAAAAAAAAAAA + AAoAAAAAAAAAAAAAAAAAAAARAQEBAQEBAQEdAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAMAAAAAAAAAAAA + AAAAABsbFxsRAQEBAQEKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAbEQAAAAAAAAAAAAAAAAAAAAAMAQEB + AQEBIAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAGw4AAAAAAAAAAAAAAAAAAAYBAQEBAQEBCAAAAAAAAAoA + AAAAAAAAAAAAAAAAAAAAAAAIGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCgAAAAAAAAAAAAAAAAAA + AAAAAAAAFwgdAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXDBMA + AAAAAAAAAAAAAAAAAAAAABIMGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODhIXAAAAAAAAAAAA + FxEMEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEw4IBAQECA4WIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///z///wAA///AAH//AAD//h//D/8AAP/4///j/wAA/+f///n/ + AAD/z////n8AAP+4AAAfPwAA/38AAA+fAAD+/AAAD88AAPz8AAAP7wAA/f+AAA/3AAD5/wAf//cAAPv/ + 4A//+wAA+//gD//7AAD7/4AH//sAAPv/+Af/+wAA+//wA//7AAD7/+AD//sAAPv//gH/+wAA+//8Af/z + AAD9//gA//cAAP3//wD/5wAA/v/+AH/vAAD/f/wAf98AAP8//8A/vwAA/5//gD9/AAD/5////P8AAP/x + ///x/wAA//x//8f/AAD//4f8P/8AAP//8AH//wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA/gAABf4FAAn+CQAP/g8AHv4eACv+KwAs/ywAM/8zADT/ + NAA+/j4AQv5CAEX+RQBJ/kkATP5MAFD+UABV/lUAWf9ZAF7+XgBh/mEAZf5lAGj+aABt/m0Acv5yAHX+ + dQB5/nkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkODhcAAAAAFg4O + AAAAAAAAAAAAAAAAAAAAAAAAAA8WAAAAAAAAAAAAAAAAExEAAAAAAAAAAAAAAAAAABMWAAAAAAAAAAAA + AAAAAAAAABEXAAAAAAAAAAAAAAANAAAADQQEAgQCBAIEAgQCBAAAAAAPAAAAAAAAAAAADQAAAAARAgIC + AgICAgICAgICCgAAAAAPAAAAAAAAABMAAAAAGREPBAICAgICAgICAgICAAAAAAAZAAAAAAAAFgAAAAAA + ABECAgICAgIGBwgICAgAAAAAAA8AAAAAABMAAAAAAAAAFxYFAgICAgAAAAAAAAAAAAAAAAAAAAAADgAA + AAAAAAAADwICAgICBwAAAAAAAAAAAAAADwAAAAANAAAAAAAAAAAAAAcCAgICAAAAAAAAAAAAAAANAAAA + AA0AAAAAAAAAAAAOAgICAgIHAAAAAAAAAAAAAA0AAAAADgAAAAAAAAAAAAAACgICAgIAAAAAAAAAAAAA + EwAAAAAAAAAAAAAAAAAAAA0CAgICAggAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAgICAgAAAAAA + AAAADQAAAAAAAAAXAAAAAAAAAAAADQICAgICCgAAAAAAABEAAAAAAAAAABcAAAAAAAAAAAAAABMCAgIC + AAAAAAAXAAAAAAAAAAAAABkTAAAAAAAAAAAOBAICAgQOAAAADwAAAAAAAAAAAAAAAAAOAAAAAAAAAAAA + AAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAADhMAAAAAAAAAAAAAEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAT + Dg0KCg0OEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////+Hj//+f + /n/+f/+f/cAB7/vAAPf3gAD79+AA++/gP//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/ + Ad//f/+//8/8///4B/////////////////////////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAB + AAAAAAAAAAAAAAABAAAAAQAAAAAAAAD+AAAE/wQAC/4LAAz/DAAR/hEAFf8VACP/IwA6/zoAQ/5DAFL/ + UgBb/1sAb/5vAHb+dgB5/3kAfv9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgICAgIFAAAAAAAA + AAAAAAcCAg4AAAAAAAAAAAAAAAALAwIMAAAAAAAAAAAAAAAAAAgCAwAAAAAAAAAAAAAAAAANBQIOAAAA + AAAAAAAAAAAAAAoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAPgP + AAD8PwAA/D8AAP4/AAD+HwAA/x8AAP//AAD//wAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/AEUA/wBjAP8AdgD+AIMA/wCGAP8AfAD/AHIA/wBeAP8AQAD+ + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/AAIA/wAnAP4AZgD/AKkA/wDiAP8A5QD/AMkA/wC0AP8ApQD+AJ4A/wCZAP8AnwD/ + AKgA/wC4AP8AzAD+AOkA/wDaAP8AmwD/AFwA/wAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAQAP8ATgD/AKwA/wDRAP4AuwD/AIAA/wBCAP8AIgD/ABUA/wAMAP8ABQD+ + AAIAAAAAAP8AAwD/AAYA/wANAP8AFwD+ACQA/wBMAP8AjQD/AMAA/wDTAP8AnAD+AD8A/wAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ACAD+AEQA/gC5AP4A0QD+AIcA/gA3AP4ACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABEA/gA+AP4AmwD+ + ANQA/gCmAP4AOAD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAZAP4AlgD/AOcA/wB2AP8AGQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+ACcA/wCQAP8A5gD/AH4A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD8A/wDTAP4AqwD/ACEA/wAGAP8AMAD/ + AF8A/wByAP4AcgD/AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+ + AHIA/wByAP8AcgD/AHIA/wByAP8ACwAAAAAAAAAAAP8AMQD/AMYA/wDBAP8AKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wACAP8ATAD/ANsA/wB3AP4AHwD/ + AEsA/wCHAP8AnAD/AKoA/wDSAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8ATAAAAAAAAAAAAAAAAAD/ABMA/wCYAP8AywD+ + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wA/AP8A3AD/ + AGMA/wAGAAAAAAAAAAAAAAAAAP8ACAD/AFQA/wDVAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AlAD+AAMAAAAAAAAAAAAA + AAAA/wAMAP8AhgD+AMwA/wAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ACIA/wDKAP8AfAD/AAIAAAAAAAAAAAAAAAAA/wARAP8AjgD/APIA/wD/AP4A/gD/AP8A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AzgD+ + ABQAAAAAAAAAAAAAAAAAAAAAAP8ADAD+AJkA/wC8AP8ACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD+AJ8A/gCpAP4AAwAAAAAAAAAAAAAAAAAAAAAA/gBPAP4AgAD+AIAA/gCAAP4AhAD+ + AN0A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4A+wD+ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABAA/gDJAP4AdQD+AAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ASAD/ANEA/wAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAiAP4AqwD/APkA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBCAP8A3AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AqAD/AI4A/wACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABgD/AFAA/wDRAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AHQA/wAyAP8AMgD+ADIA/wAyAP8AMgD/ADIA/wAyAP8AMgD+AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP8AuAD/AHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAWAP4A3wD/ADsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AEQA/wBTAP4AUwD/AFYA/wCDAP8A7gD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AK0A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AYAD/AL4A/wANAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBIAP4AxwD/ + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAQD/AGIA/wDkAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/APIA/wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ALwD/AMwA/wAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wBoAP4AsAD/AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAcAP4ApgD/ + APoA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wCuAP8ABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADgD/ANAA/wBDAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wB1AP4AqAD/AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAKAP4AJQD/ACYA/wAmAP8ANwD/AKEA/wD9AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wDsAP8AQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAgD/ + ANIA/wBMAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBvAP4AqwD+AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAEA/gAtAP4ArgD+APoA/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4ApQD+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABwD+ANEA/gBIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBYAP4AuwD/ABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AFMA/wDXAP8A+QD/APkA/wD5AP8A/QD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A8QD+AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AHgD/AM0A/wA4AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wApAP4A2AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wA8AP8AzQD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/gD+AJ0A/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ARwD/AMYA/wAaAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP4AzAD/AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ADQD/AHMA/wDuAP8A/gD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+APMA/wAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AkAD/AKAA/wACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AbwD/AL8A/wASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAMAP8AdgD/AMUA/wDLAP8AywD+ANIA/wD3AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wCPAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAbAP8A3wD/ + AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AGwD/AMgA/wBrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AIQA/wDxAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wDkAP8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAUA/wCOAP8ArgD/AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AFEA/gDeAP4AMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAzAP4AwwD+ + AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4AigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+AE4A/gDoAP4AKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AAYA/wB9AP8A1AD/ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ABsA/wCPAP8AngD+AJ4A/wCfAP8AvgD/APsA/wD/AP8A/wD+AP4A/wD/AP8A3wD/ACkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AQgD+ANgA/wBdAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAOAP8AmAD/AMMA/wAyAP4AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAUA/wBHAP8A1QD/AP0A/wD/AP8A/wD+AP4A/wD/AP8A/QD/ + AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wBMAP8AzgD+AHwA/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADQD/AJYA/wDNAP4AUgD/AAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AH4A/wDtAP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AN8A/wAcAAAAAAAAAAAAAAAAAP8ACwD/AGoA/wDYAP8AdQD+AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAQA/wBqAP4A4QD/ + AJwA/wAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ANQD+AHAA/wBxAP8AcQD/ + AHEA/wBxAP8AcQD+AHEA/wBxAP8AcQD/AG4A/wAmAAAAAAAAAAAA/wAqAP8ArAD/AN0A/wBMAP8AAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4AJAD/AKEA/wDnAP8AhwD/AC0A/wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wABAP8APQD+AJ4A/wDjAP8AkgD/ + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAgA/gBCAP4AqQD+ANMA/gCzAP4AXQD+AC0A/gANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gASAP4ANAD+AGsA/gC+AP4A0QD+ + AJcA/gA0AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/ADUA/wB7AP4AyAD/ + AMwA/wC/AP8AoAD/AHQA/wBVAP8APgD+ADMA/wArAP8ANAD/AEEA/wBaAP8AegD+AKcA/wDCAP8AzwD/ + AL4A/wBwAP8AKQD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD/AC8A/wBbAP8AhwD/AK8A/wDPAP8A5AD+APEA/wD1AP8A8AD/AOAA/wDJAP8AqgD+ + AIAA/wBTAP8AJQD/AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//+AB//8AAP/+AAAf/wAA//gAQAP/AAD/4D//gP8AAP/B///wfwAA/4AAAAw/AAD+AAAADh8AAPwc + AAAHDwAA/DgAAAeHAAD4eAAAB8MAAPj/AAAH4wAA+PwAAAfjAADx/AAH//EAAPH/gAf/8QAA8f8AA//x + AADx/wAD//EAAPH/wAH/8QAA8f/AAf/xAADx//wA//EAAPH/8AD/8QAA+P/gAH/jAAD4//4Af8MAAPx/ + /AB/xwAA/D/4AD+HAAD+D/8APg8AAP8H/gAcHwAA/4P+ABg/AAD/4H//wP8AAP/wD/4B/wAA//wAAAf/ + AAD//4AAP/8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA8A/gAzAP4ASwD/AFgA/gBVAP4ASQD+ + ADAA/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAEAP4ANwD+AIcA/wCzAP4AtAD+AI8A/gB1AP8AaQD+ + AGoA/gB4AP4AkgD/ALcA/gCvAP4AfwD+AC4A/wACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gADAP8ARAD+AK4A/gCWAP4AQQD/ABMA/gABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AAQD+ABYA/gBKAP4AnwD/AKYA/gA5AP4AAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD/AJsA/wCVAP8AHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AKgD/AKEA/wCMAP8ADAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ACMA/gC5AP4AUQD/AD8A/gB+AP4AuQD+ + APAA/wD2AP4A9gD+APYA/gD2AP8A9gD+APYA/gD2AP4A9gD/APYA/gD2AP4A9gD+AHkAAAAAAP4AAgD+ + AF0A/gCvAP8AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAXAP4AuAD+AC8AAAAAAAAAAAD+ + ABYA/gCfAP4A+gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+AP4A/gD+AP8A/wD+AP4A/gD+AP4AwQD/ + AAUAAAAAAAAAAAD+AEYA/wCvAP4ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD/AJwA/gBHAAAAAAAA + AAAA/wALAP4AhQD+AKoA/gCsAP8A8AD+AP4A/gD+AP4A/gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+ + AP4A/gD1AP8AHQAAAAAAAAAAAAAAAAD/AF0A/gCHAP4AAQAAAAAAAAAAAAAAAAAAAAAA/wBAAP8AlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AGgD/AKgA/wD8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDUAP8AywD/ + AMwA/wDLAP8AywD/AMsA/wBGAAAAAAAAAAAAAAAAAP8AAgD/AK0A/wAnAAAAAAAAAAAAAAAAAAAAAAD+ + AJcA/wA0AAAAAAAAAAAAAAAAAAAAAAD+AAcA/gBmAP4AjAD/AJIA/gDhAP4A/gD+AP4A/wD/AP4A/gD+ + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4ATgD+AHsAAAAAAAAAAAAA + AAAAAAAAAP4AtwD/AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP8ArQD+AP0A/gD+AP4A/gD/ + AP8A/gD+AP4A1AD+AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP4AqwAA + AAAAAAAAAAAAAAAAAAAA/gC9AP8AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD+AFAA/wBuAP4AdgD+ + ANQA/gD+AP8A/wD+AP4A/gD9AP4AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAMA/gC9AAAAAAAAAAAAAAAAAAAAAAD/ALsA/wAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AB4A/wCvAP8A/QD/AP8A/wD/AP8A/wD/AP8A/wDTAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ACAD/ALkAAAAAAAAAAAAAAAAAAAAAAP4ArwD/ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ANwD+AFAA/gBWAP4AwwD/AP8A/gD+AP4A/gD+AP0A/wBXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/gAoAP4AnAAAAAAAAAAAAAAAAAAAAAAA/gB6AP8AVgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AIwD+ALgA/gD9AP8A/wD+AP4A/gD+AP4A/gD/AMgA/gAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AHIA/gBcAAAAAAAAAAAAAAAAAAAAAAD+AB8A/wCzAP4ACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAcAP4AMgD+ADsA/wCrAP4A/gD+AP4A/gD+AP8A/QD+ + AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAQAP4AuwD+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AGUA/wCJAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAkAP8AvQD/AP4A/wD/AP8A/wD/ + AP8A/wD/AP8AwQD/AAUAAAAAAAAAAAAAAAAAAAAAAP8ABgD/AJ8A/wBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABQD+AIsA/gB2AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAkA/gAUAP8AIAD+ + AJcA/gD8AP4A/gD/AP8A/gD6AP4ARwAAAAAAAAAAAAAAAAD+AAkA/gCMAP8AdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ABQD+AIQA/gCaAP8AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + ACAA/wC0AP4A9QD+APUA/gD1AP8A9gD+APUA/gCyAAAAAAAAAAAA/gAeAP4AqgD+AG8A/wADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AEkA/wC5AP4AbgD+ABQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAbAP8AfQD+ALUA/gA3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAwA/wBkAP8AswD/ + AJgA/wBVAP8AJQD/ABEA/wAGAP8AAQD/AAIA/wAIAP8AEwD/ACgA/wBeAP8AngD/AK8A/wBVAP8ACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/gAFAP4AMAD/AHAA/gCgAP4AsAD+ALoA/wDAAP4AwAD+ALkA/gCvAP8AnAD+AGcA/gArAP4AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////+Af//4AAf/4D8B/8P/8P+AAAh/GA + AGPjAABx58AAceeAH/nn4A/558AP+efwB/nn8Af55/gD+eP4A/Hx/AHj8PwBx/h+AYf+H/4f/wAAP//A + AP////////////////////////////////8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/ACsA/wAeAP8AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD4A/gBlAP8AXgD+AEEA/wA1AP4AQgD/ + AF8A/gBmAP8AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/AG4A/wBcAP8AagD/AHsA/wB7AP8AewD/ + AHsA/wB7AP8AWwD/ADMA/wBpAP8ABgAAAAAAAAAAAAAAAAD/AGwA/gAMAP8AKQD+ALwA/wD7AP4A/gD/ + AP8A/gD+AP8A/wD+AO0A/wAIAP4AEQD/AGcAAAAAAAAAAAD/ADYA/wAzAAAAAAD/AAEA/wBtAP8A3AD/ + AP8A/wD/AP8AgQD/AGYA/wBlAP8AEQAAAAAA/wA/AP8AKAAAAAAA/gBdAP8ABAAAAAAAAAAAAP4AGwD/ + AKQA/gD0AP8A/wD+AJAAAAAAAAAAAAAAAAAAAAAAAP8ABwD+AFoAAAAAAP8AWgD/AAYAAAAAAAAAAAAA + AAAA/wBVAP8AxQD/AP8A/wDzAP8AFwAAAAAAAAAAAAAAAAD/AAwA/wBVAAAAAAD+ACYA/wBFAAAAAAAA + AAAAAAAAAP8ADwD+AIkA/wDqAP4A/gD/AIYAAAAAAAAAAAAAAAAA/wBPAP4AGwAAAAAAAAAAAP8AXwD/ + AB8AAAAAAAAAAAAAAAAA/wBAAP8ArQD/AP4A/wDuAP8AEwAAAAAA/wAnAP8AWAAAAAAAAAAAAAAAAAD/ + AAEA/gBaAP8ATwD+AAUAAAAAAP4ACAD/AGoA/gB6AP8AegD+ADMA/wBUAP4AVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/ABwA/wBgAP8AYgD/AGEA/wBhAP8AYQD/AGIA/wBfAP8AFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA/B8AAPAHAADAAQAAwAEAAJAEAACYPAAAnBwAAJwcAADOCQAAwgMAAPAH + AAD//wAA//8AAP//AAA= + + + \ No newline at end of file diff --git a/SLC1-N/Form1.Designer.cs b/SLC1-N/Form1.Designer.cs new file mode 100644 index 0000000..d0a8cba --- /dev/null +++ b/SLC1-N/Form1.Designer.cs @@ -0,0 +1,2882 @@ +namespace SLC1_N +{ + partial class Form1 + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("MES日志"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("MES设置"); + System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("MES在线/离线"); + System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("MES选项", new System.Windows.Forms.TreeNode[] { + treeNode1, + treeNode2, + treeNode3}); + System.Windows.Forms.TreeNode treeNode5 = new System.Windows.Forms.TreeNode("测试参数"); + System.Windows.Forms.TreeNode treeNode6 = new System.Windows.Forms.TreeNode("存储设置"); + System.Windows.Forms.TreeNode treeNode7 = new System.Windows.Forms.TreeNode("产能清零"); + System.Windows.Forms.TreeNode treeNode8 = new System.Windows.Forms.TreeNode("CH1仪器启动"); + System.Windows.Forms.TreeNode treeNode9 = new System.Windows.Forms.TreeNode("CH2仪器启动"); + System.Windows.Forms.TreeNode treeNode10 = new System.Windows.Forms.TreeNode("CH3仪器启动"); + System.Windows.Forms.TreeNode treeNode11 = new System.Windows.Forms.TreeNode("CH4仪器启动"); + System.Windows.Forms.TreeNode treeNode12 = new System.Windows.Forms.TreeNode("CH1仪器-复位"); + System.Windows.Forms.TreeNode treeNode13 = new System.Windows.Forms.TreeNode("CH2仪器-复位"); + System.Windows.Forms.TreeNode treeNode14 = new System.Windows.Forms.TreeNode("CH3仪器-复位"); + System.Windows.Forms.TreeNode treeNode15 = new System.Windows.Forms.TreeNode("CH4仪器-复位"); + System.Windows.Forms.TreeNode treeNode16 = new System.Windows.Forms.TreeNode("厂商配置"); + System.Windows.Forms.TreeNode treeNode17 = new System.Windows.Forms.TreeNode("参数设置", new System.Windows.Forms.TreeNode[] { + treeNode5, + treeNode6, + treeNode7, + treeNode8, + treeNode9, + treeNode10, + treeNode11, + treeNode12, + treeNode13, + treeNode14, + treeNode15, + treeNode16}); + System.Windows.Forms.TreeNode treeNode18 = new System.Windows.Forms.TreeNode("仪器网络设置"); + System.Windows.Forms.TreeNode treeNode19 = new System.Windows.Forms.TreeNode("扫码器设置"); + System.Windows.Forms.TreeNode treeNode20 = new System.Windows.Forms.TreeNode("PLC控制"); + System.Windows.Forms.TreeNode treeNode21 = new System.Windows.Forms.TreeNode("PLC网口配置"); + System.Windows.Forms.TreeNode treeNode22 = new System.Windows.Forms.TreeNode("通讯设置", new System.Windows.Forms.TreeNode[] { + treeNode18, + treeNode19, + treeNode20, + treeNode21}); + System.Windows.Forms.TreeNode treeNode23 = new System.Windows.Forms.TreeNode("登录"); + System.Windows.Forms.TreeNode treeNode24 = new System.Windows.Forms.TreeNode("注销"); + System.Windows.Forms.TreeNode treeNode25 = new System.Windows.Forms.TreeNode("权限设置"); + System.Windows.Forms.TreeNode treeNode26 = new System.Windows.Forms.TreeNode("用户操作", new System.Windows.Forms.TreeNode[] { + treeNode23, + treeNode24, + treeNode25}); + System.Windows.Forms.TreeNode treeNode27 = new System.Windows.Forms.TreeNode("报警记录"); + System.Windows.Forms.TreeNode treeNode28 = new System.Windows.Forms.TreeNode("清理日志"); + System.Windows.Forms.TreeNode treeNode29 = new System.Windows.Forms.TreeNode("文件管理", new System.Windows.Forms.TreeNode[] { + treeNode27, + treeNode28}); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.SerialPort_CH1Saoma = new System.IO.Ports.SerialPort(this.components); + this.lb_CH2_SmallLeakUnit = new System.Windows.Forms.Label(); + this.lb_CH2BigLeakUnit = new System.Windows.Forms.Label(); + this.lb_CH2_PressureUnit = new System.Windows.Forms.Label(); + this.lb_CH2_Result = new System.Windows.Forms.Label(); + this.lb_CH2_Status = new System.Windows.Forms.Label(); + this.pb_CH2progressBar = new Sunny.UI.UIProcessBar(); + this.label45 = new System.Windows.Forms.Label(); + this.lb_CH2Communication_status = new System.Windows.Forms.Label(); + this.lb_CH2_SmallLeak = new System.Windows.Forms.Label(); + this.lb_CH2BigLeak = new System.Windows.Forms.Label(); + this.lb_CH1_SmallLeakUnit = new System.Windows.Forms.Label(); + this.lb_CH1BigLeakUnit = new System.Windows.Forms.Label(); + this.lb_CH1_PressureUnit = new System.Windows.Forms.Label(); + this.lb_CH2_TestPressure = new System.Windows.Forms.Label(); + this.label69 = new System.Windows.Forms.Label(); + this.CH1_2presstext = new System.Windows.Forms.Label(); + this.label75 = new System.Windows.Forms.Label(); + this.label74 = new System.Windows.Forms.Label(); + this.label103 = new System.Windows.Forms.Label(); + this.uiGroupBox5 = new Sunny.UI.UIGroupBox(); + this.tb_CH2Code = new Sunny.UI.UITextBox(); + this.lb_CH2_nowPressureUnit = new System.Windows.Forms.Label(); + this.label43 = new System.Windows.Forms.Label(); + this.lb_CH2nowPressure = new System.Windows.Forms.Label(); + this.bt_code2clear = new System.Windows.Forms.Button(); + this.lb_CH2MES_INstatus = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.tb_CH2codeLeng = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); + this.lb_CH2MES_OUTstatus = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.bt_test = new System.Windows.Forms.Button(); + this.lb_CH1Communication_status = new System.Windows.Forms.Label(); + this.lb_CH1_Result = new System.Windows.Forms.Label(); + this.lb_CH1_Status = new System.Windows.Forms.Label(); + this.pb_CH1progressBar = new Sunny.UI.UIProcessBar(); + this.label50 = new System.Windows.Forms.Label(); + this.lb_CH1_SmallLeak = new System.Windows.Forms.Label(); + this.lb_CH1BigLeak = new System.Windows.Forms.Label(); + this.lb_CH1_TestPressure = new System.Windows.Forms.Label(); + this.label49 = new System.Windows.Forms.Label(); + this.CH1_1presstext = new System.Windows.Forms.Label(); + this.label52 = new System.Windows.Forms.Label(); + this.label51 = new System.Windows.Forms.Label(); + this.label32 = new System.Windows.Forms.Label(); + this.nb_MainMenu = new Sunny.UI.UINavBar(); + this.chk_SaomaFocus = new System.Windows.Forms.CheckBox(); + this.bt_test2 = new System.Windows.Forms.Button(); + this.lb_User = new System.Windows.Forms.Label(); + this.pb_MESswitch = new System.Windows.Forms.PictureBox(); + this.lb_MESswitch = new System.Windows.Forms.Label(); + this.pb_PLC_CommunicationStatus = new System.Windows.Forms.PictureBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label22 = new System.Windows.Forms.Label(); + this.lb_NowTime = new System.Windows.Forms.Label(); + this.PLCControl = new Sunny.UI.UIHeaderButton(); + this.uiGroupBox1 = new Sunny.UI.UIGroupBox(); + this.tb_CH1Code = new Sunny.UI.UITextBox(); + this.lb_CH1_nowPressureUnit = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.lb_CH1nowPressure = new System.Windows.Forms.Label(); + this.bt_code1clear = new System.Windows.Forms.Button(); + this.label34 = new System.Windows.Forms.Label(); + this.pictureBox5 = new System.Windows.Forms.PictureBox(); + this.label31 = new System.Windows.Forms.Label(); + this.pictureBox4 = new System.Windows.Forms.PictureBox(); + this.label28 = new System.Windows.Forms.Label(); + this.pictureBox3 = new System.Windows.Forms.PictureBox(); + this.label18 = new System.Windows.Forms.Label(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.lb_CH1MES_INstatus = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.tb_CH1codeLeng = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.lb_CH1MES_OUTstatus = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.DataGridView1 = new Sunny.UI.UIDataGridView(); + this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column8 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.CH2ReceiveText = new System.Windows.Forms.TextBox(); + this.CH1ReceiveText = new System.Windows.Forms.TextBox(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.timer_yiqiRun = new System.Windows.Forms.Timer(this.components); + this.tb_CH1MainMessage = new Sunny.UI.UITextBox(); + this.UserClear = new System.Windows.Forms.Timer(this.components); + this.tb_CH2MainMessage = new Sunny.UI.UITextBox(); + this.SerialPort_CH2Saoma = new System.IO.Ports.SerialPort(this.components); + this.timer_ClearMainMessage = new System.Windows.Forms.Timer(this.components); + this.timer_SaomaStart = new System.Windows.Forms.Timer(this.components); + this.timer_nowTime = new System.Windows.Forms.Timer(this.components); + this.uiGroupBox2 = new Sunny.UI.UIGroupBox(); + this.tb_CH3Code = new Sunny.UI.UITextBox(); + this.lb_CH3_nowPressureUnit = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.lb_CH3nowPressure = new System.Windows.Forms.Label(); + this.bt_code3clear = new System.Windows.Forms.Button(); + this.label5 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label11 = new System.Windows.Forms.Label(); + this.pictureBox6 = new System.Windows.Forms.PictureBox(); + this.label12 = new System.Windows.Forms.Label(); + this.pictureBox7 = new System.Windows.Forms.PictureBox(); + this.label13 = new System.Windows.Forms.Label(); + this.pictureBox8 = new System.Windows.Forms.PictureBox(); + this.lb_CH3MES_INstatus = new System.Windows.Forms.Label(); + this.label19 = new System.Windows.Forms.Label(); + this.tb_CH3codeLeng = new System.Windows.Forms.TextBox(); + this.label20 = new System.Windows.Forms.Label(); + this.lb_CH3MES_OUTstatus = new System.Windows.Forms.Label(); + this.label23 = new System.Windows.Forms.Label(); + this.lb_CH3_SmallLeakUnit = new System.Windows.Forms.Label(); + this.lb_CH3BigLeakUnit = new System.Windows.Forms.Label(); + this.lb_CH3_PressureUnit = new System.Windows.Forms.Label(); + this.label27 = new System.Windows.Forms.Label(); + this.lb_CH3_Result = new System.Windows.Forms.Label(); + this.lb_CH3_Status = new System.Windows.Forms.Label(); + this.pb_CH3progressBar = new Sunny.UI.UIProcessBar(); + this.label33 = new System.Windows.Forms.Label(); + this.label35 = new System.Windows.Forms.Label(); + this.label36 = new System.Windows.Forms.Label(); + this.lb_CH3Communication_status = new System.Windows.Forms.Label(); + this.label38 = new System.Windows.Forms.Label(); + this.label40 = new System.Windows.Forms.Label(); + this.lb_CH3_SmallLeak = new System.Windows.Forms.Label(); + this.lb_CH3BigLeak = new System.Windows.Forms.Label(); + this.lb_CH3_TestPressure = new System.Windows.Forms.Label(); + this.uiGroupBox3 = new Sunny.UI.UIGroupBox(); + this.tb_CH4Code = new Sunny.UI.UITextBox(); + this.lb_CH4_nowPressureUnit = new System.Windows.Forms.Label(); + this.label47 = new System.Windows.Forms.Label(); + this.lb_CH4nowPressure = new System.Windows.Forms.Label(); + this.bt_code4clear = new System.Windows.Forms.Button(); + this.lb_CH4MES_INstatus = new System.Windows.Forms.Label(); + this.label55 = new System.Windows.Forms.Label(); + this.tb_CH4codeLeng = new System.Windows.Forms.TextBox(); + this.pb_CH4progressBar = new Sunny.UI.UIProcessBar(); + this.label56 = new System.Windows.Forms.Label(); + this.lb_CH4MES_OUTstatus = new System.Windows.Forms.Label(); + this.label58 = new System.Windows.Forms.Label(); + this.lb_CH4_SmallLeakUnit = new System.Windows.Forms.Label(); + this.lb_CH4BigLeakUnit = new System.Windows.Forms.Label(); + this.lb_CH4_PressureUnit = new System.Windows.Forms.Label(); + this.label62 = new System.Windows.Forms.Label(); + this.lb_CH4_Result = new System.Windows.Forms.Label(); + this.lb_CH4_Status = new System.Windows.Forms.Label(); + this.label65 = new System.Windows.Forms.Label(); + this.label66 = new System.Windows.Forms.Label(); + this.label67 = new System.Windows.Forms.Label(); + this.lb_CH4Communication_status = new System.Windows.Forms.Label(); + this.label70 = new System.Windows.Forms.Label(); + this.label71 = new System.Windows.Forms.Label(); + this.lb_CH4_SmallLeak = new System.Windows.Forms.Label(); + this.lb_CH4BigLeak = new System.Windows.Forms.Label(); + this.lb_CH4_TestPressure = new System.Windows.Forms.Label(); + this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker(); + this.uiGroupBox4 = new Sunny.UI.UIGroupBox(); + this.lb_OKRate = new System.Windows.Forms.Label(); + this.label41 = new System.Windows.Forms.Label(); + this.lb_NGnumber = new System.Windows.Forms.Label(); + this.label30 = new System.Windows.Forms.Label(); + this.lb_OKnumber = new System.Windows.Forms.Label(); + this.label26 = new System.Windows.Forms.Label(); + this.lb_Total = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.pictureBox9 = new System.Windows.Forms.PictureBox(); + this.label21 = new System.Windows.Forms.Label(); + this.pictureBox10 = new System.Windows.Forms.PictureBox(); + this.label24 = new System.Windows.Forms.Label(); + this.pictureBox11 = new System.Windows.Forms.PictureBox(); + this.label25 = new System.Windows.Forms.Label(); + this.pictureBox12 = new System.Windows.Forms.PictureBox(); + this.SerialPort_CH3Saoma = new System.IO.Ports.SerialPort(this.components); + this.SerialPort_CH4Saoma = new System.IO.Ports.SerialPort(this.components); + this.dataGridViewTextBoxColumn7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column13 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column10 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column9 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.DataGridView2 = new Sunny.UI.UIDataGridView(); + this.timer2 = new System.Windows.Forms.Timer(this.components); + this.uiGroupBox5.SuspendLayout(); + this.nb_MainMenu.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pb_MESswitch)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pb_PLC_CommunicationStatus)).BeginInit(); + this.uiGroupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.DataGridView1)).BeginInit(); + this.uiGroupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox8)).BeginInit(); + this.uiGroupBox3.SuspendLayout(); + this.uiGroupBox4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox9)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox10)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox11)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox12)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.DataGridView2)).BeginInit(); + this.SuspendLayout(); + // + // SerialPort_CH1Saoma + // + this.SerialPort_CH1Saoma.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.SerialPort_CH1Saoma_DataReceived); + // + // lb_CH2_SmallLeakUnit + // + this.lb_CH2_SmallLeakUnit.AutoSize = true; + this.lb_CH2_SmallLeakUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH2_SmallLeakUnit.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.lb_CH2_SmallLeakUnit.Location = new System.Drawing.Point(354, 151); + this.lb_CH2_SmallLeakUnit.Name = "lb_CH2_SmallLeakUnit"; + this.lb_CH2_SmallLeakUnit.Size = new System.Drawing.Size(25, 16); + this.lb_CH2_SmallLeakUnit.TabIndex = 423; + this.lb_CH2_SmallLeakUnit.Text = "Pa"; + // + // lb_CH2BigLeakUnit + // + this.lb_CH2BigLeakUnit.AutoSize = true; + this.lb_CH2BigLeakUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH2BigLeakUnit.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH2BigLeakUnit.Location = new System.Drawing.Point(667, 60); + this.lb_CH2BigLeakUnit.Name = "lb_CH2BigLeakUnit"; + this.lb_CH2BigLeakUnit.Size = new System.Drawing.Size(17, 9); + this.lb_CH2BigLeakUnit.TabIndex = 421; + this.lb_CH2BigLeakUnit.Text = "Pa"; + this.lb_CH2BigLeakUnit.Visible = false; + // + // lb_CH2_PressureUnit + // + this.lb_CH2_PressureUnit.AutoSize = true; + this.lb_CH2_PressureUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH2_PressureUnit.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.lb_CH2_PressureUnit.Location = new System.Drawing.Point(202, 151); + this.lb_CH2_PressureUnit.Name = "lb_CH2_PressureUnit"; + this.lb_CH2_PressureUnit.Size = new System.Drawing.Size(34, 16); + this.lb_CH2_PressureUnit.TabIndex = 419; + this.lb_CH2_PressureUnit.Text = "Kpa"; + // + // lb_CH2_Result + // + this.lb_CH2_Result.AutoSize = true; + this.lb_CH2_Result.BackColor = System.Drawing.Color.Transparent; + this.lb_CH2_Result.Font = new System.Drawing.Font("宋体", 100F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH2_Result.ForeColor = System.Drawing.Color.Red; + this.lb_CH2_Result.Location = new System.Drawing.Point(509, 116); + this.lb_CH2_Result.Name = "lb_CH2_Result"; + this.lb_CH2_Result.Size = new System.Drawing.Size(191, 134); + this.lb_CH2_Result.TabIndex = 28; + this.lb_CH2_Result.Text = "NG"; + // + // lb_CH2_Status + // + this.lb_CH2_Status.AutoSize = true; + this.lb_CH2_Status.BackColor = System.Drawing.Color.Transparent; + this.lb_CH2_Status.Font = new System.Drawing.Font("宋体", 25F); + this.lb_CH2_Status.Location = new System.Drawing.Point(390, 210); + this.lb_CH2_Status.Name = "lb_CH2_Status"; + this.lb_CH2_Status.Size = new System.Drawing.Size(83, 34); + this.lb_CH2_Status.TabIndex = 28; + this.lb_CH2_Status.Text = "待机"; + // + // pb_CH2progressBar + // + this.pb_CH2progressBar.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pb_CH2progressBar.Location = new System.Drawing.Point(94, 212); + this.pb_CH2progressBar.MinimumSize = new System.Drawing.Size(70, 3); + this.pb_CH2progressBar.Name = "pb_CH2progressBar"; + this.pb_CH2progressBar.Size = new System.Drawing.Size(292, 29); + this.pb_CH2progressBar.Style = Sunny.UI.UIStyle.Custom; + this.pb_CH2progressBar.TabIndex = 28; + this.pb_CH2progressBar.Text = "uiProcessBar1"; + // + // label45 + // + this.label45.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.label45.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label45.ForeColor = System.Drawing.Color.Black; + this.label45.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label45.Location = new System.Drawing.Point(5, 218); + this.label45.Name = "label45"; + this.label45.Size = new System.Drawing.Size(101, 27); + this.label45.TabIndex = 28; + this.label45.Text = "测试进度:"; + // + // lb_CH2Communication_status + // + this.lb_CH2Communication_status.AutoSize = true; + this.lb_CH2Communication_status.BackColor = System.Drawing.Color.Transparent; + this.lb_CH2Communication_status.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.lb_CH2Communication_status.Location = new System.Drawing.Point(29, 178); + this.lb_CH2Communication_status.Name = "lb_CH2Communication_status"; + this.lb_CH2Communication_status.Size = new System.Drawing.Size(25, 16); + this.lb_CH2Communication_status.TabIndex = 29; + this.lb_CH2Communication_status.Text = "NG"; + // + // lb_CH2_SmallLeak + // + this.lb_CH2_SmallLeak.AutoSize = true; + this.lb_CH2_SmallLeak.BackColor = System.Drawing.Color.Transparent; + this.lb_CH2_SmallLeak.Font = new System.Drawing.Font("宋体", 14F, System.Drawing.FontStyle.Bold); + this.lb_CH2_SmallLeak.Location = new System.Drawing.Point(275, 179); + this.lb_CH2_SmallLeak.Name = "lb_CH2_SmallLeak"; + this.lb_CH2_SmallLeak.Size = new System.Drawing.Size(31, 19); + this.lb_CH2_SmallLeak.TabIndex = 412; + this.lb_CH2_SmallLeak.Text = "##"; + // + // lb_CH2BigLeak + // + this.lb_CH2BigLeak.AutoSize = true; + this.lb_CH2BigLeak.BackColor = System.Drawing.Color.Transparent; + this.lb_CH2BigLeak.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH2BigLeak.Location = new System.Drawing.Point(616, 72); + this.lb_CH2BigLeak.Name = "lb_CH2BigLeak"; + this.lb_CH2BigLeak.Size = new System.Drawing.Size(17, 9); + this.lb_CH2BigLeak.TabIndex = 411; + this.lb_CH2BigLeak.Text = "##"; + this.lb_CH2BigLeak.Visible = false; + // + // lb_CH1_SmallLeakUnit + // + this.lb_CH1_SmallLeakUnit.AutoSize = true; + this.lb_CH1_SmallLeakUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH1_SmallLeakUnit.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.lb_CH1_SmallLeakUnit.Location = new System.Drawing.Point(379, 155); + this.lb_CH1_SmallLeakUnit.Name = "lb_CH1_SmallLeakUnit"; + this.lb_CH1_SmallLeakUnit.Size = new System.Drawing.Size(25, 16); + this.lb_CH1_SmallLeakUnit.TabIndex = 423; + this.lb_CH1_SmallLeakUnit.Text = "Pa"; + // + // lb_CH1BigLeakUnit + // + this.lb_CH1BigLeakUnit.AutoSize = true; + this.lb_CH1BigLeakUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH1BigLeakUnit.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH1BigLeakUnit.Location = new System.Drawing.Point(654, 58); + this.lb_CH1BigLeakUnit.Name = "lb_CH1BigLeakUnit"; + this.lb_CH1BigLeakUnit.Size = new System.Drawing.Size(17, 9); + this.lb_CH1BigLeakUnit.TabIndex = 421; + this.lb_CH1BigLeakUnit.Text = "Pa"; + this.lb_CH1BigLeakUnit.Visible = false; + // + // lb_CH1_PressureUnit + // + this.lb_CH1_PressureUnit.AutoSize = true; + this.lb_CH1_PressureUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH1_PressureUnit.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.lb_CH1_PressureUnit.Location = new System.Drawing.Point(230, 155); + this.lb_CH1_PressureUnit.Name = "lb_CH1_PressureUnit"; + this.lb_CH1_PressureUnit.Size = new System.Drawing.Size(34, 16); + this.lb_CH1_PressureUnit.TabIndex = 419; + this.lb_CH1_PressureUnit.Text = "Kpa"; + // + // lb_CH2_TestPressure + // + this.lb_CH2_TestPressure.AutoSize = true; + this.lb_CH2_TestPressure.BackColor = System.Drawing.Color.Transparent; + this.lb_CH2_TestPressure.Font = new System.Drawing.Font("宋体", 14F, System.Drawing.FontStyle.Bold); + this.lb_CH2_TestPressure.Location = new System.Drawing.Point(133, 178); + this.lb_CH2_TestPressure.Name = "lb_CH2_TestPressure"; + this.lb_CH2_TestPressure.Size = new System.Drawing.Size(31, 19); + this.lb_CH2_TestPressure.TabIndex = 28; + this.lb_CH2_TestPressure.Text = "##"; + // + // label69 + // + this.label69.AutoSize = true; + this.label69.BackColor = System.Drawing.Color.Transparent; + this.label69.Font = new System.Drawing.Font("宋体", 12F); + this.label69.Location = new System.Drawing.Point(6, 151); + this.label69.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label69.Name = "label69"; + this.label69.Size = new System.Drawing.Size(71, 16); + this.label69.TabIndex = 407; + this.label69.Text = "通讯状态"; + // + // CH1_2presstext + // + this.CH1_2presstext.AutoSize = true; + this.CH1_2presstext.BackColor = System.Drawing.Color.Transparent; + this.CH1_2presstext.Font = new System.Drawing.Font("宋体", 12F); + this.CH1_2presstext.Location = new System.Drawing.Point(102, 151); + this.CH1_2presstext.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.CH1_2presstext.Name = "CH1_2presstext"; + this.CH1_2presstext.Size = new System.Drawing.Size(71, 16); + this.CH1_2presstext.TabIndex = 400; + this.CH1_2presstext.Text = "测试压力"; + // + // label75 + // + this.label75.AutoSize = true; + this.label75.BackColor = System.Drawing.Color.Transparent; + this.label75.Font = new System.Drawing.Font("宋体", 12F); + this.label75.Location = new System.Drawing.Point(275, 152); + this.label75.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label75.Name = "label75"; + this.label75.Size = new System.Drawing.Size(55, 16); + this.label75.TabIndex = 401; + this.label75.Text = "泄漏量"; + // + // label74 + // + this.label74.AutoSize = true; + this.label74.BackColor = System.Drawing.Color.Transparent; + this.label74.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label74.Location = new System.Drawing.Point(616, 60); + this.label74.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label74.Name = "label74"; + this.label74.Size = new System.Drawing.Size(41, 9); + this.label74.TabIndex = 405; + this.label74.Text = "平衡压差"; + this.label74.Visible = false; + // + // label103 + // + this.label103.AutoSize = true; + this.label103.BackColor = System.Drawing.Color.Transparent; + this.label103.Font = new System.Drawing.Font("宋体", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label103.Location = new System.Drawing.Point(3, 95); + this.label103.Name = "label103"; + this.label103.Size = new System.Drawing.Size(58, 24); + this.label103.TabIndex = 427; + this.label103.Text = "条码"; + // + // uiGroupBox5 + // + this.uiGroupBox5.Controls.Add(this.tb_CH2Code); + this.uiGroupBox5.Controls.Add(this.lb_CH2_nowPressureUnit); + this.uiGroupBox5.Controls.Add(this.label43); + this.uiGroupBox5.Controls.Add(this.lb_CH2nowPressure); + this.uiGroupBox5.Controls.Add(this.bt_code2clear); + this.uiGroupBox5.Controls.Add(this.lb_CH2MES_INstatus); + this.uiGroupBox5.Controls.Add(this.label16); + this.uiGroupBox5.Controls.Add(this.tb_CH2codeLeng); + this.uiGroupBox5.Controls.Add(this.pb_CH2progressBar); + this.uiGroupBox5.Controls.Add(this.label10); + this.uiGroupBox5.Controls.Add(this.lb_CH2MES_OUTstatus); + this.uiGroupBox5.Controls.Add(this.label8); + this.uiGroupBox5.Controls.Add(this.lb_CH2_SmallLeakUnit); + this.uiGroupBox5.Controls.Add(this.lb_CH2BigLeakUnit); + this.uiGroupBox5.Controls.Add(this.lb_CH2_PressureUnit); + this.uiGroupBox5.Controls.Add(this.label103); + this.uiGroupBox5.Controls.Add(this.lb_CH2_Result); + this.uiGroupBox5.Controls.Add(this.lb_CH2_Status); + this.uiGroupBox5.Controls.Add(this.label75); + this.uiGroupBox5.Controls.Add(this.label45); + this.uiGroupBox5.Controls.Add(this.label74); + this.uiGroupBox5.Controls.Add(this.lb_CH2Communication_status); + this.uiGroupBox5.Controls.Add(this.CH1_2presstext); + this.uiGroupBox5.Controls.Add(this.label69); + this.uiGroupBox5.Controls.Add(this.lb_CH2_SmallLeak); + this.uiGroupBox5.Controls.Add(this.lb_CH2BigLeak); + this.uiGroupBox5.Controls.Add(this.lb_CH2_TestPressure); + this.uiGroupBox5.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiGroupBox5.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox5.Location = new System.Drawing.Point(690, 103); + this.uiGroupBox5.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox5.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox5.Name = "uiGroupBox5"; + this.uiGroupBox5.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox5.Size = new System.Drawing.Size(703, 262); + this.uiGroupBox5.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox5.TabIndex = 443; + this.uiGroupBox5.Text = "CH2工位"; + this.uiGroupBox5.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // tb_CH2Code + // + this.tb_CH2Code.ButtonSymbol = 61761; + this.tb_CH2Code.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_CH2Code.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_CH2Code.Font = new System.Drawing.Font("微软雅黑", 15F); + this.tb_CH2Code.Location = new System.Drawing.Point(92, 94); + this.tb_CH2Code.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_CH2Code.Maximum = 2147483647D; + this.tb_CH2Code.Minimum = -2147483648D; + this.tb_CH2Code.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_CH2Code.Multiline = true; + this.tb_CH2Code.Name = "tb_CH2Code"; + this.tb_CH2Code.Size = new System.Drawing.Size(389, 34); + this.tb_CH2Code.Style = Sunny.UI.UIStyle.Custom; + this.tb_CH2Code.TabIndex = 431; + this.tb_CH2Code.TabStop = false; + this.tb_CH2Code.TextAlignment = System.Drawing.ContentAlignment.TopLeft; + this.tb_CH2Code.TextChanged += new System.EventHandler(this.CH2Code_TextChanged); + this.tb_CH2Code.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.tb_CHxCode_KeyPress); + // + // lb_CH2_nowPressureUnit + // + this.lb_CH2_nowPressureUnit.AutoSize = true; + this.lb_CH2_nowPressureUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH2_nowPressureUnit.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH2_nowPressureUnit.Location = new System.Drawing.Point(575, 60); + this.lb_CH2_nowPressureUnit.Name = "lb_CH2_nowPressureUnit"; + this.lb_CH2_nowPressureUnit.Size = new System.Drawing.Size(17, 9); + this.lb_CH2_nowPressureUnit.TabIndex = 463; + this.lb_CH2_nowPressureUnit.Text = "Pa"; + this.lb_CH2_nowPressureUnit.Visible = false; + // + // label43 + // + this.label43.AutoSize = true; + this.label43.BackColor = System.Drawing.Color.Transparent; + this.label43.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label43.Location = new System.Drawing.Point(531, 60); + this.label43.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label43.Name = "label43"; + this.label43.Size = new System.Drawing.Size(23, 9); + this.label43.TabIndex = 461; + this.label43.Text = "压力"; + this.label43.Visible = false; + // + // lb_CH2nowPressure + // + this.lb_CH2nowPressure.AutoSize = true; + this.lb_CH2nowPressure.BackColor = System.Drawing.Color.Transparent; + this.lb_CH2nowPressure.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH2nowPressure.Location = new System.Drawing.Point(524, 72); + this.lb_CH2nowPressure.Name = "lb_CH2nowPressure"; + this.lb_CH2nowPressure.Size = new System.Drawing.Size(17, 9); + this.lb_CH2nowPressure.TabIndex = 462; + this.lb_CH2nowPressure.Text = "##"; + this.lb_CH2nowPressure.Visible = false; + // + // bt_code2clear + // + this.bt_code2clear.Location = new System.Drawing.Point(9, 30); + this.bt_code2clear.Name = "bt_code2clear"; + this.bt_code2clear.Size = new System.Drawing.Size(61, 51); + this.bt_code2clear.TabIndex = 460; + this.bt_code2clear.Text = "清除条码"; + this.bt_code2clear.UseVisualStyleBackColor = true; + this.bt_code2clear.Click += new System.EventHandler(this.button3_Click); + // + // lb_CH2MES_INstatus + // + this.lb_CH2MES_INstatus.AutoSize = true; + this.lb_CH2MES_INstatus.BackColor = System.Drawing.Color.Transparent; + this.lb_CH2MES_INstatus.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH2MES_INstatus.Location = new System.Drawing.Point(334, 27); + this.lb_CH2MES_INstatus.Name = "lb_CH2MES_INstatus"; + this.lb_CH2MES_INstatus.Size = new System.Drawing.Size(29, 20); + this.lb_CH2MES_INstatus.TabIndex = 458; + this.lb_CH2MES_INstatus.Text = "##"; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.BackColor = System.Drawing.Color.Transparent; + this.label16.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label16.Location = new System.Drawing.Point(191, 28); + this.label16.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(139, 20); + this.label16.TabIndex = 459; + this.label16.Text = "MES入站状态:"; + // + // tb_CH2codeLeng + // + this.tb_CH2codeLeng.Font = new System.Drawing.Font("微软雅黑", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_CH2codeLeng.Location = new System.Drawing.Point(91, 43); + this.tb_CH2codeLeng.Name = "tb_CH2codeLeng"; + this.tb_CH2codeLeng.Size = new System.Drawing.Size(62, 21); + this.tb_CH2codeLeng.TabIndex = 437; + this.tb_CH2codeLeng.TextChanged += new System.EventHandler(this.tb_CH2codeLeng_TextChanged); + // + // label10 + // + this.label10.AutoSize = true; + this.label10.BackColor = System.Drawing.Color.Transparent; + this.label10.Font = new System.Drawing.Font("宋体", 12F); + this.label10.Location = new System.Drawing.Point(86, 24); + this.label10.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(87, 16); + this.label10.TabIndex = 436; + this.label10.Text = "条码长度:"; + // + // lb_CH2MES_OUTstatus + // + this.lb_CH2MES_OUTstatus.AutoSize = true; + this.lb_CH2MES_OUTstatus.BackColor = System.Drawing.Color.Transparent; + this.lb_CH2MES_OUTstatus.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH2MES_OUTstatus.Location = new System.Drawing.Point(573, 27); + this.lb_CH2MES_OUTstatus.Name = "lb_CH2MES_OUTstatus"; + this.lb_CH2MES_OUTstatus.Size = new System.Drawing.Size(29, 20); + this.lb_CH2MES_OUTstatus.TabIndex = 456; + this.lb_CH2MES_OUTstatus.Text = "##"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.BackColor = System.Drawing.Color.Transparent; + this.label8.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label8.Location = new System.Drawing.Point(429, 27); + this.label8.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(139, 20); + this.label8.TabIndex = 457; + this.label8.Text = "MES出站状态:"; + // + // bt_test + // + this.bt_test.Location = new System.Drawing.Point(270, 0); + this.bt_test.Name = "bt_test"; + this.bt_test.Size = new System.Drawing.Size(34, 51); + this.bt_test.TabIndex = 464; + this.bt_test.Text = "测试"; + this.bt_test.UseVisualStyleBackColor = true; + this.bt_test.Visible = false; + this.bt_test.Click += new System.EventHandler(this.bt_test_Click); + // + // lb_CH1Communication_status + // + this.lb_CH1Communication_status.AutoSize = true; + this.lb_CH1Communication_status.BackColor = System.Drawing.Color.Transparent; + this.lb_CH1Communication_status.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.lb_CH1Communication_status.Location = new System.Drawing.Point(36, 182); + this.lb_CH1Communication_status.Name = "lb_CH1Communication_status"; + this.lb_CH1Communication_status.Size = new System.Drawing.Size(25, 16); + this.lb_CH1Communication_status.TabIndex = 29; + this.lb_CH1Communication_status.Text = "NG"; + // + // lb_CH1_Result + // + this.lb_CH1_Result.AutoSize = true; + this.lb_CH1_Result.BackColor = System.Drawing.Color.Transparent; + this.lb_CH1_Result.Font = new System.Drawing.Font("宋体", 100F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH1_Result.ForeColor = System.Drawing.Color.Red; + this.lb_CH1_Result.Location = new System.Drawing.Point(502, 115); + this.lb_CH1_Result.Name = "lb_CH1_Result"; + this.lb_CH1_Result.Size = new System.Drawing.Size(191, 134); + this.lb_CH1_Result.TabIndex = 28; + this.lb_CH1_Result.Text = "NG"; + // + // lb_CH1_Status + // + this.lb_CH1_Status.AutoSize = true; + this.lb_CH1_Status.BackColor = System.Drawing.Color.Transparent; + this.lb_CH1_Status.Font = new System.Drawing.Font("宋体", 25F); + this.lb_CH1_Status.Location = new System.Drawing.Point(412, 207); + this.lb_CH1_Status.Name = "lb_CH1_Status"; + this.lb_CH1_Status.Size = new System.Drawing.Size(83, 34); + this.lb_CH1_Status.TabIndex = 28; + this.lb_CH1_Status.Text = "待机"; + // + // pb_CH1progressBar + // + this.pb_CH1progressBar.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pb_CH1progressBar.Location = new System.Drawing.Point(88, 211); + this.pb_CH1progressBar.MinimumSize = new System.Drawing.Size(70, 3); + this.pb_CH1progressBar.Name = "pb_CH1progressBar"; + this.pb_CH1progressBar.Size = new System.Drawing.Size(319, 29); + this.pb_CH1progressBar.TabIndex = 28; + this.pb_CH1progressBar.Text = "uiProcessBar2"; + // + // label50 + // + this.label50.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.label50.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label50.ForeColor = System.Drawing.Color.Black; + this.label50.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label50.Location = new System.Drawing.Point(4, 213); + this.label50.Name = "label50"; + this.label50.Size = new System.Drawing.Size(135, 27); + this.label50.TabIndex = 28; + this.label50.Text = "测试进度:"; + // + // lb_CH1_SmallLeak + // + this.lb_CH1_SmallLeak.AutoSize = true; + this.lb_CH1_SmallLeak.BackColor = System.Drawing.Color.Transparent; + this.lb_CH1_SmallLeak.Font = new System.Drawing.Font("宋体", 14F, System.Drawing.FontStyle.Bold); + this.lb_CH1_SmallLeak.Location = new System.Drawing.Point(298, 182); + this.lb_CH1_SmallLeak.Name = "lb_CH1_SmallLeak"; + this.lb_CH1_SmallLeak.Size = new System.Drawing.Size(31, 19); + this.lb_CH1_SmallLeak.TabIndex = 412; + this.lb_CH1_SmallLeak.Text = "##"; + // + // lb_CH1BigLeak + // + this.lb_CH1BigLeak.AutoSize = true; + this.lb_CH1BigLeak.BackColor = System.Drawing.Color.Transparent; + this.lb_CH1BigLeak.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH1BigLeak.Location = new System.Drawing.Point(606, 70); + this.lb_CH1BigLeak.Name = "lb_CH1BigLeak"; + this.lb_CH1BigLeak.Size = new System.Drawing.Size(17, 9); + this.lb_CH1BigLeak.TabIndex = 411; + this.lb_CH1BigLeak.Text = "##"; + this.lb_CH1BigLeak.Visible = false; + // + // lb_CH1_TestPressure + // + this.lb_CH1_TestPressure.AutoSize = true; + this.lb_CH1_TestPressure.BackColor = System.Drawing.Color.Transparent; + this.lb_CH1_TestPressure.Font = new System.Drawing.Font("宋体", 14F, System.Drawing.FontStyle.Bold); + this.lb_CH1_TestPressure.Location = new System.Drawing.Point(156, 182); + this.lb_CH1_TestPressure.Name = "lb_CH1_TestPressure"; + this.lb_CH1_TestPressure.Size = new System.Drawing.Size(31, 19); + this.lb_CH1_TestPressure.TabIndex = 28; + this.lb_CH1_TestPressure.Text = "##"; + // + // label49 + // + this.label49.AutoSize = true; + this.label49.BackColor = System.Drawing.Color.Transparent; + this.label49.Font = new System.Drawing.Font("宋体", 12F); + this.label49.Location = new System.Drawing.Point(13, 155); + this.label49.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label49.Name = "label49"; + this.label49.Size = new System.Drawing.Size(71, 16); + this.label49.TabIndex = 407; + this.label49.Text = "通讯状态"; + // + // CH1_1presstext + // + this.CH1_1presstext.AutoSize = true; + this.CH1_1presstext.BackColor = System.Drawing.Color.Transparent; + this.CH1_1presstext.Font = new System.Drawing.Font("宋体", 12F); + this.CH1_1presstext.Location = new System.Drawing.Point(129, 155); + this.CH1_1presstext.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.CH1_1presstext.Name = "CH1_1presstext"; + this.CH1_1presstext.Size = new System.Drawing.Size(71, 16); + this.CH1_1presstext.TabIndex = 400; + this.CH1_1presstext.Text = "测试压力"; + // + // label52 + // + this.label52.AutoSize = true; + this.label52.BackColor = System.Drawing.Color.Transparent; + this.label52.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label52.Location = new System.Drawing.Point(606, 58); + this.label52.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label52.Name = "label52"; + this.label52.Size = new System.Drawing.Size(41, 9); + this.label52.TabIndex = 405; + this.label52.Text = "平衡压差"; + this.label52.Visible = false; + // + // label51 + // + this.label51.AutoSize = true; + this.label51.BackColor = System.Drawing.Color.Transparent; + this.label51.Font = new System.Drawing.Font("宋体", 12F); + this.label51.Location = new System.Drawing.Point(299, 154); + this.label51.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label51.Name = "label51"; + this.label51.Size = new System.Drawing.Size(55, 16); + this.label51.TabIndex = 401; + this.label51.Text = "泄漏量"; + // + // label32 + // + this.label32.AutoSize = true; + this.label32.BackColor = System.Drawing.Color.Transparent; + this.label32.Font = new System.Drawing.Font("宋体", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label32.Location = new System.Drawing.Point(3, 95); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(58, 24); + this.label32.TabIndex = 427; + this.label32.Text = "条码"; + // + // nb_MainMenu + // + this.nb_MainMenu.BackColor = System.Drawing.Color.LightBlue; + this.nb_MainMenu.Controls.Add(this.chk_SaomaFocus); + this.nb_MainMenu.Controls.Add(this.bt_test2); + this.nb_MainMenu.Controls.Add(this.bt_test); + this.nb_MainMenu.Controls.Add(this.lb_User); + this.nb_MainMenu.Controls.Add(this.pb_MESswitch); + this.nb_MainMenu.Controls.Add(this.lb_MESswitch); + this.nb_MainMenu.Controls.Add(this.pb_PLC_CommunicationStatus); + this.nb_MainMenu.Controls.Add(this.label4); + this.nb_MainMenu.Controls.Add(this.label22); + this.nb_MainMenu.Controls.Add(this.lb_NowTime); + this.nb_MainMenu.Dock = System.Windows.Forms.DockStyle.Top; + this.nb_MainMenu.DropMenuFont = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nb_MainMenu.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nb_MainMenu.ForeColor = System.Drawing.Color.Black; + this.nb_MainMenu.Location = new System.Drawing.Point(0, 0); + this.nb_MainMenu.MenuHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(123)))), ((int)(((byte)(163)))), ((int)(((byte)(133))))); + this.nb_MainMenu.MenuSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(123)))), ((int)(((byte)(163)))), ((int)(((byte)(133))))); + this.nb_MainMenu.MenuStyle = Sunny.UI.UIMenuStyle.Custom; + this.nb_MainMenu.Name = "nb_MainMenu"; + this.nb_MainMenu.NodeInterval = 0; + treeNode1.Name = "节点1"; + treeNode1.Text = "MES日志"; + treeNode2.Name = "节点0"; + treeNode2.Text = "MES设置"; + treeNode3.Name = "节点0"; + treeNode3.Text = "MES在线/离线"; + treeNode4.Name = "节点0"; + treeNode4.Text = "MES选项"; + treeNode5.Name = "节点0"; + treeNode5.Text = "测试参数"; + treeNode6.Name = "节点3"; + treeNode6.Text = "存储设置"; + treeNode7.Name = "节点0"; + treeNode7.Text = "产能清零"; + treeNode8.Name = "节点0"; + treeNode8.Text = "CH1仪器启动"; + treeNode9.Name = "节点0"; + treeNode9.Text = "CH2仪器启动"; + treeNode10.Name = "节点0"; + treeNode10.Text = "CH3仪器启动"; + treeNode11.Name = "节点1"; + treeNode11.Text = "CH4仪器启动"; + treeNode12.Name = "节点0"; + treeNode12.Text = "CH1仪器-复位"; + treeNode13.Name = "节点1"; + treeNode13.Text = "CH2仪器-复位"; + treeNode14.Name = "节点2"; + treeNode14.Text = "CH3仪器-复位"; + treeNode15.Name = "节点3"; + treeNode15.Text = "CH4仪器-复位"; + treeNode16.Name = "节点0"; + treeNode16.Text = "厂商配置"; + treeNode17.Name = "节点0"; + treeNode17.Text = "参数设置"; + treeNode18.Name = "节点1"; + treeNode18.Text = "仪器网络设置"; + treeNode19.Name = "节点3"; + treeNode19.Text = "扫码器设置"; + treeNode20.Name = "节点0"; + treeNode20.Text = "PLC控制"; + treeNode21.Name = "节点0"; + treeNode21.Text = "PLC网口配置"; + treeNode22.Name = "节点2"; + treeNode22.Text = "通讯设置"; + treeNode23.Name = "节点5"; + treeNode23.Text = "登录"; + treeNode24.Name = "节点6"; + treeNode24.Text = "注销"; + treeNode25.Name = "节点5"; + treeNode25.Text = "权限设置"; + treeNode26.Name = "节点4"; + treeNode26.Text = "用户操作"; + treeNode27.Name = "节点9"; + treeNode27.Text = "报警记录"; + treeNode28.Name = "节点0"; + treeNode28.Text = "清理日志"; + treeNode29.Name = "节点6"; + treeNode29.Text = "文件管理"; + this.nb_MainMenu.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode4, + treeNode17, + treeNode22, + treeNode26, + treeNode29}); + this.nb_MainMenu.SelectedForeColor = System.Drawing.Color.Black; + this.nb_MainMenu.SelectedHighColor = System.Drawing.Color.FromArgb(((int)(((byte)(142)))), ((int)(((byte)(164)))), ((int)(((byte)(144))))); + this.nb_MainMenu.Size = new System.Drawing.Size(1397, 50); + this.nb_MainMenu.Style = Sunny.UI.UIStyle.Custom; + this.nb_MainMenu.TabIndex = 435; + this.nb_MainMenu.Text = "uiNavBar1"; + this.nb_MainMenu.MenuItemClick += new Sunny.UI.UINavBar.OnMenuItemClick(this.uiNavBar1_MenuItemClick); + // + // chk_SaomaFocus + // + this.chk_SaomaFocus.AutoSize = true; + this.chk_SaomaFocus.Location = new System.Drawing.Point(642, 16); + this.chk_SaomaFocus.Name = "chk_SaomaFocus"; + this.chk_SaomaFocus.Size = new System.Drawing.Size(90, 20); + this.chk_SaomaFocus.TabIndex = 474; + this.chk_SaomaFocus.Text = "扫码专注"; + this.chk_SaomaFocus.UseVisualStyleBackColor = true; + this.chk_SaomaFocus.CheckedChanged += new System.EventHandler(this.chk_SaomaFocus_CheckedChanged); + // + // bt_test2 + // + this.bt_test2.Location = new System.Drawing.Point(305, 0); + this.bt_test2.Name = "bt_test2"; + this.bt_test2.Size = new System.Drawing.Size(32, 51); + this.bt_test2.TabIndex = 473; + this.bt_test2.Text = "测试"; + this.bt_test2.UseVisualStyleBackColor = true; + this.bt_test2.Visible = false; + this.bt_test2.Click += new System.EventHandler(this.bt_test2_Click); + // + // lb_User + // + this.lb_User.AutoSize = true; + this.lb_User.Location = new System.Drawing.Point(203, 19); + this.lb_User.Name = "lb_User"; + this.lb_User.Size = new System.Drawing.Size(63, 16); + this.lb_User.TabIndex = 471; + this.lb_User.Text = "label15"; + this.lb_User.TabIndexChanged += new System.EventHandler(this.Admin_TabIndexChanged); + // + // pb_MESswitch + // + this.pb_MESswitch.Location = new System.Drawing.Point(542, 15); + this.pb_MESswitch.Name = "pb_MESswitch"; + this.pb_MESswitch.Size = new System.Drawing.Size(52, 31); + this.pb_MESswitch.TabIndex = 454; + this.pb_MESswitch.TabStop = false; + // + // lb_MESswitch + // + this.lb_MESswitch.AutoSize = true; + this.lb_MESswitch.Location = new System.Drawing.Point(463, 16); + this.lb_MESswitch.Name = "lb_MESswitch"; + this.lb_MESswitch.Size = new System.Drawing.Size(63, 16); + this.lb_MESswitch.TabIndex = 453; + this.lb_MESswitch.Text = "MES离线"; + // + // pb_PLC_CommunicationStatus + // + this.pb_PLC_CommunicationStatus.BackColor = System.Drawing.Color.Silver; + this.pb_PLC_CommunicationStatus.Location = new System.Drawing.Point(387, 16); + this.pb_PLC_CommunicationStatus.Name = "pb_PLC_CommunicationStatus"; + this.pb_PLC_CommunicationStatus.Size = new System.Drawing.Size(52, 28); + this.pb_PLC_CommunicationStatus.TabIndex = 452; + this.pb_PLC_CommunicationStatus.TabStop = false; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(131, 18); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(55, 16); + this.label4.TabIndex = 447; + this.label4.Text = "用户:"; + // + // label22 + // + this.label22.AutoSize = true; + this.label22.Location = new System.Drawing.Point(343, 19); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(31, 16); + this.label22.TabIndex = 451; + this.label22.Text = "PLC"; + // + // lb_NowTime + // + this.lb_NowTime.AutoSize = true; + this.lb_NowTime.Font = new System.Drawing.Font("宋体", 15F); + this.lb_NowTime.Location = new System.Drawing.Point(16, 15); + this.lb_NowTime.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lb_NowTime.Name = "lb_NowTime"; + this.lb_NowTime.Size = new System.Drawing.Size(89, 20); + this.lb_NowTime.TabIndex = 343; + this.lb_NowTime.Text = "HH:mm:ss"; + // + // PLCControl + // + this.PLCControl.CircleColor = System.Drawing.Color.Transparent; + this.PLCControl.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(215)))), ((int)(((byte)(230))))); + this.PLCControl.FillDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(215)))), ((int)(((byte)(230))))); + this.PLCControl.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(215)))), ((int)(((byte)(230))))); + this.PLCControl.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(215)))), ((int)(((byte)(230))))); + this.PLCControl.FillSelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(215)))), ((int)(((byte)(230))))); + this.PLCControl.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.PLCControl.Location = new System.Drawing.Point(1114, 337); + this.PLCControl.Margin = new System.Windows.Forms.Padding(2); + this.PLCControl.MinimumSize = new System.Drawing.Size(1, 1); + this.PLCControl.Name = "PLCControl"; + this.PLCControl.Padding = new System.Windows.Forms.Padding(0, 6, 0, 2); + this.PLCControl.Radius = 0; + this.PLCControl.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.PLCControl.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None; + this.PLCControl.Size = new System.Drawing.Size(88, 82); + this.PLCControl.Style = Sunny.UI.UIStyle.Custom; + this.PLCControl.Symbol = 61459; + this.PLCControl.SymbolOffset = new System.Drawing.Point(-1, 2); + this.PLCControl.SymbolSize = 70; + this.PLCControl.TabIndex = 446; + this.PLCControl.Text = "PLC控制"; + this.PLCControl.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.PLCControl.Visible = false; + // + // uiGroupBox1 + // + this.uiGroupBox1.Controls.Add(this.tb_CH1Code); + this.uiGroupBox1.Controls.Add(this.lb_CH1_nowPressureUnit); + this.uiGroupBox1.Controls.Add(this.label6); + this.uiGroupBox1.Controls.Add(this.lb_CH1nowPressure); + this.uiGroupBox1.Controls.Add(this.bt_code1clear); + this.uiGroupBox1.Controls.Add(this.label34); + this.uiGroupBox1.Controls.Add(this.pictureBox5); + this.uiGroupBox1.Controls.Add(this.label31); + this.uiGroupBox1.Controls.Add(this.pictureBox4); + this.uiGroupBox1.Controls.Add(this.label28); + this.uiGroupBox1.Controls.Add(this.pictureBox3); + this.uiGroupBox1.Controls.Add(this.label18); + this.uiGroupBox1.Controls.Add(this.pictureBox2); + this.uiGroupBox1.Controls.Add(this.lb_CH1MES_INstatus); + this.uiGroupBox1.Controls.Add(this.label14); + this.uiGroupBox1.Controls.Add(this.tb_CH1codeLeng); + this.uiGroupBox1.Controls.Add(this.label9); + this.uiGroupBox1.Controls.Add(this.lb_CH1MES_OUTstatus); + this.uiGroupBox1.Controls.Add(this.label7); + this.uiGroupBox1.Controls.Add(this.lb_CH1_SmallLeakUnit); + this.uiGroupBox1.Controls.Add(this.lb_CH1BigLeakUnit); + this.uiGroupBox1.Controls.Add(this.lb_CH1_PressureUnit); + this.uiGroupBox1.Controls.Add(this.label32); + this.uiGroupBox1.Controls.Add(this.lb_CH1_Result); + this.uiGroupBox1.Controls.Add(this.lb_CH1_Status); + this.uiGroupBox1.Controls.Add(this.pb_CH1progressBar); + this.uiGroupBox1.Controls.Add(this.label51); + this.uiGroupBox1.Controls.Add(this.label50); + this.uiGroupBox1.Controls.Add(this.label52); + this.uiGroupBox1.Controls.Add(this.lb_CH1Communication_status); + this.uiGroupBox1.Controls.Add(this.CH1_1presstext); + this.uiGroupBox1.Controls.Add(this.label49); + this.uiGroupBox1.Controls.Add(this.lb_CH1_SmallLeak); + this.uiGroupBox1.Controls.Add(this.lb_CH1BigLeak); + this.uiGroupBox1.Controls.Add(this.lb_CH1_TestPressure); + this.uiGroupBox1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox1.Location = new System.Drawing.Point(2, 103); + this.uiGroupBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox1.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox1.Name = "uiGroupBox1"; + this.uiGroupBox1.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox1.Size = new System.Drawing.Size(685, 262); + this.uiGroupBox1.TabIndex = 436; + this.uiGroupBox1.Text = "CH1工位"; + this.uiGroupBox1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // tb_CH1Code + // + this.tb_CH1Code.ButtonSymbol = 61761; + this.tb_CH1Code.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_CH1Code.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_CH1Code.Font = new System.Drawing.Font("微软雅黑", 15F); + this.tb_CH1Code.Location = new System.Drawing.Point(85, 94); + this.tb_CH1Code.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_CH1Code.Maximum = 2147483647D; + this.tb_CH1Code.Minimum = -2147483648D; + this.tb_CH1Code.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_CH1Code.Multiline = true; + this.tb_CH1Code.Name = "tb_CH1Code"; + this.tb_CH1Code.Size = new System.Drawing.Size(389, 34); + this.tb_CH1Code.TabIndex = 430; + this.tb_CH1Code.TabStop = false; + this.tb_CH1Code.TextAlignment = System.Drawing.ContentAlignment.TopLeft; + this.tb_CH1Code.TextChanged += new System.EventHandler(this.CH1Code_TextChanged); + this.tb_CH1Code.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.tb_CHxCode_KeyPress); + // + // lb_CH1_nowPressureUnit + // + this.lb_CH1_nowPressureUnit.AutoSize = true; + this.lb_CH1_nowPressureUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH1_nowPressureUnit.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH1_nowPressureUnit.Location = new System.Drawing.Point(560, 58); + this.lb_CH1_nowPressureUnit.Name = "lb_CH1_nowPressureUnit"; + this.lb_CH1_nowPressureUnit.Size = new System.Drawing.Size(17, 9); + this.lb_CH1_nowPressureUnit.TabIndex = 451; + this.lb_CH1_nowPressureUnit.Text = "Pa"; + this.lb_CH1_nowPressureUnit.Visible = false; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.BackColor = System.Drawing.Color.Transparent; + this.label6.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label6.Location = new System.Drawing.Point(523, 58); + this.label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(23, 9); + this.label6.TabIndex = 449; + this.label6.Text = "压力"; + this.label6.Visible = false; + // + // lb_CH1nowPressure + // + this.lb_CH1nowPressure.AutoSize = true; + this.lb_CH1nowPressure.BackColor = System.Drawing.Color.Transparent; + this.lb_CH1nowPressure.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH1nowPressure.Location = new System.Drawing.Point(512, 70); + this.lb_CH1nowPressure.Name = "lb_CH1nowPressure"; + this.lb_CH1nowPressure.Size = new System.Drawing.Size(17, 9); + this.lb_CH1nowPressure.TabIndex = 450; + this.lb_CH1nowPressure.Text = "##"; + this.lb_CH1nowPressure.Visible = false; + // + // bt_code1clear + // + this.bt_code1clear.Location = new System.Drawing.Point(10, 31); + this.bt_code1clear.Name = "bt_code1clear"; + this.bt_code1clear.Size = new System.Drawing.Size(58, 50); + this.bt_code1clear.TabIndex = 448; + this.bt_code1clear.Text = "清除条码"; + this.bt_code1clear.UseVisualStyleBackColor = true; + this.bt_code1clear.Click += new System.EventHandler(this.button2_Click); + // + // label34 + // + this.label34.AutoSize = true; + this.label34.BackColor = System.Drawing.Color.Transparent; + this.label34.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.label34.Location = new System.Drawing.Point(526, 275); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(75, 16); + this.label34.TabIndex = 447; + this.label34.Text = "正压模式"; + this.label34.Visible = false; + // + // pictureBox5 + // + this.pictureBox5.Location = new System.Drawing.Point(609, 264); + this.pictureBox5.Name = "pictureBox5"; + this.pictureBox5.Size = new System.Drawing.Size(43, 27); + this.pictureBox5.TabIndex = 446; + this.pictureBox5.TabStop = false; + this.pictureBox5.Visible = false; + // + // label31 + // + this.label31.AutoSize = true; + this.label31.BackColor = System.Drawing.Color.Transparent; + this.label31.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.label31.Location = new System.Drawing.Point(396, 275); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(75, 16); + this.label31.TabIndex = 445; + this.label31.Text = "负压模式"; + this.label31.Visible = false; + // + // pictureBox4 + // + this.pictureBox4.Location = new System.Drawing.Point(477, 264); + this.pictureBox4.Name = "pictureBox4"; + this.pictureBox4.Size = new System.Drawing.Size(43, 27); + this.pictureBox4.TabIndex = 444; + this.pictureBox4.TabStop = false; + this.pictureBox4.Visible = false; + // + // label28 + // + this.label28.AutoSize = true; + this.label28.BackColor = System.Drawing.Color.Transparent; + this.label28.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.label28.Location = new System.Drawing.Point(201, 275); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(75, 16); + this.label28.TabIndex = 443; + this.label28.Text = "扫码完成"; + // + // pictureBox3 + // + this.pictureBox3.Location = new System.Drawing.Point(302, 268); + this.pictureBox3.Name = "pictureBox3"; + this.pictureBox3.Size = new System.Drawing.Size(43, 27); + this.pictureBox3.TabIndex = 442; + this.pictureBox3.TabStop = false; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.BackColor = System.Drawing.Color.Transparent; + this.label18.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.label18.Location = new System.Drawing.Point(20, 275); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(75, 16); + this.label18.TabIndex = 441; + this.label18.Text = "开始扫码"; + // + // pictureBox2 + // + this.pictureBox2.Location = new System.Drawing.Point(123, 268); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(43, 27); + this.pictureBox2.TabIndex = 440; + this.pictureBox2.TabStop = false; + // + // lb_CH1MES_INstatus + // + this.lb_CH1MES_INstatus.AutoSize = true; + this.lb_CH1MES_INstatus.BackColor = System.Drawing.Color.Transparent; + this.lb_CH1MES_INstatus.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH1MES_INstatus.Location = new System.Drawing.Point(317, 28); + this.lb_CH1MES_INstatus.Name = "lb_CH1MES_INstatus"; + this.lb_CH1MES_INstatus.Size = new System.Drawing.Size(29, 20); + this.lb_CH1MES_INstatus.TabIndex = 436; + this.lb_CH1MES_INstatus.Text = "##"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.BackColor = System.Drawing.Color.Transparent; + this.label14.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label14.Location = new System.Drawing.Point(174, 28); + this.label14.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(139, 20); + this.label14.TabIndex = 437; + this.label14.Text = "MES入站状态:"; + // + // tb_CH1codeLeng + // + this.tb_CH1codeLeng.Font = new System.Drawing.Font("微软雅黑", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_CH1codeLeng.Location = new System.Drawing.Point(85, 46); + this.tb_CH1codeLeng.Name = "tb_CH1codeLeng"; + this.tb_CH1codeLeng.Size = new System.Drawing.Size(59, 21); + this.tb_CH1codeLeng.TabIndex = 435; + this.tb_CH1codeLeng.TextChanged += new System.EventHandler(this.tb_CH1codeLeng_TextChanged); + // + // label9 + // + this.label9.AutoSize = true; + this.label9.BackColor = System.Drawing.Color.Transparent; + this.label9.Font = new System.Drawing.Font("宋体", 12F); + this.label9.Location = new System.Drawing.Point(79, 27); + this.label9.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(87, 16); + this.label9.TabIndex = 434; + this.label9.Text = "条码长度:"; + // + // lb_CH1MES_OUTstatus + // + this.lb_CH1MES_OUTstatus.AutoSize = true; + this.lb_CH1MES_OUTstatus.BackColor = System.Drawing.Color.Transparent; + this.lb_CH1MES_OUTstatus.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH1MES_OUTstatus.Location = new System.Drawing.Point(558, 28); + this.lb_CH1MES_OUTstatus.Name = "lb_CH1MES_OUTstatus"; + this.lb_CH1MES_OUTstatus.Size = new System.Drawing.Size(29, 20); + this.lb_CH1MES_OUTstatus.TabIndex = 430; + this.lb_CH1MES_OUTstatus.Text = "##"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.BackColor = System.Drawing.Color.Transparent; + this.label7.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label7.Location = new System.Drawing.Point(414, 28); + this.label7.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(139, 20); + this.label7.TabIndex = 431; + this.label7.Text = "MES出站状态:"; + // + // DataGridView1 + // + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + dataGridViewCellStyle1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.DataGridView1.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.DataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.DataGridView1.BackgroundColor = System.Drawing.Color.White; + this.DataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.Color.White; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.DataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.DataGridView1.ColumnHeadersHeight = 30; + this.DataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.DataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Column1, + this.Column8, + this.Column2, + this.Column3, + this.Column7}); + this.DataGridView1.EnableHeadersVisualStyles = false; + this.DataGridView1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.DataGridView1.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + this.DataGridView1.Location = new System.Drawing.Point(0, 700); + this.DataGridView1.Name = "DataGridView1"; + this.DataGridView1.ReadOnly = true; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.Color.White; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.DataGridView1.RowHeadersDefaultCellStyle = dataGridViewCellStyle3; + this.DataGridView1.RowHeadersWidth = 45; + dataGridViewCellStyle4.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.DataGridView1.RowsDefaultCellStyle = dataGridViewCellStyle4; + this.DataGridView1.RowTemplate.Height = 23; + this.DataGridView1.SelectedIndex = -1; + this.DataGridView1.ShowGridLine = true; + this.DataGridView1.Size = new System.Drawing.Size(687, 245); + this.DataGridView1.StyleCustomMode = true; + this.DataGridView1.TabIndex = 438; + this.DataGridView1.RowPrePaint += new System.Windows.Forms.DataGridViewRowPrePaintEventHandler(this.DataGridView1_RowPrePaint); + // + // Column1 + // + this.Column1.FillWeight = 99.30956F; + this.Column1.HeaderText = "时间"; + this.Column1.MinimumWidth = 6; + this.Column1.Name = "Column1"; + this.Column1.ReadOnly = true; + // + // Column8 + // + this.Column8.FillWeight = 186.0061F; + this.Column8.HeaderText = "条形码"; + this.Column8.MinimumWidth = 6; + this.Column8.Name = "Column8"; + this.Column8.ReadOnly = true; + // + // Column2 + // + this.Column2.FillWeight = 82.96931F; + this.Column2.HeaderText = "测试压力"; + this.Column2.MinimumWidth = 6; + this.Column2.Name = "Column2"; + this.Column2.ReadOnly = true; + // + // Column3 + // + this.Column3.FillWeight = 78.41549F; + this.Column3.HeaderText = "泄漏量"; + this.Column3.MinimumWidth = 6; + this.Column3.Name = "Column3"; + this.Column3.ReadOnly = true; + // + // Column7 + // + this.Column7.FillWeight = 53.29949F; + this.Column7.HeaderText = "结果"; + this.Column7.MinimumWidth = 6; + this.Column7.Name = "Column7"; + this.Column7.ReadOnly = true; + // + // CH2ReceiveText + // + this.CH2ReceiveText.Location = new System.Drawing.Point(909, 350); + this.CH2ReceiveText.Multiline = true; + this.CH2ReceiveText.Name = "CH2ReceiveText"; + this.CH2ReceiveText.Size = new System.Drawing.Size(210, 69); + this.CH2ReceiveText.TabIndex = 453; + this.CH2ReceiveText.Visible = false; + // + // CH1ReceiveText + // + this.CH1ReceiveText.Location = new System.Drawing.Point(725, 350); + this.CH1ReceiveText.Multiline = true; + this.CH1ReceiveText.Name = "CH1ReceiveText"; + this.CH1ReceiveText.Size = new System.Drawing.Size(168, 69); + this.CH1ReceiveText.TabIndex = 452; + this.CH1ReceiveText.Visible = false; + // + // timer1 + // + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // timer_yiqiRun + // + this.timer_yiqiRun.Interval = 500; + this.timer_yiqiRun.Tick += new System.EventHandler(this.timer_yiqiRun_Tick); + // + // tb_CH1MainMessage + // + this.tb_CH1MainMessage.ButtonSymbol = 61761; + this.tb_CH1MainMessage.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_CH1MainMessage.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_CH1MainMessage.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_CH1MainMessage.Location = new System.Drawing.Point(3, 54); + this.tb_CH1MainMessage.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_CH1MainMessage.Maximum = 2147483647D; + this.tb_CH1MainMessage.Minimum = -2147483648D; + this.tb_CH1MainMessage.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_CH1MainMessage.Multiline = true; + this.tb_CH1MainMessage.Name = "tb_CH1MainMessage"; + this.tb_CH1MainMessage.ReadOnly = true; + this.tb_CH1MainMessage.Size = new System.Drawing.Size(684, 51); + this.tb_CH1MainMessage.Style = Sunny.UI.UIStyle.Custom; + this.tb_CH1MainMessage.TabIndex = 429; + this.tb_CH1MainMessage.TabStop = false; + this.tb_CH1MainMessage.TextAlignment = System.Drawing.ContentAlignment.TopLeft; + this.tb_CH1MainMessage.TextChanged += new System.EventHandler(this.tb_CH1MainMessage_TextChanged); + // + // UserClear + // + this.UserClear.Tick += new System.EventHandler(this.UserClear_Tick); + // + // tb_CH2MainMessage + // + this.tb_CH2MainMessage.ButtonSymbol = 61761; + this.tb_CH2MainMessage.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_CH2MainMessage.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_CH2MainMessage.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_CH2MainMessage.Location = new System.Drawing.Point(690, 54); + this.tb_CH2MainMessage.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_CH2MainMessage.Maximum = 2147483647D; + this.tb_CH2MainMessage.Minimum = -2147483648D; + this.tb_CH2MainMessage.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_CH2MainMessage.Multiline = true; + this.tb_CH2MainMessage.Name = "tb_CH2MainMessage"; + this.tb_CH2MainMessage.ReadOnly = true; + this.tb_CH2MainMessage.Size = new System.Drawing.Size(703, 51); + this.tb_CH2MainMessage.Style = Sunny.UI.UIStyle.Custom; + this.tb_CH2MainMessage.TabIndex = 430; + this.tb_CH2MainMessage.TabStop = false; + this.tb_CH2MainMessage.TextAlignment = System.Drawing.ContentAlignment.TopLeft; + this.tb_CH2MainMessage.TextChanged += new System.EventHandler(this.tb_CH2MainMessage_TextChanged); + // + // SerialPort_CH2Saoma + // + this.SerialPort_CH2Saoma.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.SerialPort_CH2Saoma_DataReceived); + // + // timer_ClearMainMessage + // + this.timer_ClearMainMessage.Interval = 15000; + this.timer_ClearMainMessage.Tick += new System.EventHandler(this.timer_ClearMainMessage_Tick); + // + // timer_SaomaStart + // + this.timer_SaomaStart.Interval = 500; + this.timer_SaomaStart.Tick += new System.EventHandler(this.timer_SaomaStart_Tick); + // + // timer_nowTime + // + this.timer_nowTime.Interval = 1000; + this.timer_nowTime.Tick += new System.EventHandler(this.timer_nowTime_Tick); + // + // uiGroupBox2 + // + this.uiGroupBox2.Controls.Add(this.tb_CH3Code); + this.uiGroupBox2.Controls.Add(this.lb_CH3_nowPressureUnit); + this.uiGroupBox2.Controls.Add(this.label2); + this.uiGroupBox2.Controls.Add(this.lb_CH3nowPressure); + this.uiGroupBox2.Controls.Add(this.bt_code3clear); + this.uiGroupBox2.Controls.Add(this.label5); + this.uiGroupBox2.Controls.Add(this.pictureBox1); + this.uiGroupBox2.Controls.Add(this.label11); + this.uiGroupBox2.Controls.Add(this.pictureBox6); + this.uiGroupBox2.Controls.Add(this.label12); + this.uiGroupBox2.Controls.Add(this.pictureBox7); + this.uiGroupBox2.Controls.Add(this.label13); + this.uiGroupBox2.Controls.Add(this.pictureBox8); + this.uiGroupBox2.Controls.Add(this.lb_CH3MES_INstatus); + this.uiGroupBox2.Controls.Add(this.label19); + this.uiGroupBox2.Controls.Add(this.tb_CH3codeLeng); + this.uiGroupBox2.Controls.Add(this.label20); + this.uiGroupBox2.Controls.Add(this.lb_CH3MES_OUTstatus); + this.uiGroupBox2.Controls.Add(this.label23); + this.uiGroupBox2.Controls.Add(this.lb_CH3_SmallLeakUnit); + this.uiGroupBox2.Controls.Add(this.lb_CH3BigLeakUnit); + this.uiGroupBox2.Controls.Add(this.lb_CH3_PressureUnit); + this.uiGroupBox2.Controls.Add(this.label27); + this.uiGroupBox2.Controls.Add(this.lb_CH3_Result); + this.uiGroupBox2.Controls.Add(this.lb_CH3_Status); + this.uiGroupBox2.Controls.Add(this.pb_CH3progressBar); + this.uiGroupBox2.Controls.Add(this.label33); + this.uiGroupBox2.Controls.Add(this.label35); + this.uiGroupBox2.Controls.Add(this.label36); + this.uiGroupBox2.Controls.Add(this.lb_CH3Communication_status); + this.uiGroupBox2.Controls.Add(this.label38); + this.uiGroupBox2.Controls.Add(this.label40); + this.uiGroupBox2.Controls.Add(this.lb_CH3_SmallLeak); + this.uiGroupBox2.Controls.Add(this.lb_CH3BigLeak); + this.uiGroupBox2.Controls.Add(this.lb_CH3_TestPressure); + this.uiGroupBox2.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiGroupBox2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox2.Location = new System.Drawing.Point(3, 365); + this.uiGroupBox2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox2.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox2.Name = "uiGroupBox2"; + this.uiGroupBox2.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox2.Size = new System.Drawing.Size(685, 262); + this.uiGroupBox2.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox2.TabIndex = 452; + this.uiGroupBox2.Text = "CH3工位"; + this.uiGroupBox2.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // tb_CH3Code + // + this.tb_CH3Code.ButtonSymbol = 61761; + this.tb_CH3Code.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_CH3Code.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_CH3Code.Font = new System.Drawing.Font("微软雅黑", 15F); + this.tb_CH3Code.Location = new System.Drawing.Point(87, 95); + this.tb_CH3Code.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_CH3Code.Maximum = 2147483647D; + this.tb_CH3Code.Minimum = -2147483648D; + this.tb_CH3Code.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_CH3Code.Multiline = true; + this.tb_CH3Code.Name = "tb_CH3Code"; + this.tb_CH3Code.Size = new System.Drawing.Size(389, 34); + this.tb_CH3Code.Style = Sunny.UI.UIStyle.Custom; + this.tb_CH3Code.TabIndex = 431; + this.tb_CH3Code.TabStop = false; + this.tb_CH3Code.TextAlignment = System.Drawing.ContentAlignment.TopLeft; + this.tb_CH3Code.TextChanged += new System.EventHandler(this.lb_CH3Code_TextChanged); + this.tb_CH3Code.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.tb_CHxCode_KeyPress); + // + // lb_CH3_nowPressureUnit + // + this.lb_CH3_nowPressureUnit.AutoSize = true; + this.lb_CH3_nowPressureUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH3_nowPressureUnit.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH3_nowPressureUnit.Location = new System.Drawing.Point(560, 58); + this.lb_CH3_nowPressureUnit.Name = "lb_CH3_nowPressureUnit"; + this.lb_CH3_nowPressureUnit.Size = new System.Drawing.Size(17, 9); + this.lb_CH3_nowPressureUnit.TabIndex = 451; + this.lb_CH3_nowPressureUnit.Text = "Pa"; + this.lb_CH3_nowPressureUnit.Visible = false; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.BackColor = System.Drawing.Color.Transparent; + this.label2.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label2.Location = new System.Drawing.Point(523, 58); + this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(23, 9); + this.label2.TabIndex = 449; + this.label2.Text = "压力"; + this.label2.Visible = false; + // + // lb_CH3nowPressure + // + this.lb_CH3nowPressure.AutoSize = true; + this.lb_CH3nowPressure.BackColor = System.Drawing.Color.Transparent; + this.lb_CH3nowPressure.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH3nowPressure.Location = new System.Drawing.Point(512, 70); + this.lb_CH3nowPressure.Name = "lb_CH3nowPressure"; + this.lb_CH3nowPressure.Size = new System.Drawing.Size(17, 9); + this.lb_CH3nowPressure.TabIndex = 450; + this.lb_CH3nowPressure.Text = "##"; + this.lb_CH3nowPressure.Visible = false; + // + // bt_code3clear + // + this.bt_code3clear.Location = new System.Drawing.Point(10, 31); + this.bt_code3clear.Name = "bt_code3clear"; + this.bt_code3clear.Size = new System.Drawing.Size(58, 50); + this.bt_code3clear.TabIndex = 448; + this.bt_code3clear.Text = "清除条码"; + this.bt_code3clear.UseVisualStyleBackColor = true; + this.bt_code3clear.Click += new System.EventHandler(this.bt_code3clear_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.BackColor = System.Drawing.Color.Transparent; + this.label5.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.label5.Location = new System.Drawing.Point(526, 275); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(75, 16); + this.label5.TabIndex = 447; + this.label5.Text = "正压模式"; + this.label5.Visible = false; + // + // pictureBox1 + // + this.pictureBox1.Location = new System.Drawing.Point(609, 264); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(43, 27); + this.pictureBox1.TabIndex = 446; + this.pictureBox1.TabStop = false; + this.pictureBox1.Visible = false; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.BackColor = System.Drawing.Color.Transparent; + this.label11.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.label11.Location = new System.Drawing.Point(396, 275); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(75, 16); + this.label11.TabIndex = 445; + this.label11.Text = "负压模式"; + this.label11.Visible = false; + // + // pictureBox6 + // + this.pictureBox6.Location = new System.Drawing.Point(477, 264); + this.pictureBox6.Name = "pictureBox6"; + this.pictureBox6.Size = new System.Drawing.Size(43, 27); + this.pictureBox6.TabIndex = 444; + this.pictureBox6.TabStop = false; + this.pictureBox6.Visible = false; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.BackColor = System.Drawing.Color.Transparent; + this.label12.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.label12.Location = new System.Drawing.Point(201, 275); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(75, 16); + this.label12.TabIndex = 443; + this.label12.Text = "扫码完成"; + // + // pictureBox7 + // + this.pictureBox7.Location = new System.Drawing.Point(302, 268); + this.pictureBox7.Name = "pictureBox7"; + this.pictureBox7.Size = new System.Drawing.Size(43, 27); + this.pictureBox7.TabIndex = 442; + this.pictureBox7.TabStop = false; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.BackColor = System.Drawing.Color.Transparent; + this.label13.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.label13.Location = new System.Drawing.Point(20, 275); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(75, 16); + this.label13.TabIndex = 441; + this.label13.Text = "开始扫码"; + // + // pictureBox8 + // + this.pictureBox8.Location = new System.Drawing.Point(123, 268); + this.pictureBox8.Name = "pictureBox8"; + this.pictureBox8.Size = new System.Drawing.Size(43, 27); + this.pictureBox8.TabIndex = 440; + this.pictureBox8.TabStop = false; + // + // lb_CH3MES_INstatus + // + this.lb_CH3MES_INstatus.AutoSize = true; + this.lb_CH3MES_INstatus.BackColor = System.Drawing.Color.Transparent; + this.lb_CH3MES_INstatus.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH3MES_INstatus.Location = new System.Drawing.Point(317, 28); + this.lb_CH3MES_INstatus.Name = "lb_CH3MES_INstatus"; + this.lb_CH3MES_INstatus.Size = new System.Drawing.Size(29, 20); + this.lb_CH3MES_INstatus.TabIndex = 436; + this.lb_CH3MES_INstatus.Text = "##"; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.BackColor = System.Drawing.Color.Transparent; + this.label19.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label19.Location = new System.Drawing.Point(174, 28); + this.label19.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(139, 20); + this.label19.TabIndex = 437; + this.label19.Text = "MES入站状态:"; + // + // tb_CH3codeLeng + // + this.tb_CH3codeLeng.Font = new System.Drawing.Font("微软雅黑", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_CH3codeLeng.Location = new System.Drawing.Point(85, 46); + this.tb_CH3codeLeng.Name = "tb_CH3codeLeng"; + this.tb_CH3codeLeng.Size = new System.Drawing.Size(59, 21); + this.tb_CH3codeLeng.TabIndex = 435; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.BackColor = System.Drawing.Color.Transparent; + this.label20.Font = new System.Drawing.Font("宋体", 12F); + this.label20.Location = new System.Drawing.Point(79, 27); + this.label20.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(87, 16); + this.label20.TabIndex = 434; + this.label20.Text = "条码长度:"; + // + // lb_CH3MES_OUTstatus + // + this.lb_CH3MES_OUTstatus.AutoSize = true; + this.lb_CH3MES_OUTstatus.BackColor = System.Drawing.Color.Transparent; + this.lb_CH3MES_OUTstatus.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH3MES_OUTstatus.Location = new System.Drawing.Point(558, 28); + this.lb_CH3MES_OUTstatus.Name = "lb_CH3MES_OUTstatus"; + this.lb_CH3MES_OUTstatus.Size = new System.Drawing.Size(29, 20); + this.lb_CH3MES_OUTstatus.TabIndex = 430; + this.lb_CH3MES_OUTstatus.Text = "##"; + // + // label23 + // + this.label23.AutoSize = true; + this.label23.BackColor = System.Drawing.Color.Transparent; + this.label23.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label23.Location = new System.Drawing.Point(414, 28); + this.label23.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(139, 20); + this.label23.TabIndex = 431; + this.label23.Text = "MES出站状态:"; + // + // lb_CH3_SmallLeakUnit + // + this.lb_CH3_SmallLeakUnit.AutoSize = true; + this.lb_CH3_SmallLeakUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH3_SmallLeakUnit.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.lb_CH3_SmallLeakUnit.Location = new System.Drawing.Point(379, 155); + this.lb_CH3_SmallLeakUnit.Name = "lb_CH3_SmallLeakUnit"; + this.lb_CH3_SmallLeakUnit.Size = new System.Drawing.Size(25, 16); + this.lb_CH3_SmallLeakUnit.TabIndex = 423; + this.lb_CH3_SmallLeakUnit.Text = "Pa"; + // + // lb_CH3BigLeakUnit + // + this.lb_CH3BigLeakUnit.AutoSize = true; + this.lb_CH3BigLeakUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH3BigLeakUnit.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH3BigLeakUnit.Location = new System.Drawing.Point(654, 58); + this.lb_CH3BigLeakUnit.Name = "lb_CH3BigLeakUnit"; + this.lb_CH3BigLeakUnit.Size = new System.Drawing.Size(17, 9); + this.lb_CH3BigLeakUnit.TabIndex = 421; + this.lb_CH3BigLeakUnit.Text = "Pa"; + this.lb_CH3BigLeakUnit.Visible = false; + // + // lb_CH3_PressureUnit + // + this.lb_CH3_PressureUnit.AutoSize = true; + this.lb_CH3_PressureUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH3_PressureUnit.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.lb_CH3_PressureUnit.Location = new System.Drawing.Point(230, 155); + this.lb_CH3_PressureUnit.Name = "lb_CH3_PressureUnit"; + this.lb_CH3_PressureUnit.Size = new System.Drawing.Size(34, 16); + this.lb_CH3_PressureUnit.TabIndex = 419; + this.lb_CH3_PressureUnit.Text = "Kpa"; + // + // label27 + // + this.label27.AutoSize = true; + this.label27.BackColor = System.Drawing.Color.Transparent; + this.label27.Font = new System.Drawing.Font("宋体", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label27.Location = new System.Drawing.Point(3, 95); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(58, 24); + this.label27.TabIndex = 427; + this.label27.Text = "条码"; + // + // lb_CH3_Result + // + this.lb_CH3_Result.AutoSize = true; + this.lb_CH3_Result.BackColor = System.Drawing.Color.Transparent; + this.lb_CH3_Result.Font = new System.Drawing.Font("宋体", 100F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH3_Result.ForeColor = System.Drawing.Color.Red; + this.lb_CH3_Result.Location = new System.Drawing.Point(502, 115); + this.lb_CH3_Result.Name = "lb_CH3_Result"; + this.lb_CH3_Result.Size = new System.Drawing.Size(191, 134); + this.lb_CH3_Result.TabIndex = 28; + this.lb_CH3_Result.Text = "NG"; + // + // lb_CH3_Status + // + this.lb_CH3_Status.AutoSize = true; + this.lb_CH3_Status.BackColor = System.Drawing.Color.Transparent; + this.lb_CH3_Status.Font = new System.Drawing.Font("宋体", 25F); + this.lb_CH3_Status.Location = new System.Drawing.Point(412, 207); + this.lb_CH3_Status.Name = "lb_CH3_Status"; + this.lb_CH3_Status.Size = new System.Drawing.Size(83, 34); + this.lb_CH3_Status.TabIndex = 28; + this.lb_CH3_Status.Text = "待机"; + // + // pb_CH3progressBar + // + this.pb_CH3progressBar.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pb_CH3progressBar.Location = new System.Drawing.Point(88, 211); + this.pb_CH3progressBar.MinimumSize = new System.Drawing.Size(70, 3); + this.pb_CH3progressBar.Name = "pb_CH3progressBar"; + this.pb_CH3progressBar.Size = new System.Drawing.Size(319, 29); + this.pb_CH3progressBar.Style = Sunny.UI.UIStyle.Custom; + this.pb_CH3progressBar.TabIndex = 28; + this.pb_CH3progressBar.Text = "uiProcessBar2"; + // + // label33 + // + this.label33.AutoSize = true; + this.label33.BackColor = System.Drawing.Color.Transparent; + this.label33.Font = new System.Drawing.Font("宋体", 12F); + this.label33.Location = new System.Drawing.Point(299, 154); + this.label33.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label33.Name = "label33"; + this.label33.Size = new System.Drawing.Size(55, 16); + this.label33.TabIndex = 401; + this.label33.Text = "泄漏量"; + // + // label35 + // + this.label35.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.label35.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label35.ForeColor = System.Drawing.Color.Black; + this.label35.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label35.Location = new System.Drawing.Point(4, 213); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(135, 27); + this.label35.TabIndex = 28; + this.label35.Text = "测试进度:"; + // + // label36 + // + this.label36.AutoSize = true; + this.label36.BackColor = System.Drawing.Color.Transparent; + this.label36.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label36.Location = new System.Drawing.Point(606, 58); + this.label36.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label36.Name = "label36"; + this.label36.Size = new System.Drawing.Size(41, 9); + this.label36.TabIndex = 405; + this.label36.Text = "平衡压差"; + this.label36.Visible = false; + // + // lb_CH3Communication_status + // + this.lb_CH3Communication_status.AutoSize = true; + this.lb_CH3Communication_status.BackColor = System.Drawing.Color.Transparent; + this.lb_CH3Communication_status.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.lb_CH3Communication_status.Location = new System.Drawing.Point(36, 182); + this.lb_CH3Communication_status.Name = "lb_CH3Communication_status"; + this.lb_CH3Communication_status.Size = new System.Drawing.Size(25, 16); + this.lb_CH3Communication_status.TabIndex = 29; + this.lb_CH3Communication_status.Text = "NG"; + // + // label38 + // + this.label38.AutoSize = true; + this.label38.BackColor = System.Drawing.Color.Transparent; + this.label38.Font = new System.Drawing.Font("宋体", 12F); + this.label38.Location = new System.Drawing.Point(129, 155); + this.label38.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label38.Name = "label38"; + this.label38.Size = new System.Drawing.Size(71, 16); + this.label38.TabIndex = 400; + this.label38.Text = "测试压力"; + // + // label40 + // + this.label40.AutoSize = true; + this.label40.BackColor = System.Drawing.Color.Transparent; + this.label40.Font = new System.Drawing.Font("宋体", 12F); + this.label40.Location = new System.Drawing.Point(13, 155); + this.label40.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label40.Name = "label40"; + this.label40.Size = new System.Drawing.Size(71, 16); + this.label40.TabIndex = 407; + this.label40.Text = "通讯状态"; + // + // lb_CH3_SmallLeak + // + this.lb_CH3_SmallLeak.AutoSize = true; + this.lb_CH3_SmallLeak.BackColor = System.Drawing.Color.Transparent; + this.lb_CH3_SmallLeak.Font = new System.Drawing.Font("宋体", 14F, System.Drawing.FontStyle.Bold); + this.lb_CH3_SmallLeak.Location = new System.Drawing.Point(298, 182); + this.lb_CH3_SmallLeak.Name = "lb_CH3_SmallLeak"; + this.lb_CH3_SmallLeak.Size = new System.Drawing.Size(31, 19); + this.lb_CH3_SmallLeak.TabIndex = 412; + this.lb_CH3_SmallLeak.Text = "##"; + // + // lb_CH3BigLeak + // + this.lb_CH3BigLeak.AutoSize = true; + this.lb_CH3BigLeak.BackColor = System.Drawing.Color.Transparent; + this.lb_CH3BigLeak.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH3BigLeak.Location = new System.Drawing.Point(606, 70); + this.lb_CH3BigLeak.Name = "lb_CH3BigLeak"; + this.lb_CH3BigLeak.Size = new System.Drawing.Size(17, 9); + this.lb_CH3BigLeak.TabIndex = 411; + this.lb_CH3BigLeak.Text = "##"; + this.lb_CH3BigLeak.Visible = false; + // + // lb_CH3_TestPressure + // + this.lb_CH3_TestPressure.AutoSize = true; + this.lb_CH3_TestPressure.BackColor = System.Drawing.Color.Transparent; + this.lb_CH3_TestPressure.Font = new System.Drawing.Font("宋体", 14F, System.Drawing.FontStyle.Bold); + this.lb_CH3_TestPressure.Location = new System.Drawing.Point(156, 182); + this.lb_CH3_TestPressure.Name = "lb_CH3_TestPressure"; + this.lb_CH3_TestPressure.Size = new System.Drawing.Size(31, 19); + this.lb_CH3_TestPressure.TabIndex = 28; + this.lb_CH3_TestPressure.Text = "##"; + // + // uiGroupBox3 + // + this.uiGroupBox3.Controls.Add(this.tb_CH4Code); + this.uiGroupBox3.Controls.Add(this.lb_CH4_nowPressureUnit); + this.uiGroupBox3.Controls.Add(this.label47); + this.uiGroupBox3.Controls.Add(this.lb_CH4nowPressure); + this.uiGroupBox3.Controls.Add(this.bt_code4clear); + this.uiGroupBox3.Controls.Add(this.lb_CH4MES_INstatus); + this.uiGroupBox3.Controls.Add(this.label55); + this.uiGroupBox3.Controls.Add(this.tb_CH4codeLeng); + this.uiGroupBox3.Controls.Add(this.pb_CH4progressBar); + this.uiGroupBox3.Controls.Add(this.label56); + this.uiGroupBox3.Controls.Add(this.lb_CH4MES_OUTstatus); + this.uiGroupBox3.Controls.Add(this.label58); + this.uiGroupBox3.Controls.Add(this.lb_CH4_SmallLeakUnit); + this.uiGroupBox3.Controls.Add(this.lb_CH4BigLeakUnit); + this.uiGroupBox3.Controls.Add(this.lb_CH4_PressureUnit); + this.uiGroupBox3.Controls.Add(this.label62); + this.uiGroupBox3.Controls.Add(this.lb_CH4_Result); + this.uiGroupBox3.Controls.Add(this.lb_CH4_Status); + this.uiGroupBox3.Controls.Add(this.label65); + this.uiGroupBox3.Controls.Add(this.label66); + this.uiGroupBox3.Controls.Add(this.label67); + this.uiGroupBox3.Controls.Add(this.lb_CH4Communication_status); + this.uiGroupBox3.Controls.Add(this.label70); + this.uiGroupBox3.Controls.Add(this.label71); + this.uiGroupBox3.Controls.Add(this.lb_CH4_SmallLeak); + this.uiGroupBox3.Controls.Add(this.lb_CH4BigLeak); + this.uiGroupBox3.Controls.Add(this.lb_CH4_TestPressure); + this.uiGroupBox3.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiGroupBox3.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox3.Location = new System.Drawing.Point(690, 365); + this.uiGroupBox3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox3.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox3.Name = "uiGroupBox3"; + this.uiGroupBox3.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox3.Size = new System.Drawing.Size(703, 262); + this.uiGroupBox3.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox3.TabIndex = 464; + this.uiGroupBox3.Text = "CH4工位"; + this.uiGroupBox3.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // tb_CH4Code + // + this.tb_CH4Code.ButtonSymbol = 61761; + this.tb_CH4Code.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tb_CH4Code.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.tb_CH4Code.Font = new System.Drawing.Font("微软雅黑", 15F); + this.tb_CH4Code.Location = new System.Drawing.Point(91, 95); + this.tb_CH4Code.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tb_CH4Code.Maximum = 2147483647D; + this.tb_CH4Code.Minimum = -2147483648D; + this.tb_CH4Code.MinimumSize = new System.Drawing.Size(1, 16); + this.tb_CH4Code.Multiline = true; + this.tb_CH4Code.Name = "tb_CH4Code"; + this.tb_CH4Code.Size = new System.Drawing.Size(389, 34); + this.tb_CH4Code.Style = Sunny.UI.UIStyle.Custom; + this.tb_CH4Code.TabIndex = 431; + this.tb_CH4Code.TabStop = false; + this.tb_CH4Code.TextAlignment = System.Drawing.ContentAlignment.TopLeft; + this.tb_CH4Code.TextChanged += new System.EventHandler(this.lb_CH4Code_TextChanged); + this.tb_CH4Code.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.tb_CHxCode_KeyPress); + // + // lb_CH4_nowPressureUnit + // + this.lb_CH4_nowPressureUnit.AutoSize = true; + this.lb_CH4_nowPressureUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH4_nowPressureUnit.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH4_nowPressureUnit.Location = new System.Drawing.Point(575, 60); + this.lb_CH4_nowPressureUnit.Name = "lb_CH4_nowPressureUnit"; + this.lb_CH4_nowPressureUnit.Size = new System.Drawing.Size(17, 9); + this.lb_CH4_nowPressureUnit.TabIndex = 463; + this.lb_CH4_nowPressureUnit.Text = "Pa"; + this.lb_CH4_nowPressureUnit.Visible = false; + // + // label47 + // + this.label47.AutoSize = true; + this.label47.BackColor = System.Drawing.Color.Transparent; + this.label47.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label47.Location = new System.Drawing.Point(531, 60); + this.label47.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label47.Name = "label47"; + this.label47.Size = new System.Drawing.Size(23, 9); + this.label47.TabIndex = 461; + this.label47.Text = "压力"; + this.label47.Visible = false; + // + // lb_CH4nowPressure + // + this.lb_CH4nowPressure.AutoSize = true; + this.lb_CH4nowPressure.BackColor = System.Drawing.Color.Transparent; + this.lb_CH4nowPressure.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH4nowPressure.Location = new System.Drawing.Point(524, 72); + this.lb_CH4nowPressure.Name = "lb_CH4nowPressure"; + this.lb_CH4nowPressure.Size = new System.Drawing.Size(17, 9); + this.lb_CH4nowPressure.TabIndex = 462; + this.lb_CH4nowPressure.Text = "##"; + this.lb_CH4nowPressure.Visible = false; + // + // bt_code4clear + // + this.bt_code4clear.Location = new System.Drawing.Point(9, 30); + this.bt_code4clear.Name = "bt_code4clear"; + this.bt_code4clear.Size = new System.Drawing.Size(61, 51); + this.bt_code4clear.TabIndex = 460; + this.bt_code4clear.Text = "清除条码"; + this.bt_code4clear.UseVisualStyleBackColor = true; + this.bt_code4clear.Click += new System.EventHandler(this.bt_code4clear_Click); + // + // lb_CH4MES_INstatus + // + this.lb_CH4MES_INstatus.AutoSize = true; + this.lb_CH4MES_INstatus.BackColor = System.Drawing.Color.Transparent; + this.lb_CH4MES_INstatus.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH4MES_INstatus.Location = new System.Drawing.Point(334, 27); + this.lb_CH4MES_INstatus.Name = "lb_CH4MES_INstatus"; + this.lb_CH4MES_INstatus.Size = new System.Drawing.Size(29, 20); + this.lb_CH4MES_INstatus.TabIndex = 458; + this.lb_CH4MES_INstatus.Text = "##"; + // + // label55 + // + this.label55.AutoSize = true; + this.label55.BackColor = System.Drawing.Color.Transparent; + this.label55.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label55.Location = new System.Drawing.Point(191, 28); + this.label55.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label55.Name = "label55"; + this.label55.Size = new System.Drawing.Size(139, 20); + this.label55.TabIndex = 459; + this.label55.Text = "MES入站状态:"; + // + // tb_CH4codeLeng + // + this.tb_CH4codeLeng.Font = new System.Drawing.Font("微软雅黑", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_CH4codeLeng.Location = new System.Drawing.Point(91, 43); + this.tb_CH4codeLeng.Name = "tb_CH4codeLeng"; + this.tb_CH4codeLeng.Size = new System.Drawing.Size(62, 21); + this.tb_CH4codeLeng.TabIndex = 437; + // + // pb_CH4progressBar + // + this.pb_CH4progressBar.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pb_CH4progressBar.Location = new System.Drawing.Point(94, 212); + this.pb_CH4progressBar.MinimumSize = new System.Drawing.Size(70, 3); + this.pb_CH4progressBar.Name = "pb_CH4progressBar"; + this.pb_CH4progressBar.Size = new System.Drawing.Size(292, 29); + this.pb_CH4progressBar.Style = Sunny.UI.UIStyle.Custom; + this.pb_CH4progressBar.TabIndex = 28; + this.pb_CH4progressBar.Text = "uiProcessBar1"; + // + // label56 + // + this.label56.AutoSize = true; + this.label56.BackColor = System.Drawing.Color.Transparent; + this.label56.Font = new System.Drawing.Font("宋体", 12F); + this.label56.Location = new System.Drawing.Point(86, 24); + this.label56.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label56.Name = "label56"; + this.label56.Size = new System.Drawing.Size(87, 16); + this.label56.TabIndex = 436; + this.label56.Text = "条码长度:"; + // + // lb_CH4MES_OUTstatus + // + this.lb_CH4MES_OUTstatus.AutoSize = true; + this.lb_CH4MES_OUTstatus.BackColor = System.Drawing.Color.Transparent; + this.lb_CH4MES_OUTstatus.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH4MES_OUTstatus.Location = new System.Drawing.Point(573, 27); + this.lb_CH4MES_OUTstatus.Name = "lb_CH4MES_OUTstatus"; + this.lb_CH4MES_OUTstatus.Size = new System.Drawing.Size(29, 20); + this.lb_CH4MES_OUTstatus.TabIndex = 456; + this.lb_CH4MES_OUTstatus.Text = "##"; + // + // label58 + // + this.label58.AutoSize = true; + this.label58.BackColor = System.Drawing.Color.Transparent; + this.label58.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label58.Location = new System.Drawing.Point(429, 27); + this.label58.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label58.Name = "label58"; + this.label58.Size = new System.Drawing.Size(139, 20); + this.label58.TabIndex = 457; + this.label58.Text = "MES出站状态:"; + // + // lb_CH4_SmallLeakUnit + // + this.lb_CH4_SmallLeakUnit.AutoSize = true; + this.lb_CH4_SmallLeakUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH4_SmallLeakUnit.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.lb_CH4_SmallLeakUnit.Location = new System.Drawing.Point(354, 151); + this.lb_CH4_SmallLeakUnit.Name = "lb_CH4_SmallLeakUnit"; + this.lb_CH4_SmallLeakUnit.Size = new System.Drawing.Size(25, 16); + this.lb_CH4_SmallLeakUnit.TabIndex = 423; + this.lb_CH4_SmallLeakUnit.Text = "Pa"; + // + // lb_CH4BigLeakUnit + // + this.lb_CH4BigLeakUnit.AutoSize = true; + this.lb_CH4BigLeakUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH4BigLeakUnit.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH4BigLeakUnit.Location = new System.Drawing.Point(667, 60); + this.lb_CH4BigLeakUnit.Name = "lb_CH4BigLeakUnit"; + this.lb_CH4BigLeakUnit.Size = new System.Drawing.Size(17, 9); + this.lb_CH4BigLeakUnit.TabIndex = 421; + this.lb_CH4BigLeakUnit.Text = "Pa"; + this.lb_CH4BigLeakUnit.Visible = false; + // + // lb_CH4_PressureUnit + // + this.lb_CH4_PressureUnit.AutoSize = true; + this.lb_CH4_PressureUnit.BackColor = System.Drawing.Color.Transparent; + this.lb_CH4_PressureUnit.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.lb_CH4_PressureUnit.Location = new System.Drawing.Point(202, 151); + this.lb_CH4_PressureUnit.Name = "lb_CH4_PressureUnit"; + this.lb_CH4_PressureUnit.Size = new System.Drawing.Size(34, 16); + this.lb_CH4_PressureUnit.TabIndex = 419; + this.lb_CH4_PressureUnit.Text = "Kpa"; + // + // label62 + // + this.label62.AutoSize = true; + this.label62.BackColor = System.Drawing.Color.Transparent; + this.label62.Font = new System.Drawing.Font("宋体", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label62.Location = new System.Drawing.Point(3, 95); + this.label62.Name = "label62"; + this.label62.Size = new System.Drawing.Size(58, 24); + this.label62.TabIndex = 427; + this.label62.Text = "条码"; + // + // lb_CH4_Result + // + this.lb_CH4_Result.AutoSize = true; + this.lb_CH4_Result.BackColor = System.Drawing.Color.Transparent; + this.lb_CH4_Result.Font = new System.Drawing.Font("宋体", 100F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH4_Result.ForeColor = System.Drawing.Color.Red; + this.lb_CH4_Result.Location = new System.Drawing.Point(509, 116); + this.lb_CH4_Result.Name = "lb_CH4_Result"; + this.lb_CH4_Result.Size = new System.Drawing.Size(191, 134); + this.lb_CH4_Result.TabIndex = 28; + this.lb_CH4_Result.Text = "NG"; + // + // lb_CH4_Status + // + this.lb_CH4_Status.AutoSize = true; + this.lb_CH4_Status.BackColor = System.Drawing.Color.Transparent; + this.lb_CH4_Status.Font = new System.Drawing.Font("宋体", 25F); + this.lb_CH4_Status.Location = new System.Drawing.Point(390, 210); + this.lb_CH4_Status.Name = "lb_CH4_Status"; + this.lb_CH4_Status.Size = new System.Drawing.Size(83, 34); + this.lb_CH4_Status.TabIndex = 28; + this.lb_CH4_Status.Text = "待机"; + // + // label65 + // + this.label65.AutoSize = true; + this.label65.BackColor = System.Drawing.Color.Transparent; + this.label65.Font = new System.Drawing.Font("宋体", 12F); + this.label65.Location = new System.Drawing.Point(275, 152); + this.label65.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label65.Name = "label65"; + this.label65.Size = new System.Drawing.Size(55, 16); + this.label65.TabIndex = 401; + this.label65.Text = "泄漏量"; + // + // label66 + // + this.label66.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.label66.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label66.ForeColor = System.Drawing.Color.Black; + this.label66.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label66.Location = new System.Drawing.Point(5, 218); + this.label66.Name = "label66"; + this.label66.Size = new System.Drawing.Size(101, 27); + this.label66.TabIndex = 28; + this.label66.Text = "测试进度:"; + // + // label67 + // + this.label67.AutoSize = true; + this.label67.BackColor = System.Drawing.Color.Transparent; + this.label67.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label67.Location = new System.Drawing.Point(616, 60); + this.label67.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label67.Name = "label67"; + this.label67.Size = new System.Drawing.Size(41, 9); + this.label67.TabIndex = 405; + this.label67.Text = "平衡压差"; + this.label67.Visible = false; + // + // lb_CH4Communication_status + // + this.lb_CH4Communication_status.AutoSize = true; + this.lb_CH4Communication_status.BackColor = System.Drawing.Color.Transparent; + this.lb_CH4Communication_status.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.lb_CH4Communication_status.Location = new System.Drawing.Point(29, 178); + this.lb_CH4Communication_status.Name = "lb_CH4Communication_status"; + this.lb_CH4Communication_status.Size = new System.Drawing.Size(25, 16); + this.lb_CH4Communication_status.TabIndex = 29; + this.lb_CH4Communication_status.Text = "NG"; + // + // label70 + // + this.label70.AutoSize = true; + this.label70.BackColor = System.Drawing.Color.Transparent; + this.label70.Font = new System.Drawing.Font("宋体", 12F); + this.label70.Location = new System.Drawing.Point(102, 151); + this.label70.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label70.Name = "label70"; + this.label70.Size = new System.Drawing.Size(71, 16); + this.label70.TabIndex = 400; + this.label70.Text = "测试压力"; + // + // label71 + // + this.label71.AutoSize = true; + this.label71.BackColor = System.Drawing.Color.Transparent; + this.label71.Font = new System.Drawing.Font("宋体", 12F); + this.label71.Location = new System.Drawing.Point(6, 151); + this.label71.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label71.Name = "label71"; + this.label71.Size = new System.Drawing.Size(71, 16); + this.label71.TabIndex = 407; + this.label71.Text = "通讯状态"; + // + // lb_CH4_SmallLeak + // + this.lb_CH4_SmallLeak.AutoSize = true; + this.lb_CH4_SmallLeak.BackColor = System.Drawing.Color.Transparent; + this.lb_CH4_SmallLeak.Font = new System.Drawing.Font("宋体", 14F, System.Drawing.FontStyle.Bold); + this.lb_CH4_SmallLeak.Location = new System.Drawing.Point(275, 179); + this.lb_CH4_SmallLeak.Name = "lb_CH4_SmallLeak"; + this.lb_CH4_SmallLeak.Size = new System.Drawing.Size(31, 19); + this.lb_CH4_SmallLeak.TabIndex = 412; + this.lb_CH4_SmallLeak.Text = "##"; + // + // lb_CH4BigLeak + // + this.lb_CH4BigLeak.AutoSize = true; + this.lb_CH4BigLeak.BackColor = System.Drawing.Color.Transparent; + this.lb_CH4BigLeak.Font = new System.Drawing.Font("宋体", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb_CH4BigLeak.Location = new System.Drawing.Point(616, 72); + this.lb_CH4BigLeak.Name = "lb_CH4BigLeak"; + this.lb_CH4BigLeak.Size = new System.Drawing.Size(17, 9); + this.lb_CH4BigLeak.TabIndex = 411; + this.lb_CH4BigLeak.Text = "##"; + this.lb_CH4BigLeak.Visible = false; + // + // lb_CH4_TestPressure + // + this.lb_CH4_TestPressure.AutoSize = true; + this.lb_CH4_TestPressure.BackColor = System.Drawing.Color.Transparent; + this.lb_CH4_TestPressure.Font = new System.Drawing.Font("宋体", 14F, System.Drawing.FontStyle.Bold); + this.lb_CH4_TestPressure.Location = new System.Drawing.Point(133, 178); + this.lb_CH4_TestPressure.Name = "lb_CH4_TestPressure"; + this.lb_CH4_TestPressure.Size = new System.Drawing.Size(31, 19); + this.lb_CH4_TestPressure.TabIndex = 28; + this.lb_CH4_TestPressure.Text = "##"; + // + // uiGroupBox4 + // + this.uiGroupBox4.Controls.Add(this.lb_OKRate); + this.uiGroupBox4.Controls.Add(this.label41); + this.uiGroupBox4.Controls.Add(this.lb_NGnumber); + this.uiGroupBox4.Controls.Add(this.label30); + this.uiGroupBox4.Controls.Add(this.lb_OKnumber); + this.uiGroupBox4.Controls.Add(this.label26); + this.uiGroupBox4.Controls.Add(this.lb_Total); + this.uiGroupBox4.Controls.Add(this.label1); + this.uiGroupBox4.Controls.Add(this.label17); + this.uiGroupBox4.Controls.Add(this.pictureBox9); + this.uiGroupBox4.Controls.Add(this.label21); + this.uiGroupBox4.Controls.Add(this.pictureBox10); + this.uiGroupBox4.Controls.Add(this.label24); + this.uiGroupBox4.Controls.Add(this.pictureBox11); + this.uiGroupBox4.Controls.Add(this.label25); + this.uiGroupBox4.Controls.Add(this.pictureBox12); + this.uiGroupBox4.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiGroupBox4.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox4.Location = new System.Drawing.Point(2, 629); + this.uiGroupBox4.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox4.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox4.Name = "uiGroupBox4"; + this.uiGroupBox4.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox4.Size = new System.Drawing.Size(1391, 69); + this.uiGroupBox4.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox4.TabIndex = 452; + this.uiGroupBox4.Text = "产能"; + this.uiGroupBox4.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // lb_OKRate + // + this.lb_OKRate.AutoSize = true; + this.lb_OKRate.BackColor = System.Drawing.Color.Transparent; + this.lb_OKRate.Font = new System.Drawing.Font("宋体", 25F); + this.lb_OKRate.Location = new System.Drawing.Point(1218, 27); + this.lb_OKRate.Name = "lb_OKRate"; + this.lb_OKRate.Size = new System.Drawing.Size(49, 34); + this.lb_OKRate.TabIndex = 471; + this.lb_OKRate.Text = "##"; + // + // label41 + // + this.label41.AutoSize = true; + this.label41.BackColor = System.Drawing.Color.Transparent; + this.label41.Font = new System.Drawing.Font("宋体", 25F); + this.label41.Location = new System.Drawing.Point(1078, 27); + this.label41.Name = "label41"; + this.label41.Size = new System.Drawing.Size(134, 34); + this.label41.TabIndex = 470; + this.label41.Text = "合格率:"; + // + // lb_NGnumber + // + this.lb_NGnumber.AutoSize = true; + this.lb_NGnumber.BackColor = System.Drawing.Color.Transparent; + this.lb_NGnumber.Font = new System.Drawing.Font("宋体", 25F); + this.lb_NGnumber.Location = new System.Drawing.Point(901, 27); + this.lb_NGnumber.Name = "lb_NGnumber"; + this.lb_NGnumber.Size = new System.Drawing.Size(49, 34); + this.lb_NGnumber.TabIndex = 469; + this.lb_NGnumber.Text = "##"; + // + // label30 + // + this.label30.AutoSize = true; + this.label30.BackColor = System.Drawing.Color.Transparent; + this.label30.Font = new System.Drawing.Font("宋体", 25F); + this.label30.Location = new System.Drawing.Point(727, 27); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(168, 34); + this.label30.TabIndex = 468; + this.label30.Text = "不合格数:"; + // + // lb_OKnumber + // + this.lb_OKnumber.AutoSize = true; + this.lb_OKnumber.BackColor = System.Drawing.Color.Transparent; + this.lb_OKnumber.Font = new System.Drawing.Font("宋体", 25F); + this.lb_OKnumber.Location = new System.Drawing.Point(552, 27); + this.lb_OKnumber.Name = "lb_OKnumber"; + this.lb_OKnumber.Size = new System.Drawing.Size(49, 34); + this.lb_OKnumber.TabIndex = 467; + this.lb_OKnumber.Text = "##"; + // + // label26 + // + this.label26.AutoSize = true; + this.label26.BackColor = System.Drawing.Color.Transparent; + this.label26.Font = new System.Drawing.Font("宋体", 25F); + this.label26.Location = new System.Drawing.Point(412, 27); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(134, 34); + this.label26.TabIndex = 466; + this.label26.Text = "合格数:"; + // + // lb_Total + // + this.lb_Total.AutoSize = true; + this.lb_Total.BackColor = System.Drawing.Color.Transparent; + this.lb_Total.Font = new System.Drawing.Font("宋体", 25F); + this.lb_Total.Location = new System.Drawing.Point(207, 27); + this.lb_Total.Name = "lb_Total"; + this.lb_Total.Size = new System.Drawing.Size(49, 34); + this.lb_Total.TabIndex = 465; + this.lb_Total.Text = "##"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.Color.Transparent; + this.label1.Font = new System.Drawing.Font("宋体", 25F); + this.label1.Location = new System.Drawing.Point(67, 27); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(134, 34); + this.label1.TabIndex = 464; + this.label1.Text = "生产数:"; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.BackColor = System.Drawing.Color.Transparent; + this.label17.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.label17.Location = new System.Drawing.Point(526, 275); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(75, 16); + this.label17.TabIndex = 447; + this.label17.Text = "正压模式"; + this.label17.Visible = false; + // + // pictureBox9 + // + this.pictureBox9.Location = new System.Drawing.Point(609, 264); + this.pictureBox9.Name = "pictureBox9"; + this.pictureBox9.Size = new System.Drawing.Size(43, 27); + this.pictureBox9.TabIndex = 446; + this.pictureBox9.TabStop = false; + this.pictureBox9.Visible = false; + // + // label21 + // + this.label21.AutoSize = true; + this.label21.BackColor = System.Drawing.Color.Transparent; + this.label21.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.label21.Location = new System.Drawing.Point(396, 275); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(75, 16); + this.label21.TabIndex = 445; + this.label21.Text = "负压模式"; + this.label21.Visible = false; + // + // pictureBox10 + // + this.pictureBox10.Location = new System.Drawing.Point(477, 264); + this.pictureBox10.Name = "pictureBox10"; + this.pictureBox10.Size = new System.Drawing.Size(43, 27); + this.pictureBox10.TabIndex = 444; + this.pictureBox10.TabStop = false; + this.pictureBox10.Visible = false; + // + // label24 + // + this.label24.AutoSize = true; + this.label24.BackColor = System.Drawing.Color.Transparent; + this.label24.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.label24.Location = new System.Drawing.Point(201, 275); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(75, 16); + this.label24.TabIndex = 443; + this.label24.Text = "扫码完成"; + // + // pictureBox11 + // + this.pictureBox11.Location = new System.Drawing.Point(302, 268); + this.pictureBox11.Name = "pictureBox11"; + this.pictureBox11.Size = new System.Drawing.Size(43, 27); + this.pictureBox11.TabIndex = 442; + this.pictureBox11.TabStop = false; + // + // label25 + // + this.label25.AutoSize = true; + this.label25.BackColor = System.Drawing.Color.Transparent; + this.label25.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold); + this.label25.Location = new System.Drawing.Point(20, 275); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(75, 16); + this.label25.TabIndex = 441; + this.label25.Text = "开始扫码"; + // + // pictureBox12 + // + this.pictureBox12.Location = new System.Drawing.Point(123, 268); + this.pictureBox12.Name = "pictureBox12"; + this.pictureBox12.Size = new System.Drawing.Size(43, 27); + this.pictureBox12.TabIndex = 440; + this.pictureBox12.TabStop = false; + // + // SerialPort_CH3Saoma + // + this.SerialPort_CH3Saoma.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.SerialPort_CH3Saoma_DataReceived); + // + // SerialPort_CH4Saoma + // + this.SerialPort_CH4Saoma.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.SerialPort_CH4Saoma_DataReceived); + // + // dataGridViewTextBoxColumn7 + // + this.dataGridViewTextBoxColumn7.FillWeight = 52.3284F; + this.dataGridViewTextBoxColumn7.HeaderText = "结果"; + this.dataGridViewTextBoxColumn7.MinimumWidth = 6; + this.dataGridViewTextBoxColumn7.Name = "dataGridViewTextBoxColumn7"; + this.dataGridViewTextBoxColumn7.ReadOnly = true; + // + // Column13 + // + this.Column13.FillWeight = 78.68018F; + this.Column13.HeaderText = "泄漏量"; + this.Column13.MinimumWidth = 6; + this.Column13.Name = "Column13"; + this.Column13.ReadOnly = true; + // + // Column10 + // + this.Column10.FillWeight = 83.17072F; + this.Column10.HeaderText = "测试压力"; + this.Column10.MinimumWidth = 6; + this.Column10.Name = "Column10"; + this.Column10.ReadOnly = true; + // + // Column9 + // + this.Column9.FillWeight = 186.1153F; + this.Column9.HeaderText = "条形码"; + this.Column9.MinimumWidth = 6; + this.Column9.Name = "Column9"; + this.Column9.ReadOnly = true; + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.FillWeight = 99.70528F; + this.dataGridViewTextBoxColumn1.HeaderText = "时间"; + this.dataGridViewTextBoxColumn1.MinimumWidth = 6; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + // + // DataGridView2 + // + dataGridViewCellStyle5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + dataGridViewCellStyle5.Font = new System.Drawing.Font("微软雅黑", 9F); + this.DataGridView2.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle5; + this.DataGridView2.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.DataGridView2.BackgroundColor = System.Drawing.Color.White; + this.DataGridView2.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle6.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle6.ForeColor = System.Drawing.Color.White; + dataGridViewCellStyle6.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.DataGridView2.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle6; + this.DataGridView2.ColumnHeadersHeight = 30; + this.DataGridView2.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.DataGridView2.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn1, + this.Column9, + this.Column10, + this.Column13, + this.dataGridViewTextBoxColumn7}); + dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle7.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle7.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(155)))), ((int)(((byte)(200)))), ((int)(((byte)(255))))); + dataGridViewCellStyle7.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.DataGridView2.DefaultCellStyle = dataGridViewCellStyle7; + this.DataGridView2.EnableHeadersVisualStyles = false; + this.DataGridView2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.DataGridView2.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + this.DataGridView2.Location = new System.Drawing.Point(691, 700); + this.DataGridView2.Name = "DataGridView2"; + this.DataGridView2.ReadOnly = true; + dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle8.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + dataGridViewCellStyle8.Font = new System.Drawing.Font("微软雅黑", 12F); + dataGridViewCellStyle8.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle8.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle8.SelectionForeColor = System.Drawing.Color.White; + dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.DataGridView2.RowHeadersDefaultCellStyle = dataGridViewCellStyle8; + this.DataGridView2.RowHeadersWidth = 51; + dataGridViewCellStyle9.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle9.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.DataGridView2.RowsDefaultCellStyle = dataGridViewCellStyle9; + this.DataGridView2.RowTemplate.Height = 23; + this.DataGridView2.SelectedIndex = -1; + this.DataGridView2.ShowGridLine = true; + this.DataGridView2.Size = new System.Drawing.Size(703, 244); + this.DataGridView2.StyleCustomMode = true; + this.DataGridView2.TabIndex = 439; + this.DataGridView2.RowPrePaint += new System.Windows.Forms.DataGridViewRowPrePaintEventHandler(this.DataGridView2_RowPrePaint); + // + // timer2 + // + this.timer2.Tick += new System.EventHandler(this.timer2_Tick); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(1397, 946); + this.Controls.Add(this.uiGroupBox4); + this.Controls.Add(this.uiGroupBox3); + this.Controls.Add(this.uiGroupBox2); + this.Controls.Add(this.tb_CH2MainMessage); + this.Controls.Add(this.tb_CH1MainMessage); + this.Controls.Add(this.DataGridView2); + this.Controls.Add(this.nb_MainMenu); + this.Controls.Add(this.DataGridView1); + this.Controls.Add(this.uiGroupBox5); + this.Controls.Add(this.CH2ReceiveText); + this.Controls.Add(this.PLCControl); + this.Controls.Add(this.CH1ReceiveText); + this.Controls.Add(this.uiGroupBox1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; + this.Name = "Form1"; + this.Text = " LL28-Z_V25111302(c-USB)"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); + this.Load += new System.EventHandler(this.Form1_Load); + this.uiGroupBox5.ResumeLayout(false); + this.uiGroupBox5.PerformLayout(); + this.nb_MainMenu.ResumeLayout(false); + this.nb_MainMenu.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pb_MESswitch)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pb_PLC_CommunicationStatus)).EndInit(); + this.uiGroupBox1.ResumeLayout(false); + this.uiGroupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.DataGridView1)).EndInit(); + this.uiGroupBox2.ResumeLayout(false); + this.uiGroupBox2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox8)).EndInit(); + this.uiGroupBox3.ResumeLayout(false); + this.uiGroupBox3.PerformLayout(); + this.uiGroupBox4.ResumeLayout(false); + this.uiGroupBox4.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox9)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox10)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox11)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox12)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.DataGridView2)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + public System.IO.Ports.SerialPort SerialPort_CH1Saoma; + private System.Windows.Forms.Label lb_CH2_SmallLeakUnit; + private System.Windows.Forms.Label lb_CH2BigLeakUnit; + private System.Windows.Forms.Label lb_CH2_PressureUnit; + private System.Windows.Forms.Label lb_CH2_Result; + private System.Windows.Forms.Label lb_CH2_Status; + private Sunny.UI.UIProcessBar pb_CH2progressBar; + private System.Windows.Forms.Label label45; + private System.Windows.Forms.Label lb_CH2_SmallLeak; + private System.Windows.Forms.Label lb_CH2BigLeak; + private System.Windows.Forms.Label lb_CH1_SmallLeakUnit; + private System.Windows.Forms.Label lb_CH1BigLeakUnit; + private System.Windows.Forms.Label lb_CH1_PressureUnit; + private System.Windows.Forms.Label lb_CH2_TestPressure; + private System.Windows.Forms.Label label69; + private System.Windows.Forms.Label CH1_2presstext; + private System.Windows.Forms.Label label75; + private System.Windows.Forms.Label label74; + private System.Windows.Forms.Label label103; + private Sunny.UI.UIGroupBox uiGroupBox5; + private System.Windows.Forms.Label lb_CH1_Result; + private System.Windows.Forms.Label lb_CH1_Status; + private System.Windows.Forms.Label label50; + private System.Windows.Forms.Label lb_CH1_SmallLeak; + private System.Windows.Forms.Label lb_CH1BigLeak; + private System.Windows.Forms.Label lb_CH1_TestPressure; + private System.Windows.Forms.Label label49; + private System.Windows.Forms.Label CH1_1presstext; + private System.Windows.Forms.Label label52; + private System.Windows.Forms.Label label51; + private System.Windows.Forms.Label label32; + private Sunny.UI.UINavBar nb_MainMenu; + private System.Windows.Forms.Label lb_NowTime; + private Sunny.UI.UIGroupBox uiGroupBox1; + private Sunny.UI.UIDataGridView DataGridView1; + private Sunny.UI.UIProcessBar pb_CH1progressBar; + private Sunny.UI.UIHeaderButton PLCControl; + private System.Windows.Forms.TextBox CH2ReceiveText; + private System.Windows.Forms.TextBox CH1ReceiveText; + public System.Windows.Forms.Label lb_CH2Communication_status; + public System.Windows.Forms.Label lb_CH1Communication_status; + private System.Windows.Forms.Label label4; + public System.Windows.Forms.Label lb_CH1MES_OUTstatus; + private System.Windows.Forms.Label label7; + public System.Windows.Forms.Label lb_CH2MES_OUTstatus; + private System.Windows.Forms.Label label8; + public System.Windows.Forms.PictureBox pb_MESswitch; + public System.Windows.Forms.Label lb_MESswitch; + private System.Windows.Forms.PictureBox pb_PLC_CommunicationStatus; + private System.Windows.Forms.Label label22; + public System.Windows.Forms.Timer timer1; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label9; + public System.Windows.Forms.Label lb_CH2MES_INstatus; + private System.Windows.Forms.Label label16; + public System.Windows.Forms.Label lb_CH1MES_INstatus; + private System.Windows.Forms.Label label14; + public System.Windows.Forms.TextBox tb_CH2codeLeng; + public System.Windows.Forms.TextBox tb_CH1codeLeng; + public System.Windows.Forms.Label lb_User; + public System.Windows.Forms.Label label34; + private System.Windows.Forms.PictureBox pictureBox5; + public System.Windows.Forms.Label label31; + private System.Windows.Forms.PictureBox pictureBox4; + public System.Windows.Forms.Label label28; + private System.Windows.Forms.PictureBox pictureBox3; + public System.Windows.Forms.Label label18; + private System.Windows.Forms.PictureBox pictureBox2; + private System.Windows.Forms.Button bt_code1clear; + private System.Windows.Forms.Button bt_code2clear; + private System.Windows.Forms.Timer timer_yiqiRun; + private System.Windows.Forms.Label lb_CH2_nowPressureUnit; + private System.Windows.Forms.Label label43; + private System.Windows.Forms.Label lb_CH2nowPressure; + private System.Windows.Forms.Label lb_CH1_nowPressureUnit; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label lb_CH1nowPressure; + private System.Windows.Forms.Button bt_test; + private Sunny.UI.UITextBox tb_CH1MainMessage; + public System.Windows.Forms.Timer UserClear; + private Sunny.UI.UITextBox tb_CH2MainMessage; + public System.IO.Ports.SerialPort SerialPort_CH2Saoma; + public System.Windows.Forms.Timer timer_ClearMainMessage; + public System.Windows.Forms.Timer timer_SaomaStart; + public System.Windows.Forms.Timer timer_nowTime; + private Sunny.UI.UIGroupBox uiGroupBox2; + private System.Windows.Forms.Label lb_CH3_nowPressureUnit; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label lb_CH3nowPressure; + private System.Windows.Forms.Button bt_code3clear; + public System.Windows.Forms.Label label5; + private System.Windows.Forms.PictureBox pictureBox1; + public System.Windows.Forms.Label label11; + private System.Windows.Forms.PictureBox pictureBox6; + public System.Windows.Forms.Label label12; + private System.Windows.Forms.PictureBox pictureBox7; + public System.Windows.Forms.Label label13; + private System.Windows.Forms.PictureBox pictureBox8; + public System.Windows.Forms.Label lb_CH3MES_INstatus; + private System.Windows.Forms.Label label19; + public System.Windows.Forms.TextBox tb_CH3codeLeng; + private System.Windows.Forms.Label label20; + public System.Windows.Forms.Label lb_CH3MES_OUTstatus; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label lb_CH3_SmallLeakUnit; + private System.Windows.Forms.Label lb_CH3BigLeakUnit; + private System.Windows.Forms.Label lb_CH3_PressureUnit; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.Label lb_CH3_Result; + private System.Windows.Forms.Label lb_CH3_Status; + private Sunny.UI.UIProcessBar pb_CH3progressBar; + private System.Windows.Forms.Label label33; + private System.Windows.Forms.Label label35; + private System.Windows.Forms.Label label36; + public System.Windows.Forms.Label lb_CH3Communication_status; + private System.Windows.Forms.Label label38; + private System.Windows.Forms.Label label40; + private System.Windows.Forms.Label lb_CH3_SmallLeak; + private System.Windows.Forms.Label lb_CH3BigLeak; + private System.Windows.Forms.Label lb_CH3_TestPressure; + private Sunny.UI.UIGroupBox uiGroupBox3; + private System.Windows.Forms.Label lb_CH4_nowPressureUnit; + private System.Windows.Forms.Label label47; + private System.Windows.Forms.Label lb_CH4nowPressure; + private System.Windows.Forms.Button bt_code4clear; + public System.Windows.Forms.Label lb_CH4MES_INstatus; + private System.Windows.Forms.Label label55; + public System.Windows.Forms.TextBox tb_CH4codeLeng; + private Sunny.UI.UIProcessBar pb_CH4progressBar; + private System.Windows.Forms.Label label56; + public System.Windows.Forms.Label lb_CH4MES_OUTstatus; + private System.Windows.Forms.Label label58; + private System.Windows.Forms.Label lb_CH4_SmallLeakUnit; + private System.Windows.Forms.Label lb_CH4BigLeakUnit; + private System.Windows.Forms.Label lb_CH4_PressureUnit; + private System.Windows.Forms.Label label62; + private System.Windows.Forms.Label lb_CH4_Result; + private System.Windows.Forms.Label lb_CH4_Status; + private System.Windows.Forms.Label label65; + private System.Windows.Forms.Label label66; + private System.Windows.Forms.Label label67; + public System.Windows.Forms.Label lb_CH4Communication_status; + private System.Windows.Forms.Label label70; + private System.Windows.Forms.Label label71; + private System.Windows.Forms.Label lb_CH4_SmallLeak; + private System.Windows.Forms.Label lb_CH4BigLeak; + private System.Windows.Forms.Label lb_CH4_TestPressure; + private System.Windows.Forms.DataGridViewTextBoxColumn Column1; + private System.Windows.Forms.DataGridViewTextBoxColumn Column8; + private System.Windows.Forms.DataGridViewTextBoxColumn Column2; + private System.Windows.Forms.DataGridViewTextBoxColumn Column3; + private System.Windows.Forms.DataGridViewTextBoxColumn Column7; + private System.ComponentModel.BackgroundWorker backgroundWorker1; + private Sunny.UI.UIGroupBox uiGroupBox4; + public System.Windows.Forms.Label label17; + private System.Windows.Forms.PictureBox pictureBox9; + public System.Windows.Forms.Label label21; + private System.Windows.Forms.PictureBox pictureBox10; + public System.Windows.Forms.Label label24; + private System.Windows.Forms.PictureBox pictureBox11; + public System.Windows.Forms.Label label25; + private System.Windows.Forms.PictureBox pictureBox12; + private System.Windows.Forms.Label lb_OKRate; + private System.Windows.Forms.Label label41; + private System.Windows.Forms.Label lb_NGnumber; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.Label lb_OKnumber; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.Label lb_Total; + private System.Windows.Forms.Label label1; + public System.IO.Ports.SerialPort SerialPort_CH3Saoma; + public System.IO.Ports.SerialPort SerialPort_CH4Saoma; + private System.Windows.Forms.Button bt_test2; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7; + private System.Windows.Forms.DataGridViewTextBoxColumn Column13; + private System.Windows.Forms.DataGridViewTextBoxColumn Column10; + private System.Windows.Forms.DataGridViewTextBoxColumn Column9; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private Sunny.UI.UIDataGridView DataGridView2; + private Sunny.UI.UITextBox tb_CH1Code; + private Sunny.UI.UITextBox tb_CH2Code; + private Sunny.UI.UITextBox tb_CH3Code; + private Sunny.UI.UITextBox tb_CH4Code; + private System.Windows.Forms.CheckBox chk_SaomaFocus; + public System.Windows.Forms.Timer timer2; + } +} + diff --git a/SLC1-N/Form1.cs b/SLC1-N/Form1.cs new file mode 100644 index 0000000..f145b54 --- /dev/null +++ b/SLC1-N/Form1.cs @@ -0,0 +1,5790 @@ +using HslCommunication.Profinet.Melsec; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Excel = Microsoft.Office.Interop.Excel; +using EasyModbus; +using DocumentFormat.OpenXml.Bibliography; +using DocumentFormat.OpenXml.EMMA; +using Guna.UI2.WinForms.Suite; +using System.IO.Ports; +using DocumentFormat.OpenXml.Drawing; +using Sunny.UI; +using WindowsFormsApp1; +using Spire.Xls.Core; +using Newtonsoft.Json.Linq; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; +using C_Windows_1; +using static C_Windows_1.MES; +using System.Reflection.Emit; +using static SLC1_N.DataUp; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.Header; +using DocumentFormat.OpenXml.Office2016.Excel; +using System.Web.Services.Description; +using Microsoft.VisualBasic.Logging; + + +namespace SLC1_N +{ + public partial class Form1 : Form + { + public static Form1 f1; + private readonly WindowAutoResizer resizer; // readonly 只能在 声明时初始化或在类的构造函数中赋值,之后不能被修改(不可重新赋值) + private CancellationTokenSource cts; // 用于协调任务的取消操作 + + public string User; // 记录当前用户 + + public ModbusTCP_28 LL28CH1client; // 28客户端线程类 + public ModbusTCP_28 LL28CH2client; + public ModbusTCP_28 LL28CH3client; // 28客户端线程类 + public ModbusTCP_28 LL28CH4client; + + public SaomaClient saomaClient1; // 扫码枪客户端 + public SaomaClient saomaClient2; + + public string localipaddress; // 本机IP + public string ch1ipaddress; // 记录仪器CH1的IP地址 + public string ch2ipaddress; // 记录仪器CH2的IP地址 + public string ch3ipaddress; // 记录仪器CH3的IP地址 + public string ch4ipaddress; // 记录仪器CH4的IP地址 + + ProductionRecord m_production = new ProductionRecord(); // 产能记录 + + public FileSave filesave; // 保存文件设置 + public static bool m_MESswitch = false; // MES开关 + + public bool m_ContinueTest; // 连续测试 + public int m_ContinueTestCount; // 连续次数 + + public delegate void MySignalHandler(int msg, bool mode); // 声明信号 + public event MySignalHandler Signal_SaomaStart; // 定义信号 + public event MySignalHandler Signal_PLCStatus; // 定义信号 + + // PLC客户端初始化 + // ModbusClient modbusClient = new ModbusClient("192.168.1.88", 502); + // ModbusClient modbusClient = new ModbusClient("127.0.0.1", 502); + //ModbusClient modbusClient; + + public ModbusClient HCPLC_client = new ModbusClient(); + + + // 主界面 + public Form1() + { + Control.CheckForIllegalCrossThreadCalls = false; // 禁用跨线程访问控件的异常检查 + InitializeComponent(); + resizer = new WindowAutoResizer(this); + f1 = this; + InitializeAfterLoadAsync(); + } + + // 主窗口初始化 + private void Form1_Load(object sender, EventArgs e) + { + // 启用线程检查 + //Control.CheckForIllegalCrossThreadCalls = true; + + // 界面初始化 + tb_CH1Code.Text = ""; + tb_CH2Code.Text = ""; + lb_CH1_Result.Text = " "; + lb_CH2_Result.Text = " "; + + tb_CH3Code.Text = ""; + tb_CH4Code.Text = ""; + lb_CH3_Result.Text = " "; + lb_CH4_Result.Text = " "; + + // DataGridView 行自动调整高度 + DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + DataGridView2.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + + User = "操作员"; + lb_User.Text = "操作员"; + + // 清理log文件 保留近30天 + Task.Run(() => + { + mxlLog.Instance.ClearOldLogs(30); + }); + + // 显示时间 + timer_nowTime.Start(); + + // 定时清理垃圾 + timer1.Interval = 50000; + timer1.Start(); + + // 用户重置 + UserClear.Interval = 600000; + UserClear.Start(); + + // 发送扫码启动 + timer_SaomaStart.Interval = 500; + //timer_SaomaStart.Start(); + + // 间隔8S清除消息框 + if (lb_User.Text == "操作员") + { + tb_CH1codeLeng.Enabled = false; + tb_CH2codeLeng.Enabled = false; + tb_CH3codeLeng.Enabled = false; + tb_CH4codeLeng.Enabled = false; + } + + // 产能初始化 + Production_Init(); + + // 标志位初始化 + Flag_Init(); + + // 仪器客户端初始化 + CHXclient_Init(); + + // 仪器参数初始 + yiqiParamInit(); + + // 初始化CancellationTokenSource + cts = new CancellationTokenSource(); // 创建了取消令牌源 cts + Task.Run(() => RunMachine(cts.Token), cts.Token); // 将令牌传递给后台任务 第二个cts.Token 确保任务异常时能自动取消 + Task.Run(() => RunMachine2(cts.Token), cts.Token); + Task.Run(() => RunMachine3(cts.Token), cts.Token); + Task.Run(() => RunMachine4(cts.Token), cts.Token); + + // 扫码枪初始化 + var jsconfig = new JsonConfig("config.json"); + string saoma = jsconfig.GetValue("CodeScanner", "SerialPort"); + if(saoma == "SerialPort") + { + // 串口扫码枪初始化 + SerialPort_Saoma_Init(); + } + else if (saoma == "TCP") + { + // TCP扫码枪初始化 + TCPSaoma_Init(); + } + + // MES初始化 + MES_Init(); + + // PLC客户端初始化 + PLCclient_Init(); + + PLC_Alarm(); + + if (Environment.MachineName.Trim() == "PC-20230419CFZS") // 计算机名 + { + lb_User.Text = "厂商"; + User = "厂商"; + bt_test.Visible = true; + bt_test2.Visible = true; + } + + tb_CH1Code.Focus(); + + timer2.Interval = 4000; + timer2.Start(); + } + + bool[] coil1100 = new bool[14]; + bool[] coil1032 = new bool[8]; + public bool[] coilSaoma = new bool[4]; + + // PLC警报 + void PLC_Alarm() + { + Task.Run(() => + { + while (true) + { + Thread.Sleep(1000); + + for (int i = 0; i < coil1100.Length; i++) + { + string address = $"M{1100 + i}"; + AlarmManager.UpdateAlarm(address, coil1100[i]); + } + + for (int i = 0; i < coil1032.Length; i++) + { + if(i < 4) + { + //Console.WriteLine($"{i}-{coil1032[i]}"); + string address = $"M{1032 + i}"; + AlarmManager.UpdateAlarm(address, coil1032[i]); + //Console.WriteLine($"{i}-弹窗 {AlarmManager.isShow} - {AlarmManager.nowAlarmMessage}"); + } + } + } + }); + } + + + private async void InitializeAfterLoadAsync() + { + // 等待窗口完全初始化 + await Task.Delay(100); + InitializeAfterLoad(); + } + + private void InitializeAfterLoad() + { + + } + + // 显示槽 + private void Slot_MainShow(bool mode) + { + this.Show(); + this.Enabled = mode; + if(!mode) + { + this.Close(); + } + } + + // 产能初始化 + private void Production_Init() + { + UploadProductionData(m_production.GetTotal(), m_production.GetOK(), m_production.GetNG(), m_production.GetOKRate()); // 更新产能 + } + + // MES数据 + public string mes_partno; // 料号 + public string mes_station; // 工站名称 + public string mes_workorder; // 工单 + public string mes_equipmentno; // 设备编号 + public string mes_fixturecode; // 夹具编号 + public string mes_plan; // 工厂 + + // MES初始化 + private void MES_Init() + { + var jsconfig = new JsonConfig("config.json"); + + m_LINE = jsconfig.GetValue("LINE", "1"); + m_ActionName = jsconfig.GetValue("ActionName", " "); + m_Tools = jsconfig.GetValue("Tools", " "); + + // MES开关 + m_MESswitch = jsconfig.GetValue("MESswitch", false); + if (m_MESswitch && HQMES_Init()) + { + lb_MESswitch.Text = "MES在线"; + pb_MESswitch.BackColor = Color.Green; + } + else + { + m_MESswitch = false; + lb_MESswitch.Text = "MES离线"; + pb_MESswitch.BackColor = Color.Red; + } + } + + // 标志位初始化 + private void Flag_Init() + { + var jsconfig = new JsonConfig("config.json"); + //Console.WriteLine($"实际加载的JSON内容: {jsconfig.ShowAllValues()}"); + + // 条码长度 + tb_CH1codeLeng.Text = jsconfig.GetValue("CodeLength1", "9"); + tb_CH2codeLeng.Text = jsconfig.GetValue("CodeLength2", "9"); + tb_CH3codeLeng.Text = jsconfig.GetValue("CodeLength3", "9"); + tb_CH4codeLeng.Text = jsconfig.GetValue("CodeLength4", "9"); + + // 连续测试/次数 + m_ContinueTest = jsconfig.GetValue("chk_ContinueTest", true); + m_ContinueTestCount = jsconfig.GetValue("tb_ContinueTestCount", 1); + + // 日志使能 + mxlLog.Instance.IsDebugEnabled = jsconfig.GetValue("IsDebugEnabled", false); + mxlLog.Instance.IsErrorEnabled = jsconfig.GetValue("IsErrorEnabled", false); + mxlLog.Instance.IsInfoEnabled = jsconfig.GetValue("IsInfoEnabled", false); + mxlLog.Instance.IsWarningEnabled = jsconfig.GetValue("IsWarningEnabled", false); + mxlLog.Instance.IsXXXEnabled = jsconfig.GetValue("IsXXXEnabled", false); + + // MES开关 + m_MESswitch = jsconfig.GetValue("MESswitch", false); + if (m_MESswitch) + { + lb_MESswitch.Text = "MES在线"; + pb_MESswitch.BackColor = Color.Green; + } + else + { + lb_MESswitch.Text = "MES离线"; + pb_MESswitch.BackColor = Color.Red; + } + + // 仪器ip + if (string.IsNullOrEmpty(ch1ipaddress)) + { + ch1ipaddress = jsconfig.GetValue("ch1ipaddress", "192.168.1.131"); + } + if (string.IsNullOrEmpty(ch2ipaddress)) + { + ch2ipaddress = jsconfig.GetValue("ch2ipaddress", "192.168.1.130"); + } + if (string.IsNullOrEmpty(ch3ipaddress)) + { + ch3ipaddress = jsconfig.GetValue("ch3ipaddress", "192.168.1.129"); + } + if (string.IsNullOrEmpty(ch4ipaddress)) + { + ch4ipaddress = jsconfig.GetValue("ch4ipaddress", "192.168.1.128"); + } + ch1AutoConnect = jsconfig.GetValue("ch1AutoConnect", true); + ch2AutoConnect = jsconfig.GetValue("ch2AutoConnect", true); + ch3AutoConnect = jsconfig.GetValue("ch3AutoConnect", true); + ch4AutoConnect = jsconfig.GetValue("ch4AutoConnect", true); + + // 写入文件 标志位 + filesave = new FileSave(); + filesave.TXT = jsconfig.GetValue("TXT", false); + filesave.Excel = jsconfig.GetValue("Excel", false); + filesave.CSV = jsconfig.GetValue("CSV", false); + filesave.Path = jsconfig.GetValue("FilePath", ""); + } + + // 仪器客户端初始化 + private void CHXclient_Init() + { + // 线程客户端初始化 + // 通道1 + if (LL28CH1client == null) + { + LL28CH1client = new ModbusTCP_28(1); + LL28CH1client.Connect(ch1ipaddress); + LL28CH1client.Start(); + } + + // 通道2 + if (LL28CH2client == null) + { + LL28CH2client = new ModbusTCP_28(2); + LL28CH2client.Connect(ch2ipaddress); + LL28CH2client.Start(); + } + + // 通道3 + if (LL28CH3client == null) + { + LL28CH3client = new ModbusTCP_28(3); + LL28CH3client.Connect(ch3ipaddress); + LL28CH3client.Start(); + } + + // 通道4 + if (LL28CH4client == null) + { + LL28CH4client = new ModbusTCP_28(4); + LL28CH4client.Connect(ch4ipaddress); + LL28CH4client.Start(); + } + + timer_yiqiRun.Interval = 500; + timer_yiqiRun.Start(); // 定时器 监控仪器通讯状态 + } + + + public readonly object plcLock = new object(); + + // PLC客户端初始化 + private void PLCclient_Init() + { + var jsconfig = new JsonConfig("config.json"); + + // PLC地址 + string plcip = jsconfig.GetValue("PLC_IP", "192.168.1.88"); + int plcport = jsconfig.GetValue("PLC_Port", 502); + HCPLC_client = new ModbusClient(plcip, plcport); + + // 绑定PLC状态信号 + Signal_PLCStatus += Slot_PLCStatus; + + // PLC io监控 + Task.Run(() => + { + while (true) + { + Thread.Sleep(500); + try + { + if (HCPLC_client.Connected == false) + { + Signal_PLCStatus?.Invoke(0, false); // 更新PLC连接状态UI + HCPLC_client.Connect(); + } + else + { + HCPLC_client.ReadHoldingRegisters(1, 1); // 如果失败,会抛异常 + Thread.Sleep(10); + Signal_PLCStatus?.Invoke(0, true); // 更新PLC连接状态UI + + coilSaoma = HCPLC_client.ReadCoils(1012, 4); + + // CHx正在复位 + bool[] coil1016 = HCPLC_client.ReadCoils(1016, 4); + if (coil1016.Length >= 4) + { + if (coil1016[0]) // 通道1 + { + // CH1正在复位 + } + if (coil1016[1]) // 通道3 + { + + } + if (coil1016[2]) // 通道3 + { + + } + if (coil1016[3]) // 通道4 + { + + } + } + + Thread.Sleep(10); + + + coil1032 = HCPLC_client.ReadCoils(1032, 8); + //if (coil1032.Length >= 8) + //{ + // AlarmManager.UpdateAlarm("M1032", coil1032[0]); // CHx通道异常 + // AlarmManager.UpdateAlarm("M1033", coil1032[1]); + // AlarmManager.UpdateAlarm("M1034", coil1032[2]); + // AlarmManager.UpdateAlarm("M1035", coil1032[3]); + + // // CHx仪器阀门控制点 + // if (coil1032[4]) // 通道1 + // { + + // } + // if (coil1032[5]) // 通道3 + // { + + // } + // if (coil1032[6]) // 通道3 + // { + + // } + // if (coil1032[7]) // 通道4 + // { + + // } + //} + + Thread.Sleep(10); + + // 警报弹窗提示 + coil1100 = HCPLC_client.ReadCoils(1100, 14); + } + } + catch (Exception ex) + { + Signal_PLCStatus?.Invoke(0, false); // 更新PLC连接状态UI + Thread.Sleep(1000); + } + } + }); + } + + // 串口扫码使能 + public bool serialport_saoma_Enabled = false; + + // 串口扫码枪初始化 + private void SerialPort_Saoma_Init() + { + try + { + serialport_saoma_Enabled = true; + var jsconfig = new JsonConfig("config.json"); + + int SerialPort_CH1BaudRate = jsconfig.GetValue("SerialPort_CH1BaudRate", 9600); + string SerialPort_CH1PortName = jsconfig.GetValue("SerialPort_CH1PortName", "COM21"); + int SerialPort_CH2BaudRate = jsconfig.GetValue("SerialPort_CH2BaudRate", 9600); + string SerialPort_CH2PortName = jsconfig.GetValue("SerialPort_CH2PortName", "COM11"); + + int SerialPort_CH3BaudRate = jsconfig.GetValue("SerialPort_CH3BaudRate", 9600); + string SerialPort_CH3PortName = jsconfig.GetValue("SerialPort_CH3PortName", "COM11"); + int SerialPort_CH4BaudRate = jsconfig.GetValue("SerialPort_CH4BaudRate", 9600); + string SerialPort_CH4PortName = jsconfig.GetValue("SerialPort_CH4PortName", "COM11"); + + //设置端口的参数,包括波特率等 + // 扫码枪1 + SerialPort_CH1Saoma.BaudRate = SerialPort_CH1BaudRate; + SerialPort_CH1Saoma.PortName = SerialPort_CH1PortName; + SerialPort_CH1Saoma.DataBits = 8; + SerialPort_CH1Saoma.StopBits = System.IO.Ports.StopBits.One; + SerialPort_CH1Saoma.Parity = System.IO.Ports.Parity.None; + SerialPort_CH1Saoma.Open(); + if (SerialPort_CH1Saoma.IsOpen) + { + Console.WriteLine($"SerialPort_CH1Saoma: T"); + } + else + { + Console.WriteLine($"SerialPort_CH1Saoma: F"); + SetUITextBox(tb_CH1MainMessage, $"CH1串口扫码枪打开失败"); + } + + // 扫码枪2 + SerialPort_CH2Saoma.BaudRate = SerialPort_CH2BaudRate; + SerialPort_CH2Saoma.PortName = SerialPort_CH2PortName; + SerialPort_CH2Saoma.DataBits = 8; + SerialPort_CH2Saoma.StopBits = System.IO.Ports.StopBits.One; + SerialPort_CH2Saoma.Parity = System.IO.Ports.Parity.None; + SerialPort_CH2Saoma.Open(); + if (SerialPort_CH2Saoma.IsOpen) + { + Console.WriteLine($"SerialPort_CH2Saoma: T"); + } + else + { + Console.WriteLine($"SerialPort_CH2Saoma: F"); + SetUITextBox(tb_CH2MainMessage, $"CH2串口扫码枪打开失败"); + } + + // 扫码枪3 + SerialPort_CH3Saoma.BaudRate = SerialPort_CH3BaudRate; + SerialPort_CH3Saoma.PortName = SerialPort_CH3PortName; + SerialPort_CH3Saoma.DataBits = 8; + SerialPort_CH3Saoma.StopBits = System.IO.Ports.StopBits.One; + SerialPort_CH3Saoma.Parity = System.IO.Ports.Parity.None; + SerialPort_CH3Saoma.Open(); + if (SerialPort_CH3Saoma.IsOpen) + { + Console.WriteLine($"SerialPort_CH3Saoma: T"); + } + else + { + Console.WriteLine($"SerialPort_CH3Saoma: F"); + SetUITextBox(tb_CH1MainMessage, $"CH3串口扫码枪打开失败"); + } + + // 扫码枪4 + SerialPort_CH4Saoma.BaudRate = SerialPort_CH4BaudRate; + SerialPort_CH4Saoma.PortName = SerialPort_CH4PortName; + SerialPort_CH4Saoma.DataBits = 8; + SerialPort_CH4Saoma.StopBits = System.IO.Ports.StopBits.One; + SerialPort_CH4Saoma.Parity = System.IO.Ports.Parity.None; + SerialPort_CH4Saoma.Open(); + if (SerialPort_CH4Saoma.IsOpen) + { + Console.WriteLine($"SerialPort_CH4Saoma: T"); + } + else + { + Console.WriteLine($"SerialPort_CH4Saoma: F"); + SetUITextBox(tb_CH2MainMessage, $"CH4串口扫码枪打开失败"); + } + } + catch (Exception ex) + { + Console.WriteLine($"串口扫码枪初始化 异常,行号{ex.StackTrace},{ex.Message}"); + mxlLog.Instance.Error($"串口扫码枪初始化 异常 ,行号{ex.StackTrace} ", ex); + } + } + + // 网口扫码使能 + public bool tcpSaoma_Enabled = false; + + // TCP扫码枪初始化 + private void TCPSaoma_Init() + { + tcpSaoma_Enabled = true; + var jsconfig = new JsonConfig("config.json"); + + // 扫码枪客户端初始化 + string smip1 = jsconfig.GetValue("Saoma_IP1", "127.0.0.1"); + int smport1 = jsconfig.GetValue("Saoma_Port1", 51111); + string smip2 = jsconfig.GetValue("Saoma_IP2", "127.0.0.1"); + int smport2 = jsconfig.GetValue("Saoma_Port2", 52222); + + saomaClient1 = new SaomaClient( + smip1, // IP地址 + smport1, // 端口号 + Convert.ToInt32(tb_CH1codeLeng.Text), // 条码长度 + code => { + TCPCode_DataReceived(1, code); + }, + error => { + mxlLog.Instance.Error($"CH1 {error} "); + }, + status => { + SetUITextBox(tb_CH1MainMessage, $"CH1 {status} "); + }); + + saomaClient2 = new SaomaClient( + smip2, // IP地址 + smport2, // 端口号 + Convert.ToInt32(tb_CH2codeLeng.Text), // 条码长度 + code => { + TCPCode_DataReceived(2, code); + }, + error => { + mxlLog.Instance.Error($"CH2 {error} "); + }, + status => { + SetUITextBox(tb_CH2MainMessage, $"CH2 {status} "); + }); + + Task.Run(() => + { + saomaClient1.Connect(); + saomaClient2.Connect(); + }); + } + + // PLC连接状态 + private void Slot_PLCStatus(int msg, bool mode) + { + //Console.WriteLine($"PLC连接状态: {mode}"); + if (mode) + pb_PLC_CommunicationStatus.BackColor = Color.Green; + else + pb_PLC_CommunicationStatus.BackColor = Color.Red; + } + + // PLC写入线圈槽函数 + private async void Slot_PLC_WriteCoil(int msg, bool mode) + { + try + { + if (HCPLC_client?.Connected != true) + return; + + // 使用Task超时控制, 防止10s太久死锁 + var writeTask = Task.Run(() => + { + lock (plcLock) + { + HCPLC_client.WriteSingleCoil(msg, mode); // 写超时10s不可配置 + } + }); + + // 设置2秒超时 + if (await Task.WhenAny(writeTask, Task.Delay(2000)) == writeTask) + { + await writeTask; // 确保任务完成 + } + else + { + mxlLog.Instance.Warning($"PLC写入超时,地址: {msg}, 模式: {mode}"); + } + } + catch (Exception ex) + { + mxlLog.Instance.Error($"PLC写入槽函数异常, 地址: {msg}, 错误: {ex.Message}"); + } + } + + // 扫码启动槽 + private void Slot_SaomaStart(int msg, bool mode = false) + { + //Console.WriteLine($"扫码启动槽: {msg}"); + string data = "73 74 61 72 74"; // "start" + byte[] byt = StrtoHexbyte(data); + switch (msg) + { + case 1: // 扫码枪1启动 + if (serialport_saoma_Enabled && SerialPort_CH1Saoma != null && SerialPort_CH1Saoma.IsOpen) + { + SerialPort_CH1Saoma.Write(byt, 0, byt.Length); + } + + if(tcpSaoma_Enabled) + saomaClient1?.SendStartCommand(); + break; + + case 2: // 扫码枪2启动 + if (serialport_saoma_Enabled && SerialPort_CH2Saoma != null && SerialPort_CH2Saoma.IsOpen) + { + SerialPort_CH2Saoma.Write(byt, 0, byt.Length); + } + + if (tcpSaoma_Enabled) + saomaClient2?.SendStartCommand(); + break; + + case 3: // 扫码枪3启动 + if (serialport_saoma_Enabled && SerialPort_CH3Saoma != null && SerialPort_CH3Saoma.IsOpen) + { + SerialPort_CH3Saoma.Write(byt, 0, byt.Length); + } + + //if (tcpSaoma_Enabled) + // saomaClient3?.SendStartCommand(); + break; + + case 4: // 扫码枪4启动 + if (serialport_saoma_Enabled && SerialPort_CH4Saoma != null && SerialPort_CH4Saoma.IsOpen) + { + SerialPort_CH4Saoma.Write(byt, 0, byt.Length); + } + + //if (tcpSaoma_Enabled) + // saomaClient4?.SendStartCommand(); + break; + } + } + + + string ch1_oldcode = ""; + string ch2_oldcode = ""; + + // TCP收到条码 + private void TCPCode_DataReceived(int CH, string code) + { + try + { + if (CH == 1) + { + string CODE = code.Replace("\r\n", ""); + + //Console.WriteLine("扫码枪1收到:" + code); + if (!CODE.IsNullOrEmpty() && CODE.Length.ToString() == tb_CH1codeLeng.Text) + { + //SetUITextBox(tb_CH1MainMessage, "CH1 TCP扫码完成"); + + if(CODE == ch1_oldcode) + { + return; + } + ch1_oldcode = CODE; + tb_CH1Code.Text = CODE; + + if (m_MESswitch) + { + SetLabelText(lb_CH1MES_OUTstatus, ""); + + var rdata = ruzhan(CODE, m_ActionName, m_Tools); + if (rdata.result) + { + SetLabelText(lb_CH1MES_INstatus, "PASS", Color.Green); + } + else + { + SetLabelText(lb_CH1MES_INstatus, "NG", Color.Red); + SetUITextBox(tb_CH1MainMessage, $"CH1 入站NG:{rdata.msg}"); + } + SetLabelText(lb_CH1MES_OUTstatus, ""); + } + } + else + { + SetUITextBox(tb_CH1MainMessage, "CH1 当前条形码长度为" + CODE.Length + "所设置的条码长度为" + tb_CH1codeLeng.Text); + } + } + if (CH == 2) + { + string CODE = code.Replace("\r\n", ""); + + //Console.WriteLine("扫码枪2收到:" + code); + if (!CODE.IsNullOrEmpty() && CODE.Length.ToString() == tb_CH2codeLeng.Text) + { + //SetUITextBox(tb_CH2MainMessage, "CH2 TCP扫码完成"); + + if (CODE == ch2_oldcode) + { + return; + } + ch2_oldcode = CODE; + tb_CH2Code.Text = CODE; + + if (m_MESswitch) + { + SetLabelText(lb_CH2MES_OUTstatus, ""); + + var rdata = ruzhan(CODE, m_ActionName, m_Tools); + if (rdata.result) + { + SetLabelText(lb_CH2MES_INstatus, "PASS", Color.Green); + } + else + { + SetLabelText(lb_CH2MES_INstatus, "NG", Color.Red); + SetUITextBox(tb_CH2MainMessage, $"CH2 入站NG:{rdata.msg}"); + } + SetLabelText(lb_CH2MES_OUTstatus, ""); + } + } + else + { + SetUITextBox(tb_CH2MainMessage, "CH2 当前条形码长度为" + CODE.Length + "所设置的条码长度为" + tb_CH2codeLeng.Text); + } + } + } + catch (Exception ex) + { + // 处理MES上传异常 + } + } + + + public struct RtValue + { + public bool result { get; set; } + public string data { get; set; } + + public RtValue(bool Result, string Data) + { + result = Result; + data =Data; + } + } + + public struct TestTime + { + public string startTime { get; set; } + public string stopTime { get; set; } + + public TestTime(string startTime, string stopTime) + { + this.startTime = startTime; + this.stopTime = stopTime; + } + } + + + /* + // MES 入站 + private RtValue ruzhan(int CH, string code, string mode = null) + { + RtValue ruzhan_result = new RtValue(false, "##"); + switch (CH) + { + case 1: + { + MES mes = new MES(urlip, urlport); + var request = new MES_IN_Data + { + time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + code = code, + fulltime = (LL28CH1client.ArrRegister[6] / 10.0).ToString(), // 充气时间 + balantime = (LL28CH1client.ArrRegister[7] / 10.0).ToString(), // 平衡时间 + testtime = (LL28CH1client.ArrRegister[8] / 10.0).ToString(), // 检测时间 + exhausttime = (LL28CH1client.ArrRegister[9] / 10.0).ToString() // 排气时间 + }; + string response = mes.UploadData(request); + + if (response.Contains("OK") || response.Contains("ok") + || response.Contains("TRUE") || response.Contains("true") + || response.Contains("PASS") || response.Contains("pass") + || response.Contains("Success") || response.Contains("success")) + { + ruzhan_result.result = true; + ruzhan_result.data = response; + } + else + { + ruzhan_result.result = false; + ruzhan_result.data = response; + } + } + break; + case 2: + { + MES mes = new MES(urlip, urlport); + var request = new MES_IN_Data + { + time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + code = code, + fulltime = (LL28CH2client.ArrRegister[6] / 10.0).ToString(), // 充气时间 + balantime = (LL28CH2client.ArrRegister[7] / 10.0).ToString(), // 平衡时间 + testtime = (LL28CH2client.ArrRegister[8] / 10.0).ToString(), // 检测时间 + exhausttime = (LL28CH2client.ArrRegister[9] / 10.0).ToString() // 排气时间 + }; + string response = mes.UploadData(request); + + if (response.Contains("OK") || response.Contains("ok") + || response.Contains("TRUE") || response.Contains("true") + || response.Contains("PASS") || response.Contains("pass") + || response.Contains("Success") || response.Contains("success")) + { + ruzhan_result.result = true; + ruzhan_result.data = response; + } + else + { + ruzhan_result.result = false; + ruzhan_result.data = response; + } + } + break; + case 3: + { + MES mes = new MES(urlip, urlport); + var request = new MES_IN_Data + { + time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + code = code, + fulltime = (LL28CH3client.ArrRegister[6] / 10.0).ToString(), // 充气时间 + balantime = (LL28CH3client.ArrRegister[7] / 10.0).ToString(), // 平衡时间 + testtime = (LL28CH3client.ArrRegister[8] / 10.0).ToString(), // 检测时间 + exhausttime = (LL28CH3client.ArrRegister[9] / 10.0).ToString() // 排气时间 + }; + string response = mes.UploadData(request); + + if (response.Contains("OK") || response.Contains("ok") + || response.Contains("TRUE") || response.Contains("true") + || response.Contains("PASS") || response.Contains("pass") + || response.Contains("Success") || response.Contains("success")) + { + ruzhan_result.result = true; + ruzhan_result.data = response; + } + else + { + ruzhan_result.result = false; + ruzhan_result.data = response; + } + } + break; + case 4: + { + MES mes = new MES(urlip, urlport); + var request = new MES_IN_Data + { + time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + code = code, + fulltime = (LL28CH4client.ArrRegister[6] / 10.0).ToString(), // 充气时间 + balantime = (LL28CH4client.ArrRegister[7] / 10.0).ToString(), // 平衡时间 + testtime = (LL28CH4client.ArrRegister[8] / 10.0).ToString(), // 检测时间 + exhausttime = (LL28CH4client.ArrRegister[9] / 10.0).ToString() // 排气时间 + }; + string response = mes.UploadData(request); + + if (response.Contains("OK") || response.Contains("ok") + || response.Contains("TRUE") || response.Contains("true") + || response.Contains("PASS") || response.Contains("pass") + || response.Contains("Success") || response.Contains("success")) + { + ruzhan_result.result = true; + ruzhan_result.data = response; + } + else + { + ruzhan_result.result = false; + ruzhan_result.data = response; + } + } + break; + } + + return ruzhan_result; + } + + private RtValue chuzhan(int CH, string code, bool result, string mode = null) + { + RtValue ruzhan_result = new RtValue(false, "##"); + switch (CH) + { + case 1: + { + MES mes = new MES(urlip, urlport); + var request = new MES_OUT_Data + { + time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + code = code, + result = result ? "OK" : "NG", + TestPressure = LL28CH1client.readFloatF2(57).ToString(), // 测试压力 + LeakValue = LL28CH1client.readFloatF2(38).ToString(), // 泄漏量 + }; + string response = mes.UploadData(request); + + if (response.Contains("OK") || response.Contains("ok") + || response.Contains("TRUE") || response.Contains("true") + || response.Contains("PASS") || response.Contains("pass") + || response.Contains("Success") || response.Contains("success")) + { + ruzhan_result.result = true; + ruzhan_result.data = response; + } + else + { + ruzhan_result.result = false; + ruzhan_result.data = response; + } + } + break; + case 2: + { + MES mes = new MES(urlip, urlport); + var request = new MES_OUT_Data + { + time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + code = code, + result = result ? "OK":"NG", + TestPressure = LL28CH2client.readFloatF2(57).ToString(), // 测试压力 + LeakValue = LL28CH2client.readFloatF2(38).ToString(), // 泄漏量 + }; + string response = mes.UploadData(request); + + if (response.Contains("OK") || response.Contains("ok") + || response.Contains("TRUE") || response.Contains("true") + || response.Contains("PASS") || response.Contains("pass") + || response.Contains("Success") || response.Contains("success")) + { + ruzhan_result.result = true; + ruzhan_result.data = response; + } + else + { + ruzhan_result.result = false; + ruzhan_result.data = response; + } + } + break; + case 3: + { + MES mes = new MES(urlip, urlport); + var request = new MES_OUT_Data + { + time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + code = code, + result = result ? "OK" : "NG", + TestPressure = LL28CH3client.readFloatF2(57).ToString(), // 测试压力 + LeakValue = LL28CH3client.readFloatF2(38).ToString(), // 泄漏量 + }; + string response = mes.UploadData(request); + + if (response.Contains("OK") || response.Contains("ok") + || response.Contains("TRUE") || response.Contains("true") + || response.Contains("PASS") || response.Contains("pass") + || response.Contains("Success") || response.Contains("success")) + { + ruzhan_result.result = true; + ruzhan_result.data = response; + } + else + { + ruzhan_result.result = false; + ruzhan_result.data = response; + } + } + break; + case 4: + { + MES mes = new MES(urlip, urlport); + var request = new MES_OUT_Data + { + time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + code = code, + result = result ? "OK" : "NG", + TestPressure = LL28CH4client.readFloatF2(57).ToString(), // 测试压力 + LeakValue = LL28CH4client.readFloatF2(38).ToString(), // 泄漏量 + }; + string response = mes.UploadData(request); + + if (response.Contains("OK") || response.Contains("ok") + || response.Contains("TRUE") || response.Contains("true") + || response.Contains("PASS") || response.Contains("pass") + || response.Contains("Success") || response.Contains("success")) + { + ruzhan_result.result = true; + ruzhan_result.data = response; + } + else + { + ruzhan_result.result = false; + ruzhan_result.data = response; + } + } + break; + } + + return ruzhan_result; + } + + */ + + // 将令牌传递给后台任务 第二个cts.Token 确保任务异常时能自动取消 + private void RunMachine(CancellationToken token) + { + ch1workstation = (int)yiqi.standby; + while (!token.IsCancellationRequested) + { + try + { + Thread.Sleep(500); // 使用Thread.Sleep而不是Task.Delay,因为这是后台线程 + + if (!token.IsCancellationRequested) + { + CH1machine(); + } + } + catch (OperationCanceledException) + { + break;// 任务被取消,正常退出 + } + catch (Exception ex) + { + Console.WriteLine($"CH1状态机更新错误: {ex.Message} ,行号{ex.StackTrace}"); // 记录错误但继续运行 + mxlLog.Instance.Error($"CH1状态机更新错误 ,行号{ex.StackTrace} ", ex); + } + } + } + + private void RunMachine2(CancellationToken token) + { + ch2workstation = (int)yiqi.standby; + while (!token.IsCancellationRequested) + { + try + { + Thread.Sleep(500); // 使用Thread.Sleep而不是Task.Delay,因为这是后台线程 + + if (!token.IsCancellationRequested) + { + CH2machine(); + } + } + catch (OperationCanceledException) + { + break;// 任务被取消,正常退出 + } + catch (Exception ex) + { + Console.WriteLine($"CH2状态机更新错误: {ex.Message} ,行号{ex.StackTrace}"); // 记录错误但继续运行 + mxlLog.Instance.Error($"CH2状态机更新错误 ,行号{ex.StackTrace} ", ex); + } + } + } + + private void RunMachine3(CancellationToken token) + { + ch3workstation = (int)yiqi.standby; + while (!token.IsCancellationRequested) + { + try + { + Thread.Sleep(500); // 使用Thread.Sleep而不是Task.Delay,因为这是后台线程 + + if (!token.IsCancellationRequested) + { + CH3machine(); + } + } + catch (OperationCanceledException) + { + break;// 任务被取消,正常退出 + } + catch (Exception ex) + { + Console.WriteLine($"CH3状态机更新错误: {ex.Message} ,行号{ex.StackTrace}"); // 记录错误但继续运行 + mxlLog.Instance.Error($"CH3状态机更新错误 ,行号{ex.StackTrace} ", ex); + } + } + } + + private void RunMachine4(CancellationToken token) + { + ch4workstation = (int)yiqi.standby; + while (!token.IsCancellationRequested) + { + try + { + Thread.Sleep(500); // 使用Thread.Sleep而不是Task.Delay,因为这是后台线程 + + if (!token.IsCancellationRequested) + { + CH4machine(); + } + } + catch (OperationCanceledException) + { + break;// 任务被取消,正常退出 + } + catch (Exception ex) + { + Console.WriteLine($"CH4状态机更新错误: {ex.Message} ,行号{ex.StackTrace}"); // 记录错误但继续运行 + mxlLog.Instance.Error($"CH4状态机更新错误 ,行号{ex.StackTrace} ", ex); + } + } + } + + // 仪器参数初始化 + private void yiqiParamInit() + { + var jsconfig = new JsonConfig("config.json"); + int j = 1; + for (int i=1; i<=4; i++) + { + // P 正压 + GetYiqiParam(i, "P").fulltime = Convert.ToInt32(jsconfig.GetValue($"{i}" + "P" + "fulltime" + j, "0")); + GetYiqiParam(i, "P").balantime = Convert.ToInt32(jsconfig.GetValue($"{i}" + "P" + "balantime" + j, "0")); + GetYiqiParam(i, "P").testtime1 = Convert.ToInt32(jsconfig.GetValue($"{i}" + "P" + "testtime1" + j, "0")); + GetYiqiParam(i, "P").exhausttime = Convert.ToInt32(jsconfig.GetValue($"{i}" + "P" + "exhausttime" + j, "0")); + + GetYiqiParam(i, "P").delaytime1 = Convert.ToInt32(jsconfig.GetValue($"{i}" + "P" + "delaytime1" + j, "0")); + GetYiqiParam(i, "P").delaytime2 = Convert.ToInt32(jsconfig.GetValue($"{i}" + "P" + "delaytime2" + j, "0")); + GetYiqiParam(i, "P").relievedelay = Convert.ToInt32(jsconfig.GetValue($"{i}" + "P" + "relievedelay" + j, "0")); + GetYiqiParam(i, "P").evolume = Convert.ToInt32(jsconfig.GetValue($"{i}" + "P" + "evolume" + j, "0")); + + GetYiqiParam(i, "P").fptoplimit = Convert.ToInt32(jsconfig.GetValue($"{i}" + "P" + "fptoplimit" + j, "0")); + GetYiqiParam(i, "P").fplowlimit = Convert.ToInt32(jsconfig.GetValue($"{i}" + "P" + "fplowlimit" + j, "0")); + GetYiqiParam(i, "P").balanpremax = Convert.ToInt32(jsconfig.GetValue($"{i}" + "P" + "balanpremax" + j, "0")); + GetYiqiParam(i, "P").balanpremin = Convert.ToInt32(jsconfig.GetValue($"{i}" + "P" + "balanpremin" + j, "0")); + + GetYiqiParam(i, "P").leaktoplimit = Convert.ToInt32(jsconfig.GetValue($"{i}" + "P" + "leaktoplimit" + j, "0")); + GetYiqiParam(i, "P").leaklowlimit = Convert.ToInt32(jsconfig.GetValue($"{i}" + "P" + "leaklowlimit" + j, "0")); + GetYiqiParam(i, "P").punit = jsconfig.GetValue($"{i}" + "P" + "punit" + j, 0); + GetYiqiParam(i, "P").lunit = jsconfig.GetValue($"{i}" + "P" + "lunit" + j, 0); + + GetYiqiParam(i, "P").opmode = jsconfig.GetValue($"{i}" + "P" + "opmode" + j, false); + + // N 负压 + GetYiqiParam(i, "N").fulltime = Convert.ToInt32(jsconfig.GetValue($"{i}" + "N" + "fulltime" + j, "0")); + GetYiqiParam(i, "N").balantime = Convert.ToInt32(jsconfig.GetValue($"{i}" + "N" + "balantime" + j, "0")); + GetYiqiParam(i, "N").testtime1 = Convert.ToInt32(jsconfig.GetValue($"{i}" + "N" + "testtime1" + j, "0")); + GetYiqiParam(i, "N").exhausttime = Convert.ToInt32(jsconfig.GetValue($"{i}" + "N" + "exhausttime" + j, "0")); + + GetYiqiParam(i, "N").delaytime1 = Convert.ToInt32(jsconfig.GetValue($"{i}" + "N" + "delaytime1" + j, "0")); + GetYiqiParam(i, "N").delaytime2 = Convert.ToInt32(jsconfig.GetValue($"{i}" + "N" + "delaytime2" + j, "0")); + GetYiqiParam(i, "N").relievedelay = Convert.ToInt32(jsconfig.GetValue($"{i}" + "N" + "relievedelay" + j, "0")); + GetYiqiParam(i, "N").evolume = Convert.ToInt32(jsconfig.GetValue($"{i}" + "N" + "evolume" + j, "0")); + + GetYiqiParam(i, "N").fptoplimit = Convert.ToInt32(jsconfig.GetValue($"{i}" + "N" + "fptoplimit" + j, "0")); + GetYiqiParam(i, "N").fplowlimit = Convert.ToInt32(jsconfig.GetValue($"{i}" + "N" + "fplowlimit" + j, "0")); + GetYiqiParam(i, "N").balanpremax = Convert.ToInt32(jsconfig.GetValue($"{i}" + "N" + "balanpremax" + j, "0")); + GetYiqiParam(i, "N").balanpremin = Convert.ToInt32(jsconfig.GetValue($"{i}" + "N" + "balanpremin" + j, "0")); + + GetYiqiParam(i, "N").leaktoplimit = Convert.ToInt32(jsconfig.GetValue($"{i}" + "N" + "leaktoplimit" + j, "0")); + GetYiqiParam(i, "N").leaklowlimit = Convert.ToInt32(jsconfig.GetValue($"{i}" + "N" + "leaklowlimit" + j, "0")); + GetYiqiParam(i, "N").punit = jsconfig.GetValue($"{i}" + "N" + "punit" + j, 0); + GetYiqiParam(i, "N").lunit = jsconfig.GetValue($"{i}" + "N" + "lunit" + j, 0); + + GetYiqiParam(i, "N").opmode = jsconfig.GetValue($"{i}" + "N" + "opmode" + j, false); + } + + // 重置测试记录 + CH1TestRecord.Reset(); + CH2TestRecord.Reset(); + CH3TestRecord.Reset(); + CH4TestRecord.Reset(); + } + + int ch1workstation; // 状态 + public enum yiqi + { + start, //启动 + rst, //复位 + prepare,//准备 + test, //测试 + finish, //完成(导出数据) + writedate,//写入数据 + standby,//待机 + }; + + // 记录测试启停时间 + TestTime CH1TestTime = new TestTime(); + TestTime CH2TestTime = new TestTime(); + TestTime CH3TestTime = new TestTime(); + TestTime CH4TestTime = new TestTime(); + + // 测试次数 + private int CH1testCount = 0; + private int CH2testCount = 0; + private int CH3testCount = 0; + private int CH4testCount = 0; + + // 记录正压 + private string CH1NowMode = "正压"; + private string CH2NowMode = "正压"; + private string CH3NowMode = "正压"; + private string CH4NowMode = "正压"; + + // 记录各个通道的正负压参数 + public yiqiParam CH1yiqiParam_P = new yiqiParam(); + public yiqiParam CH1yiqiParam_N = new yiqiParam(); + public yiqiParam CH2yiqiParam_P = new yiqiParam(); + public yiqiParam CH2yiqiParam_N = new yiqiParam(); + public yiqiParam CH3yiqiParam_P = new yiqiParam(); + public yiqiParam CH3yiqiParam_N = new yiqiParam(); + public yiqiParam CH4yiqiParam_P = new yiqiParam(); + public yiqiParam CH4yiqiParam_N = new yiqiParam(); + + // 测试记录 + private TestRecord CH1TestRecord = new TestRecord(1); + private TestRecord CH2TestRecord = new TestRecord(2); + private TestRecord CH3TestRecord = new TestRecord(3); + private TestRecord CH4TestRecord = new TestRecord(4); + + private Dictionary prepareOutTime_Dictionary = new Dictionary(); + + public yiqiParam GetYiqiParam(int ch, string PorN = "P") + { + switch (ch) + { + case 1: return PorN == "P" ? CH1yiqiParam_P : CH1yiqiParam_N; + case 2: return PorN == "P" ? CH2yiqiParam_P : CH2yiqiParam_N; + case 3: return PorN == "P" ? CH3yiqiParam_P : CH3yiqiParam_N; + case 4: return PorN == "P" ? CH4yiqiParam_P : CH4yiqiParam_N; + } + return CH1yiqiParam_P; + } + + // 通道1状态机 + public void CH1machine() + { + switch (ch1workstation) + { + case (int)yiqi.start: + { + SetLabelText(lb_CH1_Status, "启动"); + LL28CH1client.writeCoil("0", true); + ch1workstation = (int)yiqi.prepare; + } + break; + + case (int)yiqi.rst: + { + LL28CH1client.writeCoil("1", true); + SetProgressBar(pb_CH1progressBar, 0); // 复位进度条置为0 + SetLabelText(lb_CH1_Status, "复位"); + CH1testCount = 0; // 重置测试次数 + CH1TestRecord.Reset(); + + // 模式切回正压 + //CH1NowMode = "正压"; + //LL28CH1client.writeRegisters(1006, GetYiqiParam(1, "P").GetArray()); + + // 记得给PLC也写入正负压信号 + //Slot_PLC_WriteCoil(1008, false); + //Slot_PLC_WriteCoil(1000, GetYiqiParam(1, "P").opmode); + //Console.WriteLine("@@@@:" + GetYiqiParam(1, "P").opmode); + + Thread.Sleep(200); + ch1workstation = (int)yiqi.standby; + } + break; + + case (int)yiqi.prepare: + { + // 准备超时处理 + if (!prepareOutTime_Dictionary.ContainsKey(1)) + { + prepareOutTime_Dictionary[1] = DateTime.Now.AddSeconds(5); // 5s后还在准备就去启动 + } + else if (DateTime.Now > prepareOutTime_Dictionary[1]) + { + prepareOutTime_Dictionary.Remove(1); // 清除超时记录 + ch1workstation = (int)yiqi.start; + break; + } + + CH1TestTime.startTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + SetLabelText(lb_CH1_Result, ""); + SetLabelText(lb_CH1_Status, "准备"); + + int CH1progressbar = Convert.ToInt32(LL28CH1client.ArrRegister[6] / 10.0) // 充气时间 + + Convert.ToInt32(LL28CH1client.ArrRegister[7] / 10.0) // 平衡时间 + + Convert.ToInt32(LL28CH1client.ArrRegister[8] / 10.0) // 检测时间 + + Convert.ToInt32(LL28CH1client.ArrRegister[9] / 10.0); // 排气时间 + + // 配置进度条 + SetProgressBar(pb_CH1progressBar, 0); + SetProgressBarMax(pb_CH1progressBar, (CH1progressbar + 1) * 10); + + // 设备运行状态 + if (LL28CH1client.ArrCoil[2]) + { + prepareOutTime_Dictionary.Remove(1); + ch1workstation = (int)yiqi.test; + } + } + break; + + case (int)yiqi.standby: + { + SetLabelText(lb_CH1_Status, "待机"); + + // 设备运行状态 + if (LL28CH1client.ArrCoil[2]) + { + ch1workstation = (int)yiqi.prepare; + } + } + break; + + case (int)yiqi.test: + { + int yiqirunning = Convert.ToInt32(LL28CH1client.ArrRegister[34]); + switch(yiqirunning) + { + case 1: + SetLabelText(lb_CH1_Status, "准备"); + break; + case 2: + SetLabelText(lb_CH1_Status, "充气"); + break; + case 3: + SetLabelText(lb_CH1_Status, "平衡"); + break; + case 4: + SetLabelText(lb_CH1_Status, "检测"); + break; + case 5: + SetLabelText(lb_CH1_Status, "排气"); + break; + } + + // 压力单位 + int punit = Convert.ToInt32(LL28CH1client.ArrRegister[27]); + SetPUnit(1, punit); + + // 泄漏量单位 + int lunit = Convert.ToInt32(LL28CH1client.ArrRegister[28]); + SetLUnit(1, lunit); + + // 当前压力 + string fNowpressure = LL28CH1client.readFloatF2(48); + SetLabelText(lb_CH1nowPressure, fNowpressure); + + // 充气压力(测试压力) + string fTestpressure = LL28CH1client.readFloatF2(57); + SetLabelText(lb_CH1_TestPressure, fTestpressure); + + // 大漏(平衡压差) + string fBigLeak = LL28CH1client.readFloatF2(35); + SetLabelText(lb_CH1BigLeak, fBigLeak); + + // 微漏(泄漏量) + string fSmallLeak = LL28CH1client.readFloatF2(38); + + // 处理大于2000, 先显示2000,后续再处理 + if (fSmallLeak.ToDouble() > 2000) + { + fSmallLeak = "2000"; + } + SetLabelText(lb_CH1_SmallLeak, fSmallLeak); + + // 进度条 + int pb_value = pb_CH1progressBar.Value + 5; + SetProgressBar(pb_CH1progressBar, pb_value); + + if (pb_value >= pb_CH1progressBar.Maximum) + { + pb_value = pb_CH1progressBar.Maximum; + SetProgressBar(pb_CH1progressBar, pb_value); + } + + // 设备运行状态 + if (!LL28CH1client.ArrCoil[2]) + { + int testresult = Convert.ToInt32(LL28CH1client.ArrRegister[41]); + string Overresult = ""; + if (testresult == 1) + { + Overresult = "OK"; + SetLabelText(lb_CH1_Result, "OK", Color.Green); + } + else if (testresult == 2) + { + Overresult = "NG"; + SetLabelText(lb_CH1_Result, "NG", Color.Red); + } + else + { + Overresult = ""; + SetLabelText(lb_CH1_Result, ""); + } + + if (Overresult != "") // 有ok/ng结果 + { + ch1workstation = (int)yiqi.finish; + } + else + { + SetProgressBar(pb_CH1progressBar, 0); + ch1workstation = (int)yiqi.standby; + } + } + } + break; + + case (int)yiqi.finish: + { + SetLabelText(lb_CH1_Status, "完成"); + CH1TestTime.stopTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + + // 当前压力 + string fNowpressure = LL28CH1client.readFloatF2(48); + SetLabelText(lb_CH1nowPressure, fNowpressure); + + // 充气压力 + string fTestpressure = LL28CH1client.readFloatF2(57); + SetLabelText(lb_CH1_TestPressure, fTestpressure); + + //大漏 + string fBigLeak = LL28CH1client.readFloatF2(35); + SetLabelText(lb_CH1BigLeak, fBigLeak); + + //微漏 + string fSmallLeak = LL28CH1client.readFloatF2(38); + + // 处理大于2000, 先显示2000,后续再处理 + if (fSmallLeak.ToDouble() > 2000) + { + fSmallLeak = "2000"; + } + SetLabelText(lb_CH1_SmallLeak, fSmallLeak); + + // 结果 + int Coil41result = Convert.ToInt32(LL28CH1client.ArrRegister[41]); + bool result = false; + if (Coil41result == 1) + { + SetLabelText(lb_CH1_Result, "OK", Color.Green); + result = true; + } + else if (Coil41result == 2) + { + SetLabelText(lb_CH1_Result, "NG", Color.Red); + result = false; + } + else + { + SetLabelText(lb_CH1_Result, ""); + } + + // 设备运行状态-停止 + if (LL28CH1client.ArrCoil[2] == false) + { + // 进度条拉满 + SetProgressBar(pb_CH1progressBar, pb_CH1progressBar.Maximum); + + CH1TestRecord.Code = tb_CH1Code.Text; + + bool PorNfinish = true; // 正负压完成标志位 + bool testfinish = false; // 测试结束标志位 + + //string nowmode = CH1NowMode; + //if (CH1NowMode == "正压" && result) // 如果当前是正压并且测试OK + //{ + // // 这里要切换负压、写入负压参数、PLC信号、开口/容积 + // CH1NowMode = "负压"; + // Slot_PLC_WriteCoil(1008, true); + // Slot_PLC_WriteCoil(1000, GetYiqiParam(1, "N").opmode); + + // // 先更新参数 + // LL28CH1client.writeRegisters(1006, GetYiqiParam(1, "N").GetArray()); + // Thread.Sleep(300); + + // // 保存正压测试记录 + // CH1TestRecord.IsPTested = true; + // CH1TestRecord.yiqiP_Param = GetYiqiParam(1, "P").Copy(); + // CH1TestRecord.Result = result; + // CH1TestRecord.PTestPressure = fTestpressure; + // CH1TestRecord.PLeak = fSmallLeak; + //} + //else if(result == false) // 测试NG + //{ + // PorNfinish = true; // 正负压都测试了 + //} + //else if (CH1NowMode == "负压") + //{ + // // 这里要切换正压、写入正压参数、PLC信号、开口/容积 + // CH1NowMode = "正压"; + // Slot_PLC_WriteCoil(1008, false); + // Slot_PLC_WriteCoil(1000, GetYiqiParam(1, "P").opmode); + + // // 先更新参数 + // LL28CH1client.writeRegisters(1006, GetYiqiParam(1, "P").GetArray()); + // Thread.Sleep(300); + + // PorNfinish = true; // 正负压都测试了 + + // // 保存负压测试记录 + // CH1TestRecord.IsNTested = true; + // CH1TestRecord.yiqiN_Param = GetYiqiParam(1, "N").Copy(); + // CH1TestRecord.Result = result; + // CH1TestRecord.NTestPressure = fTestpressure; + // CH1TestRecord.NLeak = fSmallLeak; + //} + + // 连续测试 + if (result == false) // NG直接视为本次测试结束 + { + testfinish = true; + } + else if(m_ContinueTest && PorNfinish) // 开了连续 + { + CH1testCount++; + CH1TestRecord.AddRecord(); // 添加本次记录 + if (CH1testCount >= m_ContinueTestCount) // 测试次数满足 + { + testfinish = true; + } + else + { + SetLabelText(lb_CH1_Status, "加气"); + Thread.Sleep(5000); // 等5s + ch1workstation = (int)yiqi.start; + } + } + else if (m_ContinueTest == false) // 没开连续测试直接视为本次测试结束 + { + testfinish = true; + } + + // 表格 + DataGridView1.Invoke(new System.Action(Display), + 1, result, tb_CH1Code.Text, ""); + + // 测试完成并且正负压都完成则视为结束 + if (testfinish && PorNfinish) + { + if(result) + { + m_production.AddOK(); + } + else + { + m_production.AddNG(); + } + + // 更新产能 + UploadProductionData(m_production.GetTotal(), m_production.GetOK(), m_production.GetNG(), m_production.GetOKRate()); + + // 文件 + CreateFile(1, result, tb_CH1Code.Text, CH1TestRecord.GetRecordList()); + + // MES + if (m_MESswitch) + { + var rdata = chuzhan(1, tb_CH1Code.Text, m_ActionName, m_Tools, G_CHECKFLOWID, result); + if (rdata.result) + { + SetLabelText(lb_CH1MES_OUTstatus, "PASS", Color.Green); + } + else + { + SetLabelText(lb_CH1MES_OUTstatus, "NG", Color.Red); + SetUITextBox(tb_CH1MainMessage, $"CH1 出站NG:{rdata.msg}"); + } + } + + if (HCPLC_client.Connected) + { + Slot_PLC_WriteCoil(1004, true); + mxlLog.Instance.Info($"CH1 1004信号"); + } + + CH1testCount = 0; // 重置测试次数 + CH1TestRecord.Reset(); // 重置测试记录 + SetUITextBox(tb_CH1Code, ""); + ch1workstation = (int)yiqi.standby; + } + if(PorNfinish == false) // 正负压有个没测 + { + ch1workstation = (int)yiqi.start; + } + } + } + break; + + default: break; + } + } + + // ----------- 通道2 + + int ch2workstation; // 状态 + + // 通道2状态机 + public void CH2machine() + { + switch (ch2workstation) + { + case (int)yiqi.start: + { + SetLabelText(lb_CH2_Status, "启动"); + LL28CH2client.writeCoil("0", true); + ch2workstation = (int)yiqi.prepare; + } + break; + + case (int)yiqi.rst: + { + LL28CH2client.writeCoil("1", true); + SetProgressBar(pb_CH2progressBar, 0); // 复位进度条置为0 + SetLabelText(lb_CH2_Status, "复位"); + CH2testCount = 0; // 重置测试次数 + CH2TestRecord.Reset(); + + // 模式切回正压 + //CH2NowMode = "正压"; + //LL28CH2client.writeRegisters(1006, GetYiqiParam(2, "P").GetArray()); + + //// 记得给PLC也写入正负压信号 + //Slot_PLC_WriteCoil(1009, false); + //Slot_PLC_WriteCoil(1001, GetYiqiParam(2, "P").opmode); + + Thread.Sleep(200); + ch2workstation = (int)yiqi.standby; + } + break; + + case (int)yiqi.prepare: + { + // 准备超时处理 + if (!prepareOutTime_Dictionary.ContainsKey(2)) + { + prepareOutTime_Dictionary[2] = DateTime.Now.AddSeconds(5); // 5s后还在准备就去启动 + } + else if (DateTime.Now > prepareOutTime_Dictionary[2]) + { + prepareOutTime_Dictionary.Remove(2); // 清除超时记录 + ch2workstation = (int)yiqi.start; + break; + } + + CH2TestTime.startTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + SetLabelText(lb_CH2_Result, ""); + SetLabelText(lb_CH2_Status, "准备"); + + int CH2progressbar = Convert.ToInt32(LL28CH2client.ArrRegister[6] / 10.0) // 充气时间 + + Convert.ToInt32(LL28CH2client.ArrRegister[7] / 10.0) // 平衡时间 + + Convert.ToInt32(LL28CH2client.ArrRegister[8] / 10.0) // 检测时间 + + Convert.ToInt32(LL28CH2client.ArrRegister[9] / 10.0); // 排气时间 + + // 配置进度条 + SetProgressBar(pb_CH2progressBar, 0); + SetProgressBarMax(pb_CH2progressBar, (CH2progressbar + 1) * 10); // 补偿1秒 + + // 设备运行状态 + if (LL28CH2client.ArrCoil[2]) + { + prepareOutTime_Dictionary.Remove(2); + ch2workstation = (int)yiqi.test; + } + } + break; + + case (int)yiqi.standby: + { + SetLabelText(lb_CH2_Status, "待机"); + + // 设备运行状态 + if (LL28CH2client.ArrCoil[2]) + { + ch2workstation = (int)yiqi.prepare; + } + } + break; + + case (int)yiqi.test: + { + int yiqirunning = Convert.ToInt32(LL28CH2client.ArrRegister[34]); + switch (yiqirunning) + { + case 1: + SetLabelText(lb_CH2_Status, "准备"); + break; + case 2: + SetLabelText(lb_CH2_Status, "充气"); + break; + case 3: + SetLabelText(lb_CH2_Status, "平衡"); + break; + case 4: + SetLabelText(lb_CH2_Status, "检测"); + break; + case 5: + SetLabelText(lb_CH2_Status, "排气"); + break; + } + + // 压力单位 + int punit = Convert.ToInt32(LL28CH2client.ArrRegister[27]); + SetPUnit(2, punit); + + // 泄漏量单位 + int lunit = Convert.ToInt32(LL28CH2client.ArrRegister[28]); + SetLUnit(2, lunit); + + // 当前压力 + string fNowpressure = LL28CH2client.readFloatF2(48); + SetLabelText(lb_CH2nowPressure, fNowpressure); + + // 充气压力(测试压力) + string fTestpressure = LL28CH2client.readFloatF2(57); + SetLabelText(lb_CH2_TestPressure, fTestpressure); + + // 大漏(平衡压差) + string fBigLeak = LL28CH2client.readFloatF2(35); + SetLabelText(lb_CH2BigLeak, fBigLeak); + + // 微漏(泄漏量) + string fSmallLeak = LL28CH2client.readFloatF2(38); + + // 处理大于2000, 先显示2000,后续再处理 + if (fSmallLeak.ToDouble() > 2000) + { + fSmallLeak = "2000"; + } + SetLabelText(lb_CH2_SmallLeak, fSmallLeak); + + // 进度条 + int pb_value = pb_CH2progressBar.Value + 5; + SetProgressBar(pb_CH2progressBar, pb_value); + + if (pb_value >= pb_CH2progressBar.Maximum) + { + pb_value = pb_CH2progressBar.Maximum; + SetProgressBar(pb_CH2progressBar, pb_value); + } + + // 设备运行状态 + if (!LL28CH2client.ArrCoil[2]) + { + int testresult = Convert.ToInt32(LL28CH2client.ArrRegister[41]); + string Overresult = ""; + if (testresult == 1) + { + Overresult = "OK"; + SetLabelText(lb_CH2_Result, "OK", Color.Green); + } + else if (testresult == 2) + { + Overresult = "NG"; + SetLabelText(lb_CH2_Result, "NG", Color.Red); + } + else + { + Overresult = ""; + SetLabelText(lb_CH2_Result, ""); + } + + if (Overresult != "") // 有ok/ng结果 + { + ch2workstation = (int)yiqi.finish; + } + else + { + SetProgressBar(pb_CH2progressBar, 0); + ch2workstation = (int)yiqi.standby; + } + } + } + break; + + case (int)yiqi.finish: + { + SetLabelText(lb_CH2_Status, "完成"); + CH2TestTime.stopTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + + // 当前压力 + string fNowpressure = LL28CH2client.readFloatF2(48); + SetLabelText(lb_CH2nowPressure, fNowpressure); + + // 充气压力 + string fTestpressure = LL28CH2client.readFloatF2(57); + SetLabelText(lb_CH2_TestPressure, fTestpressure); + + //大漏 + string fBigLeak = LL28CH2client.readFloatF2(35); + SetLabelText(lb_CH2BigLeak, fBigLeak); + + //微漏 + string fSmallLeak = LL28CH2client.readFloatF2(38); + + // 处理大于2000, 先显示2000,后续再处理 + if (fSmallLeak.ToDouble() > 2000) + { + fSmallLeak = "2000"; + } + SetLabelText(lb_CH2_SmallLeak, fSmallLeak); + + // 结果 + int Coil41result = Convert.ToInt32(LL28CH2client.ArrRegister[41]); + bool result = false; + if (Coil41result == 1) + { + SetLabelText(lb_CH2_Result, "OK", Color.Green); + result = true; + } + else if (Coil41result == 2) + { + SetLabelText(lb_CH2_Result, "NG", Color.Red); + result = false; + } + else + { + SetLabelText(lb_CH2_Result, ""); + } + + // 设备运行状态-停止 + if (LL28CH2client.ArrCoil[2] == false) + { + // 进度条拉满 + SetProgressBar(pb_CH2progressBar, pb_CH2progressBar.Maximum); + + CH2TestRecord.Code = tb_CH2Code.Text; + + bool PorNfinish = true; // 正负压完成标志位 + bool testfinish = false; // 测试结束标志位 + + //string nowmode = CH2NowMode; + //if (CH2NowMode == "正压" && result) // 如果当前是正压并且测试OK + //{ + // // 这里要切换负压、写入负压参数、PLC信号 + // CH2NowMode = "负压"; + // Slot_PLC_WriteCoil(1009, true); + // Slot_PLC_WriteCoil(1001, GetYiqiParam(2, "N").opmode); + + // // 先更新参数 + // LL28CH2client.writeRegisters(1006, GetYiqiParam(2, "N").GetArray()); + // Thread.Sleep(300); + + // // 保存正压测试记录 + // CH2TestRecord.IsPTested = true; + // CH2TestRecord.yiqiP_Param = GetYiqiParam(2, "P").Copy(); + // CH2TestRecord.Result = result; + // CH2TestRecord.PTestPressure = fTestpressure; + // CH2TestRecord.PLeak = fSmallLeak; + //} + //else if (result == false) // 测试NG + //{ + // PorNfinish = true; // 正负压都测试了 + //} + //else if (CH2NowMode == "负压") + //{ + // // 这里要切换正压、写入正压参数、PLC信号 + // CH2NowMode = "正压"; + // Slot_PLC_WriteCoil(1009, false); + // Slot_PLC_WriteCoil(1001, GetYiqiParam(2, "P").opmode); + + // // 先更新参数 + // LL28CH2client.writeRegisters(1006, GetYiqiParam(2, "P").GetArray()); + // Thread.Sleep(300); + + // PorNfinish = true; // 正负压都测试了 + + // // 保存负压测试记录 + // CH2TestRecord.IsNTested = true; + // CH2TestRecord.yiqiN_Param = GetYiqiParam(2, "N").Copy(); + // CH2TestRecord.Result = result; + // CH2TestRecord.NTestPressure = fTestpressure; + // CH2TestRecord.NLeak = fSmallLeak; + //} + + // 连续测试 + if (result == false) // NG直接视为结束 + { + testfinish = true; + } + else if (m_ContinueTest && PorNfinish) // 开了连续并且正负压都测了 + { + CH2testCount++; + CH2TestRecord.AddRecord(); + if (CH2testCount >= m_ContinueTestCount) // 测试次数满足 + { + testfinish = true; + } + else + { + SetLabelText(lb_CH2_Status, "加气"); + Thread.Sleep(5000); + ch2workstation = (int)yiqi.start; + } + } + else if (m_ContinueTest == false) // 没开连续测试直接视为本次测试结束 + { + testfinish = true; // 没开连续测试直接视为本次测试结束 + } + + // 表格 + DataGridView2.Invoke(new System.Action(Display), + 2, result, tb_CH2Code.Text, ""); + + // 测试完成并且正负压都完成则视为结束 + if (testfinish && PorNfinish) + { + if (result) + { + m_production.AddOK(); + } + else + { + m_production.AddNG(); + } + + // 更新产能 + UploadProductionData(m_production.GetTotal(), m_production.GetOK(), m_production.GetNG(), m_production.GetOKRate()); + + // 文件 + CreateFile(2, result, tb_CH2Code.Text, CH2TestRecord.GetRecordList()); + + // MES + if (m_MESswitch) + { + var rdata = chuzhan(2, tb_CH2Code.Text, m_ActionName, m_Tools, G_CHECKFLOWID, result); + if (rdata.result) + { + SetLabelText(lb_CH2MES_OUTstatus, "PASS", Color.Green); + } + else + { + SetLabelText(lb_CH2MES_OUTstatus, "NG", Color.Red); + SetUITextBox(tb_CH2MainMessage, $"CH2 出站NG:{rdata.msg}"); + } + } + + if (HCPLC_client.Connected) + { + Slot_PLC_WriteCoil(1005, true); + mxlLog.Instance.Info($"CH2 1005信号"); + } + + CH2testCount = 0; // 重置测试次数 + CH2TestRecord.Reset(); // 重置测试记录 + SetUITextBox(tb_CH2Code, ""); + ch2workstation = (int)yiqi.standby; + } + if (PorNfinish == false) // 正负压有个没测 + { + ch2workstation = (int)yiqi.start; + } + } + } + break; + + default: break; + } + } + + // ----------- 通道3 + + int ch3workstation; // 状态 + + // 通道3状态机 + public void CH3machine() + { + switch (ch3workstation) + { + case (int)yiqi.start: + { + SetLabelText(lb_CH3_Status, "启动"); + LL28CH3client.writeCoil("0", true); + ch3workstation = (int)yiqi.prepare; + } + break; + + case (int)yiqi.rst: + { + LL28CH3client.writeCoil("1", true); + SetProgressBar(pb_CH3progressBar, 0); // 复位进度条置为0 + SetLabelText(lb_CH3_Status, "复位"); + CH3testCount = 0; // 重置测试次数 + CH2TestRecord.Reset(); + + // 模式切回正压 + //CH3NowMode = "正压"; + //LL28CH3client.writeRegisters(1006, GetYiqiParam(3, "P").GetArray()); + + //// 记得给PLC也写入正负压信号 + //Slot_PLC_WriteCoil(1010, false); + //Slot_PLC_WriteCoil(1002, GetYiqiParam(3, "P").opmode); + + Thread.Sleep(200); + ch3workstation = (int)yiqi.standby; + } + break; + + case (int)yiqi.prepare: + { + // 准备超时处理 + if (!prepareOutTime_Dictionary.ContainsKey(3)) + { + prepareOutTime_Dictionary[3] = DateTime.Now.AddSeconds(5); // 5s后还在准备就去启动 + } + else if (DateTime.Now > prepareOutTime_Dictionary[3]) + { + prepareOutTime_Dictionary.Remove(3); // 清除超时记录 + ch3workstation = (int)yiqi.start; + break; + } + + CH3TestTime.startTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + SetLabelText(lb_CH3_Result, ""); + SetLabelText(lb_CH3_Status, "准备"); + + int CH3progressbar = Convert.ToInt32(LL28CH3client.ArrRegister[6] / 10.0) // 充气时间 + + Convert.ToInt32(LL28CH3client.ArrRegister[7] / 10.0) // 平衡时间 + + Convert.ToInt32(LL28CH3client.ArrRegister[8] / 10.0) // 检测时间 + + Convert.ToInt32(LL28CH3client.ArrRegister[9] / 10.0); // 排气时间 + + // 配置进度条 + SetProgressBar(pb_CH3progressBar, 0); + SetProgressBarMax(pb_CH3progressBar, (CH3progressbar + 1) * 10); // 补偿1秒 + + // 设备运行状态 + if (LL28CH3client.ArrCoil[2]) + { + prepareOutTime_Dictionary.Remove(3); + ch3workstation = (int)yiqi.test; + } + } + break; + + case (int)yiqi.standby: + { + SetLabelText(lb_CH3_Status, "待机"); + + // 设备运行状态 + if (LL28CH3client.ArrCoil[2]) + { + ch3workstation = (int)yiqi.prepare; + } + } + break; + + case (int)yiqi.test: + { + int yiqirunning = Convert.ToInt32(LL28CH3client.ArrRegister[34]); + switch (yiqirunning) + { + case 1: + SetLabelText(lb_CH3_Status, "准备"); + break; + case 2: + SetLabelText(lb_CH3_Status, "充气"); + break; + case 3: + SetLabelText(lb_CH3_Status, "平衡"); + break; + case 4: + SetLabelText(lb_CH3_Status, "检测"); + break; + case 5: + SetLabelText(lb_CH3_Status, "排气"); + break; + } + + // 压力单位 + int punit = Convert.ToInt32(LL28CH3client.ArrRegister[27]); + SetPUnit(3,punit); + + // 泄漏量单位 + int lunit = Convert.ToInt32(LL28CH3client.ArrRegister[28]); + SetLUnit(3, lunit); + + // 当前压力 + string fNowpressure = LL28CH3client.readFloatF2(48); + SetLabelText(lb_CH3nowPressure, fNowpressure); + + // 充气压力(测试压力) + string fTestpressure = LL28CH3client.readFloatF2(57); + SetLabelText(lb_CH3_TestPressure, fTestpressure); + + // 大漏(平衡压差) + string fBigLeak = LL28CH3client.readFloatF2(35); + SetLabelText(lb_CH3BigLeak, fBigLeak); + + // 微漏(泄漏量) + string fSmallLeak = LL28CH3client.readFloatF2(38); + + // 处理大于2000, 先显示2000,后续再处理 + if (fSmallLeak.ToDouble() > 2000) + { + fSmallLeak = "2000"; + } + SetLabelText(lb_CH3_SmallLeak, fSmallLeak); + + // 进度条 + int pb_value = pb_CH3progressBar.Value + 5; + SetProgressBar(pb_CH3progressBar, pb_value); + + if (pb_value >= pb_CH3progressBar.Maximum) + { + pb_value = pb_CH3progressBar.Maximum; + SetProgressBar(pb_CH3progressBar, pb_value); + } + + // 设备运行状态 + if (!LL28CH3client.ArrCoil[2]) + { + int testresult = Convert.ToInt32(LL28CH3client.ArrRegister[41]); + string Overresult = ""; + if (testresult == 1) + { + Overresult = "OK"; + SetLabelText(lb_CH3_Result, "OK", Color.Green); + } + else if (testresult == 2) + { + Overresult = "NG"; + SetLabelText(lb_CH3_Result, "NG", Color.Red); + } + else + { + Overresult = ""; + SetLabelText(lb_CH3_Result, ""); + } + + if (Overresult != "") // 有ok/ng结果 + { + ch3workstation = (int)yiqi.finish; + } + else + { + SetProgressBar(pb_CH3progressBar, 0); + ch3workstation = (int)yiqi.standby; + } + } + } + break; + + case (int)yiqi.finish: + { + SetLabelText(lb_CH3_Status, "完成"); + CH3TestTime.stopTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + + // 当前压力 + string fNowpressure = LL28CH3client.readFloatF2(48); + SetLabelText(lb_CH3nowPressure, fNowpressure); + + // 充气压力 + string fTestpressure = LL28CH3client.readFloatF2(57); + SetLabelText(lb_CH3_TestPressure, fTestpressure); + + //大漏 + string fBigLeak = LL28CH3client.readFloatF2(35); + SetLabelText(lb_CH3BigLeak, fBigLeak); + + //微漏 + string fSmallLeak = LL28CH3client.readFloatF2(38); + + // 处理大于2000, 先显示2000,后续再处理 + if (fSmallLeak.ToDouble() > 2000) + { + fSmallLeak = "2000"; + } + SetLabelText(lb_CH3_SmallLeak, fSmallLeak); + + // 结果 + int Coil41result = Convert.ToInt32(LL28CH3client.ArrRegister[41]); + bool result = false; + if (Coil41result == 1) + { + SetLabelText(lb_CH3_Result, "OK", Color.Green); + result = true; + } + else if (Coil41result == 2) + { + SetLabelText(lb_CH3_Result, "NG", Color.Red); + result = false; + } + else + { + SetLabelText(lb_CH3_Result, ""); + } + + //Console.WriteLine($"finish-结果: {testresult}"); + + // 设备运行状态-停止 + if (LL28CH3client.ArrCoil[2] == false) + { + SetProgressBar(pb_CH3progressBar, pb_CH3progressBar.Maximum); + + CH3TestRecord.Code = tb_CH3Code.Text; + + bool PorNfinish = true; // 正负压完成标志位 + bool testfinish = false; // 测试结束标志位 + + //string nowmode = CH3NowMode; + //if (CH3NowMode == "正压" && result) // 如果当前是正压并且测试OK + //{ + // // 这里要切换负压、写入负压参数、PLC信号 + // CH3NowMode = "负压"; + // Slot_PLC_WriteCoil(1010, true); + // Slot_PLC_WriteCoil(1002, GetYiqiParam(3, "N").opmode); + + // // 先更新参数 + // LL28CH3client.writeRegisters(1006, GetYiqiParam(3, "N").GetArray()); + // Thread.Sleep(300); + + // // 保存正压测试记录 + // CH3TestRecord.IsPTested = true; + // CH3TestRecord.yiqiP_Param = GetYiqiParam(3, "P").Copy(); + // CH3TestRecord.Result = result; + // CH3TestRecord.PTestPressure = fTestpressure; + // CH3TestRecord.PLeak = fSmallLeak; + //} + //else if (result == false) // 测试NG + //{ + // PorNfinish = true; // 正负压都测试了 + //} + //else if (CH3NowMode == "负压") + //{ + // // 这里要切换正压、写入正压参数、PLC信号 + // CH3NowMode = "正压"; + // Slot_PLC_WriteCoil(1010, false); + // Slot_PLC_WriteCoil(1002, GetYiqiParam(3, "P").opmode); + + // // 先更新参数 + // LL28CH3client.writeRegisters(1006, GetYiqiParam(3, "P").GetArray()); + // Thread.Sleep(300); + + // PorNfinish = true; // 正负压都测试了 + + // // 保存负压测试记录 + // CH3TestRecord.IsNTested = true; + // CH3TestRecord.yiqiN_Param = GetYiqiParam(3, "N").Copy(); + // CH3TestRecord.Result = result; + // CH3TestRecord.NTestPressure = fTestpressure; + // CH3TestRecord.NLeak = fSmallLeak; + //} + + // 连续测试 + if (result == false) // NG直接视为结束 + { + testfinish = true; + } + else if (m_ContinueTest && PorNfinish) // 开了连续并且正负压都测了 + { + CH3testCount++; + CH3TestRecord.AddRecord(); + if (CH3testCount >= m_ContinueTestCount) // 测试次数满足 + { + testfinish = true; + } + else // 进入下一次测试 + { + SetLabelText(lb_CH3_Status, "加气"); + Thread.Sleep(5000); + ch3workstation = (int)yiqi.start; + } + } + else if (m_ContinueTest == false) // 没开连续测试直接视为本次测试结束 + { + testfinish = true; + } + + // 表格 + DataGridView1.Invoke(new System.Action(Display), + 3, result, tb_CH3Code.Text, ""); + + // 测试完成并且正负压都完成则视为结束 + if (testfinish && PorNfinish) + { + if (result) + { + m_production.AddOK(); + } + else + { + m_production.AddNG(); + } + + // 更新产能 + UploadProductionData(m_production.GetTotal(), m_production.GetOK(), m_production.GetNG(), m_production.GetOKRate()); + + // 文件 + CreateFile(3, result, tb_CH3Code.Text, CH3TestRecord.GetRecordList()); + + // MES + if (m_MESswitch) + { + var rdata = chuzhan(3, tb_CH3Code.Text, m_ActionName, m_Tools, G_CHECKFLOWID, result); + if (rdata.result) + { + SetLabelText(lb_CH3MES_OUTstatus, "PASS", Color.Green); + } + else + { + SetLabelText(lb_CH3MES_OUTstatus, "NG", Color.Red); + SetUITextBox(tb_CH1MainMessage, $"CH3 出站NG:{rdata.msg}"); + } + } + + if (HCPLC_client.Connected) + { + Slot_PLC_WriteCoil(1006, true); + mxlLog.Instance.Info($"CH3 1006信号"); + } + + CH3testCount = 0; // 重置测试次数 + CH3TestRecord.Reset(); // 重置测试记录 + SetUITextBox(tb_CH3Code, ""); + ch3workstation = (int)yiqi.standby; + } + if (PorNfinish == false) // 正负压有个没测 + { + ch3workstation = (int)yiqi.start; + } + } + } + break; + + default: break; + } + } + + // ----------- 通道4 + + int ch4workstation; // 状态 + + // 通道4状态机 + public void CH4machine() + { + switch (ch4workstation) + { + case (int)yiqi.start: + { + SetLabelText(lb_CH4_Status, "启动"); + LL28CH4client.writeCoil("0", true); + ch4workstation = (int)yiqi.prepare; + } + break; + + case (int)yiqi.rst: + { + LL28CH4client.writeCoil("1", true); + SetProgressBar(pb_CH4progressBar, 0); // 复位进度条置为0 + SetLabelText(lb_CH4_Status, "复位"); + CH4testCount = 0; // 重置测试次数 + CH4TestRecord.Reset(); + + // 模式切回正压 + //CH4NowMode = "正压"; + //LL28CH4client.writeRegisters(1006, GetYiqiParam(4, "P").GetArray()); + + //// 记得给PLC也写入正负压信号 + //Slot_PLC_WriteCoil(1011, false); + //Slot_PLC_WriteCoil(1003, GetYiqiParam(4, "P").opmode); + + Thread.Sleep(200); + ch4workstation = (int)yiqi.standby; + } + break; + + case (int)yiqi.prepare: + { + // 准备超时处理 + if (!prepareOutTime_Dictionary.ContainsKey(4)) + { + prepareOutTime_Dictionary[4] = DateTime.Now.AddSeconds(5); // 5s后还在准备就去启动 + } + else if (DateTime.Now > prepareOutTime_Dictionary[4]) + { + prepareOutTime_Dictionary.Remove(4); // 清除超时记录 + ch4workstation = (int)yiqi.start; + break; + } + + CH4TestTime.startTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + SetLabelText(lb_CH4_Result, ""); + SetLabelText(lb_CH4_Status, "准备"); + + int CH4progressbar = Convert.ToInt32(LL28CH4client.ArrRegister[6] / 10.0) // 充气时间 + + Convert.ToInt32(LL28CH4client.ArrRegister[7] / 10.0) // 平衡时间 + + Convert.ToInt32(LL28CH4client.ArrRegister[8] / 10.0) // 检测时间 + + Convert.ToInt32(LL28CH4client.ArrRegister[9] / 10.0); // 排气时间 + + // 配置进度条 + SetProgressBar(pb_CH4progressBar, 0); + SetProgressBarMax(pb_CH4progressBar, (CH4progressbar + 1) * 10); // 补偿1秒 + + // 设备运行状态 + if (LL28CH4client.ArrCoil[2]) + { + prepareOutTime_Dictionary.Remove(4); + ch4workstation = (int)yiqi.test; + } + } + break; + + case (int)yiqi.standby: + { + SetLabelText(lb_CH4_Status, "待机"); + + // 设备运行状态 + if (LL28CH4client.ArrCoil[2]) + { + ch4workstation = (int)yiqi.prepare; + } + } + break; + + case (int)yiqi.test: + { + int yiqirunning = Convert.ToInt32(LL28CH4client.ArrRegister[34]); + switch (yiqirunning) + { + case 1: + SetLabelText(lb_CH4_Status, "准备"); + break; + case 2: + SetLabelText(lb_CH4_Status, "充气"); + break; + case 3: + SetLabelText(lb_CH4_Status, "平衡"); + break; + case 4: + SetLabelText(lb_CH4_Status, "检测"); + break; + case 5: + SetLabelText(lb_CH4_Status, "排气"); + break; + } + + // 压力单位 + int punit = Convert.ToInt32(LL28CH4client.ArrRegister[27]); + SetPUnit(4, punit); + + // 泄漏量单位 + int lunit = Convert.ToInt32(LL28CH4client.ArrRegister[28]); + SetLUnit(4, lunit); + + // 当前压力 + string fNowpressure = LL28CH4client.readFloatF2(48); + SetLabelText(lb_CH4nowPressure, fNowpressure); + + // 充气压力(测试压力) + string fTestpressure = LL28CH4client.readFloatF2(57); + SetLabelText(lb_CH4_TestPressure, fTestpressure); + + // 大漏(平衡压差) + string fBigLeak = LL28CH4client.readFloatF2(35); + SetLabelText(lb_CH4BigLeak, fBigLeak); + + // 微漏(泄漏量) + string fSmallLeak = LL28CH4client.readFloatF2(38); + + // 处理大于2000, 先显示2000,后续再处理 + if (fSmallLeak.ToDouble() > 2000) + { + fSmallLeak = "2000"; + } + SetLabelText(lb_CH4_SmallLeak, fSmallLeak); + + // 进度条 + int pb_value = pb_CH4progressBar.Value + 5; + SetProgressBar(pb_CH4progressBar, pb_value); + + if (pb_value >= pb_CH4progressBar.Maximum) + { + pb_value = pb_CH4progressBar.Maximum; + SetProgressBar(pb_CH4progressBar, pb_value); + } + + // 设备运行状态 + if (!LL28CH4client.ArrCoil[2]) + { + int testresult = Convert.ToInt32(LL28CH4client.ArrRegister[41]); + string Overresult = ""; + if (testresult == 1) + { + Overresult = "OK"; + SetLabelText(lb_CH4_Result, "OK", Color.Green); + } + else if (testresult == 2) + { + Overresult = "NG"; + SetLabelText(lb_CH4_Result, "NG", Color.Red); + } + else + { + Overresult = ""; + SetLabelText(lb_CH4_Result, ""); + } + + if (Overresult != "") // 有ok/ng结果 + { + ch4workstation = (int)yiqi.finish; + } + else + { + SetProgressBar(pb_CH4progressBar, 0); + ch4workstation = (int)yiqi.standby; + } + } + } + break; + + case (int)yiqi.finish: + { + SetLabelText(lb_CH4_Status, "完成"); + CH4TestTime.stopTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + + // 当前压力 + string fNowpressure = LL28CH4client.readFloatF2(48); + SetLabelText(lb_CH4nowPressure, fNowpressure); + + // 充气压力 + string fTestpressure = LL28CH4client.readFloatF2(57); + SetLabelText(lb_CH4_TestPressure, fTestpressure); + + //大漏 + string fBigLeak = LL28CH4client.readFloatF2(35); + SetLabelText(lb_CH4BigLeak, fBigLeak); + + //微漏 + string fSmallLeak = LL28CH4client.readFloatF2(38); + + // 处理大于2000, 先显示2000,后续再处理 + if (fSmallLeak.ToDouble() > 2000) + { + fSmallLeak = "2000"; + } + SetLabelText(lb_CH4_SmallLeak, fSmallLeak); + + // 结果 + int Coil41result = Convert.ToInt32(LL28CH4client.ArrRegister[41]); + bool result = false; + if (Coil41result == 1) + { + SetLabelText(lb_CH4_Result, "OK", Color.Green); + result = true; + } + else if (Coil41result == 2) + { + SetLabelText(lb_CH4_Result, "NG", Color.Red); + result = false; + } + else + { + SetLabelText(lb_CH4_Result, ""); + } + + // 设备运行状态-停止 + if (!LL28CH4client.ArrCoil[2]) + { + SetProgressBar(pb_CH4progressBar, pb_CH4progressBar.Maximum); + + CH4TestRecord.Code = tb_CH4Code.Text; + + bool PorNfinish = true; // 正负压完成标志位 + bool testfinish = false; // 测试结束标志位 + + //string nowmode = CH4NowMode; + //if (CH4NowMode == "正压" && result) // 如果当前是正压并且测试OK + //{ + // // 这里要切换负压、写入负压参数、PLC信号 + // CH4NowMode = "负压"; + // Slot_PLC_WriteCoil(1011, true); + // Slot_PLC_WriteCoil(1003, GetYiqiParam(4, "N").opmode); + + // // 先更新参数 + // LL28CH4client.writeRegisters(1006, GetYiqiParam(4, "N").GetArray()); + // Thread.Sleep(300); + + // // 保存正压测试记录 + // CH4TestRecord.IsPTested = true; + // CH4TestRecord.yiqiP_Param = GetYiqiParam(4, "P").Copy(); + // CH4TestRecord.Result = result; + // CH4TestRecord.PTestPressure = fTestpressure; + // CH4TestRecord.PLeak = fSmallLeak; + //} + //else if (result == false) // 测试NG + //{ + // PorNfinish = true; // 正负压都测试了 + //} + //else if (CH4NowMode == "负压") + //{ + // // 这里要切换正压、写入正压参数、PLC信号 + // CH4NowMode = "正压"; + // Slot_PLC_WriteCoil(1011, false); + // Slot_PLC_WriteCoil(1003, GetYiqiParam(4, "P").opmode); + + // // 先更新参数 + // LL28CH4client.writeRegisters(1006, GetYiqiParam(4, "P").GetArray()); + // Thread.Sleep(300); + + // PorNfinish = true; // 正负压都测试了 + + // // 保存负压测试记录 + // CH4TestRecord.IsNTested = true; + // CH4TestRecord.yiqiN_Param = GetYiqiParam(4, "N").Copy(); + // CH4TestRecord.Result = result; + // CH4TestRecord.NTestPressure = fTestpressure; + // CH4TestRecord.NLeak = fSmallLeak; + //} + + if(PorNfinish) + { + CH4TestRecord.AddRecord(); + } + + // 连续测试 + if (result == false) // NG直接视为结束 + { + testfinish = true; + } + else if (m_ContinueTest && PorNfinish) // 开了连续并且正负压都测了 + { + CH4testCount++; + if (CH4testCount >= m_ContinueTestCount) // 测试次数满足 + { + testfinish = true; + } + else + { + SetLabelText(lb_CH4_Status, "加气"); + Thread.Sleep(5000); + ch4workstation = (int)yiqi.start; + } + } + else + { + testfinish = true; // 没开连续测试直接视为本次测试结束 + } + + // 表格 + DataGridView2.Invoke(new System.Action(Display), + 4, result, tb_CH4Code.Text, ""); + + // 测试完成并且正负压都完成则视为结束 + if (testfinish && PorNfinish) + { + if (result) + { + m_production.AddOK(); + } + else + { + m_production.AddNG(); + } + + // 更新产能 + UploadProductionData(m_production.GetTotal(), m_production.GetOK(), m_production.GetNG(), m_production.GetOKRate()); + + // 文件 + CreateFile(4, result, tb_CH4Code.Text, CH4TestRecord.GetRecordList()); + + // MES + if (m_MESswitch) + { + var rdata = chuzhan(4, tb_CH4Code.Text, m_ActionName, m_Tools, G_CHECKFLOWID, result); + if (rdata.result) + { + SetLabelText(lb_CH4MES_OUTstatus, "PASS", Color.Green); + } + else + { + SetLabelText(lb_CH4MES_OUTstatus, "NG", Color.Red); + SetUITextBox(tb_CH2MainMessage, $"CH4 出站NG:{rdata.msg}"); + } + } + + if (HCPLC_client.Connected) + { + Slot_PLC_WriteCoil(1007, true); + mxlLog.Instance.Info($"CH4 1007信号"); + } + + CH4testCount = 0; // 重置测试次数 + CH4TestRecord.Reset(); // 重置测试记录 + SetUITextBox(tb_CH4Code, ""); + ch4workstation = (int)yiqi.standby; + } + if (PorNfinish == false) // 正负压有个没测 + { + ch4workstation = (int)yiqi.start; + } + } + } + break; + + default: break; + } + } + + // 更新产能数据 + void UploadProductionData(int total, int ok, int ng, double okRate) + { + SetLabelText(lb_Total, $"{total}"); + SetLabelText(lb_OKnumber, $"{ok}"); + SetLabelText(lb_NGnumber, $"{ng}"); + SetLabelText(lb_OKRate, $"{okRate}%"); + } + + //写入文件 + private void CreateFile(int CH, bool result, string code, string data = null) + { + try + { + //Invoke((new System.Action(() => + //Task.Run(() => + //{ + if (filesave.Excel) + { + Task.Run(() => // 这个会卡顿一下,放到线程 应该是使用和打开了Excel的app + { + AddExcel(CH, result, code); + }); + } + if (filesave.TXT) + { + AddTxT(CH, data); + } + if (filesave.CSV) + { + AddCSV(CH, result); + } + //}); + } + catch (Exception ex) + { + MessageBox.Show("CreateFile:" + ex.Message); + mxlLog.Instance.Error($"CreateFile写入错误 ,行号{ex.StackTrace} ", ex); + //throw; + } + + } + + // 设置压力单位 + private void SetPUnit(int ch, int unit) + { + string PUnit = "Pa"; + switch (unit) + { + case 0: PUnit = "Pa"; break; + case 1: PUnit = "KPa"; break; + case 2: PUnit = "MPa"; break; + case 3: PUnit = "bar"; break; + case 4: PUnit = "Psi"; break; + case 5: PUnit = "kg/cm^2"; break; + case 6: PUnit = "atm"; break; + case 7: PUnit = "mmHg"; break; + } + + switch (ch) + { + case 1: + lb_CH1_PressureUnit.Invoke((MethodInvoker)delegate + { + lb_CH1BigLeakUnit.Text = PUnit; + lb_CH1_nowPressureUnit.Text = PUnit; + lb_CH1_PressureUnit.Text = PUnit; + }); + break; + case 2: + lb_CH2_PressureUnit.Invoke((MethodInvoker)delegate + { + lb_CH2BigLeakUnit.Text = PUnit; + lb_CH2_nowPressureUnit.Text = PUnit; + lb_CH2_PressureUnit.Text = PUnit; + }); + break; + case 3: + lb_CH3_PressureUnit.Invoke((MethodInvoker)delegate + { + lb_CH3BigLeakUnit.Text = PUnit; + lb_CH3_nowPressureUnit.Text = PUnit; + lb_CH3_PressureUnit.Text = PUnit; + }); + break; + case 4: + lb_CH4_PressureUnit.Invoke((MethodInvoker)delegate + { + lb_CH4BigLeakUnit.Text = PUnit; + lb_CH4_nowPressureUnit.Text = PUnit; + lb_CH4_PressureUnit.Text = PUnit; + }); + break; + } + } + + // 设置泄露量单位 + private void SetLUnit(int ch, int unit) + { + string LUnit = "Pa"; + switch (unit) + { + case 0: LUnit = "Pa"; break; + case 1: LUnit = "KPa"; break; + case 2: LUnit = "mbar"; break; + case 3: LUnit = "atm"; break; + case 4: LUnit = "sccm"; break; + case 5: LUnit = "ccm3/s"; break; + case 6: LUnit = "Pa/s"; break; + } + + switch (ch) + { + case 1: + lb_CH1_SmallLeakUnit.Invoke((MethodInvoker)delegate + { + //lb_CH1_BigLeakUnit.Text = LUnit; + lb_CH1_SmallLeakUnit.Text = LUnit; + }); + break; + case 2: + lb_CH2_SmallLeakUnit.Invoke((MethodInvoker)delegate + { + //lb_CH2_BigLeakUnit.Text = LUnit; + lb_CH2_SmallLeakUnit.Text = LUnit; + }); + break; + case 3: + lb_CH3_SmallLeakUnit.Invoke((MethodInvoker)delegate + { + //lb_CH3_BigLeakUnit.Text = LUnit; + lb_CH3_SmallLeakUnit.Text = LUnit; + }); + break; + case 4: + lb_CH4_SmallLeakUnit.Invoke((MethodInvoker)delegate + { + //lb_CH4_BigLeakUnit.Text = LUnit; + lb_CH4_SmallLeakUnit.Text = LUnit; + }); + break; + } + } + + + //将数据写入Txt + public void AddTxT(int CH, bool result, string code) + { + try + { + string datatime = DateTime.Now.ToString("yyyyMMdd"); + if (String.IsNullOrEmpty(filesave.Path)) // 若路径处不输入则获取桌面路径 + { + filesave.Path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + filesave.Path = AppDomain.CurrentDomain.BaseDirectory + "Storage"; + } + + string filepath = filesave.Path + "\\"; + + if (!Directory.Exists(filepath)) + { + Directory.CreateDirectory(filepath); + } + + string updata = ""; + if (CH == 1) + { + string ngret = ""; + string fSmallLeak = LL28CH1client.readFloatF2(38); + if (fSmallLeak.ToDouble() > 2000) + { + ngret = LeakNG_ARP(fSmallLeak); + } + else + { + ngret = lb_CH1_SmallLeak.Text + lb_CH1_SmallLeakUnit.Text; + } + + updata = "CH1 " + "时间 " + DateTime.Now + " 条形码 " + code + + " 结果" + (result ? "OK" : "NG") + + " 充气时间" + (LL28CH1client.ArrRegister[6] / 10.0).ToString() + "s" + + " 平衡时间" + (LL28CH1client.ArrRegister[7] / 10.0).ToString() + "s" + + " 测试时间" + (LL28CH1client.ArrRegister[8] / 10.0).ToString() + "s" + + " 排气时间" + (LL28CH1client.ArrRegister[9] / 10.0).ToString() + "s" + + " 测试压力" + lb_CH1_TestPressure.Text + lb_CH1_PressureUnit.Text + + " 泄漏量" + ngret + " \n"; + } + if (CH == 2) + { + string ngret = ""; + string fSmallLeak = LL28CH2client.readFloatF2(38); + if (fSmallLeak.ToDouble() > 2000) + { + ngret = LeakNG_ARP(fSmallLeak); + } + else + { + ngret = lb_CH2_SmallLeak.Text + lb_CH2_SmallLeakUnit.Text; + } + updata = "CH2 " + "时间 " + DateTime.Now + " 条形码 " + code + + " 结果" + (result ? "OK" : "NG") + + " 充气时间" + (LL28CH2client.ArrRegister[6] / 10.0).ToString() + "s" + + " 平衡时间" + (LL28CH2client.ArrRegister[7] / 10.0).ToString() + "s" + + " 测试时间" + (LL28CH2client.ArrRegister[8] / 10.0).ToString() + "s" + + " 排气时间" + (LL28CH2client.ArrRegister[9] / 10.0).ToString() + "s" + + " 测试压力" + lb_CH2_TestPressure.Text + lb_CH2_PressureUnit.Text + + " 泄漏量" + ngret + " \n"; + } + + if (CH == 3) + { + string ngret = ""; + string fSmallLeak = LL28CH3client.readFloatF2(38); + if (fSmallLeak.ToDouble() > 2000) + { + ngret = LeakNG_ARP(fSmallLeak); + } + else + { + ngret = lb_CH3_SmallLeak.Text + lb_CH3_SmallLeakUnit.Text; + } + updata = "CH3 " + "时间 " + DateTime.Now + " 条形码 " + code + + " 结果" + (result ? "OK" : "NG") + + " 充气时间" + (LL28CH3client.ArrRegister[6] / 10.0).ToString() + "s" + + " 平衡时间" + (LL28CH3client.ArrRegister[7] / 10.0).ToString() + "s" + + " 测试时间" + (LL28CH3client.ArrRegister[8] / 10.0).ToString() + "s" + + " 排气时间" + (LL28CH3client.ArrRegister[9] / 10.0).ToString() + "s" + + " 测试压力" + lb_CH3_TestPressure.Text + lb_CH3_PressureUnit.Text + + " 泄漏量" + ngret + " \n"; + } + + if (CH == 4) + { + string ngret = ""; + string fSmallLeak = LL28CH4client.readFloatF2(38); + if (fSmallLeak.ToDouble() > 2000) + { + ngret = LeakNG_ARP(fSmallLeak); + } + else + { + ngret = lb_CH4_SmallLeak.Text + lb_CH4_SmallLeakUnit.Text; + } + updata = "CH4 " + "时间 " + DateTime.Now + " 条形码 " + code + + " 结果" + (result ? "OK" : "NG") + + " 充气时间" + (LL28CH4client.ArrRegister[6] / 10.0).ToString() + "s" + + " 平衡时间" + (LL28CH4client.ArrRegister[7] / 10.0).ToString() + "s" + + " 测试时间" + (LL28CH4client.ArrRegister[8] / 10.0).ToString() + "s" + + " 排气时间" + (LL28CH4client.ArrRegister[9] / 10.0).ToString() + "s" + + " 测试压力" + lb_CH4_TestPressure.Text + lb_CH4_PressureUnit.Text + + " 泄漏量" + ngret + " \n"; + } + + // 文件不存在则创建 + string strfile = filepath + DateTime.Today.ToString("yyyy-MM-dd") + "_" + CH + ".txt"; + if (!System.IO.File.Exists(strfile)) + { + FileStream fs1 = new FileStream(strfile, FileMode.Create, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs1); + sw.WriteLine(updata); //开始写入值 + sw.Close(); + fs1.Close(); + } + else + { + FileStream fs = new FileStream(strfile, FileMode.Append, FileAccess.Write); + StreamWriter sr = new StreamWriter(fs); + sr.WriteLine(updata); //开始写入值 + sr.Close(); + fs.Close(); + } + } + catch (Exception ex) + { + mxlLog.Instance.Error($"AddTxT写入错误 CH{CH}: {ex.Message}", ex); + } + } + + //将数据写入Txt + public void AddTxT(int CH, string updata) + { + try + { + string datatime = DateTime.Now.ToString("yyyyMMdd"); + if (String.IsNullOrEmpty(filesave.Path)) // 若路径处不输入则获取桌面路径 + { + filesave.Path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + filesave.Path = AppDomain.CurrentDomain.BaseDirectory + "Storage"; + } + + string filepath = filesave.Path + "\\"; + + if (!Directory.Exists(filepath)) + { + Directory.CreateDirectory(filepath); + } + + // 文件不存在则创建 + string strfile = filepath + DateTime.Today.ToString("yyyy-MM-dd") + "_" + CH + ".txt"; + if (!System.IO.File.Exists(strfile)) + { + FileStream fs1 = new FileStream(strfile, FileMode.Create, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs1); + sw.WriteLine(updata); //开始写入值 + sw.Close(); + fs1.Close(); + } + else + { + FileStream fs = new FileStream(strfile, FileMode.Append, FileAccess.Write); + StreamWriter sr = new StreamWriter(fs); + sr.WriteLine(updata); //开始写入值 + sr.Close(); + fs.Close(); + } + } + catch (Exception ex) + { + mxlLog.Instance.Error($"AddTxT写入错误 CH{CH}: {ex.Message}", ex); + } + } + + //将数据写入Excel表格 通道 结果 条码 + private void AddExcel(int CH, bool result, string code) + { + Console.WriteLine($"AddExcel code: {code}"); + try + { + string datatime = DateTime.Now.ToString("yyyyMMdd"); + if (String.IsNullOrEmpty(filesave.Path)) // 若路径处不输入则获取桌面路径 + { + filesave.Path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + } + + string filepath = filesave.Path + "\\"; + + if (CH == 1) + { + filepath += "CH1\\"; + } + else if(CH == 2) + { + filepath += "CH2\\"; + } + else if (CH == 3) + { + filepath += "CH3\\"; + } + else if (CH == 4) + { + filepath += "CH4\\"; + } + + if (!Directory.Exists(filepath)) // 没有则创建 + { + Directory.CreateDirectory(filepath); + } + string name = CH.ToString() + "_" + datatime + ".xls"; + filepath += name; + + Excel.Application xapp = new Excel.Application(); + Excel.Workbook xbook = null; + + if (File.Exists(filepath) == false) // 文件没有则创建 + { + // 若不存在该文件,则创建新文件 + xbook = xapp.Workbooks.Add(); + + Excel.Worksheet hxsheet = (Excel.Worksheet)xbook.Sheets[1]; + + string[] fieldArr = { "时间", + "条形码", + "充气时间", + "平衡时间", + "检测时间", + "排气时间", + "充气压力上限", + "充气压力下限", + "平衡压差上限", + "平衡压差下限", + "泄漏量上限", + "泄漏量下限", + "测试结果", + "测试压力", + "微漏泄漏量" + }; + + //写入表头 + for (int i = 0; i < fieldArr.Length; i++) + { + hxsheet.Cells[1, i + 1] = fieldArr[i]; + } + + xbook.SaveAs(filepath); + xbook.Close(); + } + + // 打开文件 + xbook = xapp.Workbooks.Open(filepath); + Excel.Worksheet xsheet = (Excel.Worksheet)xbook.Sheets[1]; + + // 获取最后一行 + int lastRow = xsheet.Cells.Find("*", System.Reflection.Missing.Value, + System.Reflection.Missing.Value, + System.Reflection.Missing.Value, + Excel.XlSearchOrder.xlByRows, + Excel.XlSearchDirection.xlPrevious, + false, System.Reflection.Missing.Value, + System.Reflection.Missing.Value).Row; + + // 准备数据 + string[] dataArr = null; + if (CH == 1) + { + string ngret = ""; + string fSmallLeak = LL28CH1client.readFloatF2(38); + if (fSmallLeak.ToDouble() > 2000) + { + ngret = LeakNG_ARP(fSmallLeak); + } + else + { + ngret = lb_CH1_SmallLeak.Text + lb_CH1_SmallLeakUnit.Text; + } + dataArr = new string[] { + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), + code, + (LL28CH1client.ArrRegister[6] / 10.0).ToString() + "s", + (LL28CH1client.ArrRegister[7] / 10.0).ToString() + "s", + (LL28CH1client.ArrRegister[8] / 10.0).ToString() + "s", + (LL28CH1client.ArrRegister[9] / 10.0).ToString() + "s", + LL28CH1client.readFloatF2(13) + lb_CH1_PressureUnit.Text, + LL28CH1client.readFloatF2(15) + lb_CH1_PressureUnit.Text, + LL28CH1client.readFloatF2(17) + lb_CH1_PressureUnit.Text, + LL28CH1client.readFloatF2(19) + lb_CH1_PressureUnit.Text, + LL28CH1client.readFloatF2(21) + lb_CH1_SmallLeakUnit.Text, + LL28CH1client.readFloatF2(23) + lb_CH1_SmallLeakUnit.Text, + result ? "OK":"NG", + lb_CH1_TestPressure.Text + lb_CH1_PressureUnit.Text, + ngret + }; + } + else if (CH == 2) + { + string ngret = ""; + string fSmallLeak = LL28CH2client.readFloatF2(38); + if (fSmallLeak.ToDouble() > 2000) + { + ngret = LeakNG_ARP(fSmallLeak); + } + else + { + ngret = lb_CH2_SmallLeak.Text + lb_CH2_SmallLeakUnit.Text; + } + dataArr = new string[] { + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), + code, + (LL28CH2client.ArrRegister[6] / 10.0).ToString() + "s", + (LL28CH2client.ArrRegister[7] / 10.0).ToString() + "s", + (LL28CH2client.ArrRegister[8] / 10.0).ToString() + "s", + (LL28CH2client.ArrRegister[9] / 10.0).ToString() + "s", + LL28CH2client.readFloatF2(13) + lb_CH2_PressureUnit.Text, + LL28CH2client.readFloatF2(15) + lb_CH2_PressureUnit.Text, + LL28CH2client.readFloatF2(17) + lb_CH2_PressureUnit.Text, + LL28CH2client.readFloatF2(19) + lb_CH2_PressureUnit.Text, + LL28CH2client.readFloatF2(21) + lb_CH2_SmallLeakUnit.Text, + LL28CH2client.readFloatF2(23) + lb_CH2_SmallLeakUnit.Text, + result ? "OK":"NG", + lb_CH2_TestPressure.Text + lb_CH2_PressureUnit.Text, + ngret + }; + } + else if (CH == 3) + { + string ngret = ""; + string fSmallLeak = LL28CH3client.readFloatF2(38); + if (fSmallLeak.ToDouble() > 2000) + { + ngret = LeakNG_ARP(fSmallLeak); + } + else + { + ngret = lb_CH3_SmallLeak.Text + lb_CH3_SmallLeakUnit.Text; + } + dataArr = new string[] { + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), + code, + (LL28CH3client.ArrRegister[6] / 10.0).ToString() + "s", + (LL28CH3client.ArrRegister[7] / 10.0).ToString() + "s", + (LL28CH3client.ArrRegister[8] / 10.0).ToString() + "s", + (LL28CH3client.ArrRegister[9] / 10.0).ToString() + "s", + LL28CH3client.readFloatF2(13) + lb_CH3_PressureUnit.Text, + LL28CH3client.readFloatF2(15) + lb_CH3_PressureUnit.Text, + LL28CH3client.readFloatF2(17) + lb_CH3_PressureUnit.Text, + LL28CH3client.readFloatF2(19) + lb_CH3_PressureUnit.Text, + LL28CH3client.readFloatF2(21) + lb_CH3_SmallLeakUnit.Text, + LL28CH3client.readFloatF2(23) + lb_CH3_SmallLeakUnit.Text, + result ? "OK":"NG", + lb_CH3_TestPressure.Text + lb_CH3_PressureUnit.Text, + ngret + }; + } + else if (CH == 4) + { + string ngret = ""; + string fSmallLeak = LL28CH4client.readFloatF2(38); + if (fSmallLeak.ToDouble() > 2000) + { + ngret = LeakNG_ARP(fSmallLeak); + } + else + { + ngret = lb_CH4_SmallLeak.Text + lb_CH4_SmallLeakUnit.Text; + } + dataArr = new string[] { + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), + code, + (LL28CH4client.ArrRegister[6] / 10.0).ToString() + "s", + (LL28CH4client.ArrRegister[7] / 10.0).ToString() + "s", + (LL28CH4client.ArrRegister[8] / 10.0).ToString() + "s", + (LL28CH4client.ArrRegister[9] / 10.0).ToString() + "s", + LL28CH4client.readFloatF2(13) + lb_CH4_PressureUnit.Text, + LL28CH4client.readFloatF2(15) + lb_CH4_PressureUnit.Text, + LL28CH4client.readFloatF2(17) + lb_CH4_PressureUnit.Text, + LL28CH4client.readFloatF2(19) + lb_CH4_PressureUnit.Text, + LL28CH4client.readFloatF2(21) + lb_CH4_SmallLeakUnit.Text, + LL28CH4client.readFloatF2(23) + lb_CH4_SmallLeakUnit.Text, + result ? "OK":"NG", + lb_CH4_TestPressure.Text + lb_CH4_PressureUnit.Text, + ngret + }; + } + + // 写入数据 + for (int i = 0; i < dataArr.Length; i++) + { + xsheet.Cells[lastRow + 1, i + 1] = dataArr[i]; + } + + // 保存并关闭 + xbook.Save(); + xbook.Close(); + xapp.Quit(); + + // 释放COM对象 + Marshal.ReleaseComObject(xsheet); + Marshal.ReleaseComObject(xbook); + Marshal.ReleaseComObject(xapp); + + //// 在保存完成后,生成图表 + //System.Threading.ThreadPool.QueueUserWorkItem(state => + //{ + // // 生成趋势图(每20个产品生成一次) + // Chart.Create_TrendChart(CH, filepath, 20); + + // // 生成统计图(每天生成一次) + // Chart.Create_PieChart(CH, filepath); + //}); + } + catch (Exception ex) + { + MessageBox.Show("Excel写入错误:" + ex.Message); + mxlLog.Instance.Error($"Excel写入错误 ,行号{ex.StackTrace} ", ex); + } + finally + { + // 确保Excel进程被关闭 + GC.Collect(); + GC.WaitForPendingFinalizers(); + } + } + + //离线版CSV文件 + private void AddCSVLiXianNg(int CH, bool IsSpot, string code) + { + try + { + string fileName; + string file = DateTime.Now.ToString("yyyyMMdd"); + if (String.IsNullOrEmpty(filesave.Path)) + { + fileName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\"; + } + else + { + fileName = filesave.Path + "\\"; + } + if (IsSpot) + { + if (CH == 1) + { + fileName += "离线OK\\"; + file = "1_" + file; + } + else if (CH == 2) + + { + fileName += "离线OK\\"; + file = "2_" + file; + } + else if (CH == 3) + + { + //fileName += "Left\\"; + fileName += "离线OK\\"; + file = "3_" + file; + } + } + else + { + if (CH == 1) + { + //fileName += "Left\\"; + fileName += "离线NG\\"; + file = "1_" + file; + } + else if (CH == 2) + { + //fileName += "Right\\"; + fileName += "离线NG\\"; + file = "2_" + file; + } + else + { + //fileName += "Right\\"; + fileName += "离线NG\\"; + file = "3_" + file; + } + } + + if (!Directory.Exists(fileName)) + { + Directory.CreateDirectory(fileName); + } + string name = file + ".csv"; + fileName += name; + if (File.Exists(fileName) == false) + { + StreamWriter fileWriter1 = new StreamWriter(fileName, true, Encoding.UTF8); + fileWriter1.Write("时间,条形码,充气时间,平衡时间,测试时间,排气时间,测试压力,泄漏量,测试结果" + "\r\n"); + fileWriter1.Flush(); + fileWriter1.Close(); + } + StreamWriter fileWriter = new StreamWriter(fileName, true, Encoding.UTF8); + + string nowdate = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); + + if (CH == 1) + { + //fileWriter.Write(nowdate + ",\t" + MesCh1Code + ","); + //fileWriter.Write(ch1params.FullTime + "s" + ","); + //fileWriter.Write(ch1params.BalanTime + "s" + ","); + //fileWriter.Write(ch1params.TestTime1 + "s" + ","); + //fileWriter.Write(ch1params.ExhaustTime + "s" + ","); + //fileWriter.Write(ch1params.FPtoplimit + ch1params.PUnit + ","); + //fileWriter.Write(ch1params.FPlowlimit + ch1params.PUnit + ","); + //fileWriter.Write(ch1params.BalanPreMax + "Pa" + ","); + //fileWriter.Write(ch1params.BalanPreMin + "Pa" + ","); + //fileWriter.Write(ch1params.Leaktoplimit + ch1params.LUnit + ","); + //fileWriter.Write(ch1params.Leaklowlimit + ch1params.LUnit + ","); + //fileWriter.Write(CH1Tlight.Text + ","); + //fileWriter.Write(lb_CH1_TestPressure.Text + ch1params.PUnit + ","); + //fileWriter.Write(CH1BigLeak.Text + ","); + //fileWriter.Write(lb_CH1_SmallLeak.Text + ch1params.LUnit + ","); + + fileWriter.Write(lb_CH1_Result.Text + "\n"); + } + if (CH == 2) + { + //fileWriter.Write(nowdate + ",\t" + MesCh2Code + ","); + //fileWriter.Write(ch2params.FullTime + "s" + ","); + //fileWriter.Write(ch2params.BalanTime + "s" + ","); + //fileWriter.Write(ch2params.TestTime1 + "s" + ","); + //fileWriter.Write(ch2params.ExhaustTime + "s" + ","); + //fileWriter.Write(ch2params.FPtoplimit + ch2params.PUnit + ","); + //fileWriter.Write(ch2params.FPlowlimit + ch2params.PUnit + ","); + //fileWriter.Write(ch2params.BalanPreMax + "Pa" + ","); + //fileWriter.Write(ch2params.BalanPreMin + "Pa" + ","); + //fileWriter.Write(ch2params.Leaktoplimit + ch2params.LUnit + ","); + //fileWriter.Write(ch2params.Leaklowlimit + ch2params.LUnit + ","); + //fileWriter.Write(CH2Tlight.Text + ","); + //fileWriter.Write(CH2LeakPress.Text + ch2params.PUnit + ","); + //fileWriter.Write(CH2BigLeak.Text + ","); + //fileWriter.Write(CH2SmallLeak.Text + ch2params.LUnit + ","); + //fileWriter.Write(CH2Tlight.Text + "\n"); + } + + fileWriter.Flush(); + fileWriter.Close(); + } + catch (Exception ex) + { + //MessageBox.Show("CSV:" + ex.Message); + //wa.InsertWarningData(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "-", "CSV:" + ex.Message); + } + } + + //将数据写入CSV文件中 + private void AddCSV(int CH, bool IsSpot) + { + try + { + string fileName; + string file = DateTime.Now.ToString("yyyyMMdd"); + if (String.IsNullOrEmpty(filesave.Path)) + { + fileName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\"; + } + else + { + fileName = filesave.Path + "\\"; + } + if (IsSpot) + { + if (CH == 1) + { + fileName += "在线OK\\"; + file = "1_" + file; + } + else if (CH == 2) + { + fileName += "在线OK\\"; + file = "2_" + file; + } + else + { + fileName += "在线OK\\"; + file = "3_" + file; + } + } + else + { + if (CH == 1) + { + //fileName += "Left\\"; + fileName += "在线NG\\"; + file = "1_" + file; + } + else if (CH == 2) + { + //fileName += "Right\\"; + fileName += "在线NG\\"; + file = "2_" + file; + } + else + { + fileName += "在线NG\\"; + file = "3_" + file; + } + } + + if (!Directory.Exists(fileName)) + { + Directory.CreateDirectory(fileName); + } + string name = file + ".csv"; + fileName += name; + + + if (File.Exists(fileName) == false) + { + StreamWriter fileWriter1 = new StreamWriter(fileName, true, Encoding.UTF8); + fileWriter1.Write("时间,条形码,充气时间,平衡时间,测试时间,排气时间,测试压力,泄漏量,测试结果" + "\r\n"); + fileWriter1.Flush(); + fileWriter1.Close(); + } + StreamWriter fileWriter = new StreamWriter(fileName, true, Encoding.UTF8); + + string nowdate = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); + + if (CH == 1) + { + //fileWriter.Write(nowdate + ",\t" + MesCh1Code + ","); + //fileWriter.Write(ch1params.FullTime + "s" + ","); + //fileWriter.Write(ch1params.BalanTime + "s" + ","); + //fileWriter.Write(ch1params.TestTime1 + "s" + ","); + //fileWriter.Write(ch1params.ExhaustTime + "s" + ","); + //fileWriter.Write(ch1params.FPtoplimit + ch1params.PUnit + ","); + //fileWriter.Write(ch1params.FPlowlimit + ch1params.PUnit + ","); + //fileWriter.Write(ch1params.BalanPreMax + "Pa" + ","); + //fileWriter.Write(ch1params.BalanPreMin + "Pa" + ","); + //fileWriter.Write(ch1params.Leaktoplimit + ch1params.LUnit + ","); + //fileWriter.Write(ch1params.Leaklowlimit + ch1params.LUnit + ","); + + //fileWriter.Write(lb_CH1_TestPressure.Text + ch1params.PUnit + ","); + //fileWriter.Write(CH1BigLeak.Text + ","); + //fileWriter.Write(lb_CH1_SmallLeak.Text + ch1params.LUnit + ","); + fileWriter.Write(lb_CH1_Result.Text + "\n"); + //fileWriter.Write(CH1Tlight.Text + "\n"); + } + if (CH == 2) + { + //fileWriter.Write(nowdate + ",\t" + MesCh2Code + ","); + //fileWriter.Write(ch2params.FullTime + "s" + ","); + //fileWriter.Write(ch2params.BalanTime + "s" + ","); + //fileWriter.Write(ch2params.TestTime1 + "s" + ","); + //fileWriter.Write(ch2params.ExhaustTime + "s" + ","); + //fileWriter.Write(ch2params.FPtoplimit + ch2params.PUnit + ","); + //fileWriter.Write(ch2params.FPlowlimit + ch2params.PUnit + ","); + //fileWriter.Write(ch2params.BalanPreMax + "Pa" + ","); + //fileWriter.Write(ch2params.BalanPreMin + "Pa" + ","); + //fileWriter.Write(ch2params.Leaktoplimit + ch2params.LUnit + ","); + //fileWriter.Write(ch2params.Leaklowlimit + ch2params.LUnit + ","); + fileWriter.Write(lb_CH2_Result.Text + ","); + //fileWriter.Write(CH2LeakPress.Text + ch2params.PUnit + ","); + fileWriter.Write(lb_CH2BigLeak.Text + ","); + //fileWriter.Write(CH2SmallLeak.Text + ch2params.LUnit + ","); + fileWriter.Write(lb_CH2_Result.Text + "\n"); + } + + fileWriter.Flush(); + fileWriter.Close(); + } + catch (Exception ex) + { + //MessageBox.Show("CSV:" + ex.Message); + //wa.InsertWarningData(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "-", "CSV:" + ex.Message); + } + } + + + //在界面显示数据 + private void Display(int CH, bool result, string code ,string mode) + { + string nowdate = DateTime.Now.ToString("HH:mm:ss"); + if (CH == 1) + { + string ngret = ""; + string fSmallLeak = LL28CH1client.readFloatF2(38); + if (fSmallLeak.ToDouble() > 2000) + { + ngret = LeakNG_ARP(fSmallLeak); + } + else + { + ngret = lb_CH1_SmallLeak.Text + lb_CH1_SmallLeakUnit.Text; + } + string[] dataArr = { $"[CH{CH}{mode}] {nowdate}", code, lb_CH1_TestPressure.Text + lb_CH1_PressureUnit.Text, ngret, result ? "OK":"NG"}; + DataGridView1.Rows.Insert(0, dataArr[0], dataArr[1], dataArr[2], dataArr[3], dataArr[4]); + } + if (CH == 3) + { + string ngret = ""; + string fSmallLeak = LL28CH3client.readFloatF2(38); + if (fSmallLeak.ToDouble() > 2000) + { + ngret = LeakNG_ARP(fSmallLeak); + } + else + { + ngret = lb_CH3_SmallLeak.Text + lb_CH3_SmallLeakUnit.Text; + } + string[] dataArr = { $"[CH{CH}{mode}] {nowdate}", code, lb_CH3_TestPressure.Text + lb_CH3_PressureUnit.Text, ngret, result ? "OK" : "NG" }; + DataGridView1.Rows.Insert(0, dataArr[0], dataArr[1], dataArr[2], dataArr[3], dataArr[4]); + } + + if (CH == 2) + { + string ngret = ""; + string fSmallLeak = LL28CH2client.readFloatF2(38); + if (fSmallLeak.ToDouble() > 2000) + { + ngret = LeakNG_ARP(fSmallLeak); + } + else + { + ngret = lb_CH2_SmallLeak.Text + lb_CH2_SmallLeakUnit.Text; + } + string[] dataArr = { $"[CH{CH}{mode}] {nowdate}", code, lb_CH2_TestPressure.Text + lb_CH2_PressureUnit.Text, ngret, result ? "OK" : "NG"}; + DataGridView2.Rows.Insert(0, dataArr[0], dataArr[1], dataArr[2], dataArr[3], dataArr[4]); + } + if (CH == 4) + { + string ngret = ""; + string fSmallLeak = LL28CH4client.readFloatF2(38); + if (fSmallLeak.ToDouble() > 2000) + { + ngret = LeakNG_ARP(fSmallLeak); + } + else + { + ngret = lb_CH4_SmallLeak.Text + lb_CH4_SmallLeakUnit.Text; + } + string[] dataArr = { $"[CH{CH}{mode}] {nowdate}", code, lb_CH4_TestPressure.Text + lb_CH4_PressureUnit.Text, ngret, result ? "OK" : "NG" }; + DataGridView2.Rows.Insert(0, dataArr[0], dataArr[1], dataArr[2], dataArr[3], dataArr[4]); + } + } + + // 解析NG项 + private string LeakNG_ARP(string leakdata) + { + //int sw = leakdata.ToInt(); + if (leakdata.Split(".")[0] == "5000") + { + return "超出充气上限"; + } + if (leakdata.Split(".")[0] == "5001") + { + return "超出充气下限"; + } + if (leakdata.Split(".")[0] == "5002") + { + return "超出平衡压差上限"; + } + if (leakdata.Split(".")[0] == "5003") + { + return "超出平衡压差下限"; + } + if (leakdata.Split(".")[0] == "5004") + { + return "平衡超出充气压力上限"; + } + if (leakdata.Split(".")[0] == "5005") + { + return "平衡超出充气压力下限"; + } + return "--"; + } + + // 解析NG项 + private string LeakNG_ARP_Text(string leakdata) + { + if (leakdata.Split(".")[0] == "5000") + return "50"; // "超出充气上限" + + if (leakdata.Split(".")[0] == "5001") + return "51"; // "超出充气下限" + + if (leakdata.Split(".")[0] == "5002") + return "52"; //"超出平衡压差上限" + + if (leakdata.Split(".")[0] == "5003") + return "53"; //"超出平衡压差下限" + + if (leakdata.Split(".")[0] == "5004") + return "54"; //"平衡超出充气压力上限" + + if (leakdata.Split(".")[0] == "5005") + return "55"; //"平衡超出充气压力下限" + + return "49"; + } + + // 关闭窗口 + private void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + if (MessageBox.Show("将要关闭窗体,是否继续?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + if (cts != null && !cts.IsCancellationRequested) + { + cts.Cancel(); // 取消任务 + cts.Dispose(); // 释放资源 + } + + LL28CH1client?.Stop(); // 停止线程 + LL28CH1client?.Disconnect(); // 断开连接 + LL28CH1client?.Dispose(); // 释放资源 + LL28CH1client = null; + + LL28CH2client?.Stop(); // 停止线程 + LL28CH2client?.Disconnect(); // 断开连接 + LL28CH2client?.Dispose(); // 释放资源 + LL28CH2client = null; + + LL28CH3client?.Stop(); // 停止线程 + LL28CH3client?.Disconnect(); // 断开连接 + LL28CH3client?.Dispose(); // 释放资源 + LL28CH3client = null; + + LL28CH4client?.Stop(); // 停止线程 + LL28CH4client?.Disconnect(); // 断开连接 + LL28CH4client?.Dispose(); // 释放资源 + LL28CH4client = null; + + e.Cancel = false; + Application.Exit(); + } + else + { + e.Cancel = true; + } + } + + // 更新UI标签文本 + private void SetLabelText(System.Windows.Forms.Label label, string text, Color? color = null) + { + try + { + if (label.IsDisposed || cts?.IsCancellationRequested == true) + return; + + if (label.InvokeRequired) + { + label.BeginInvoke((MethodInvoker)delegate + { + if (!label.IsDisposed) + { + label.Text = text; + if (color.HasValue) + label.ForeColor = color.Value; + } + }); + } + else + { + if (!label.IsDisposed) + { + label.Text = text; + if (color.HasValue) + label.ForeColor = color.Value; + } + } + } + catch (ObjectDisposedException) + { + + } + } + + // 更新UI文本框文本 + private void SetUITextBox(UITextBox textbox, string text, Color? color = null) + { + try + { + if (textbox.IsDisposed || cts?.IsCancellationRequested == true) + return; + + if (textbox.InvokeRequired) + { + textbox.BeginInvoke((MethodInvoker)delegate + { + if (!textbox.IsDisposed) + { + textbox.Text = text; + if (color.HasValue) + textbox.ForeColor = color.Value; + } + }); + } + else + { + if (!textbox.IsDisposed) + { + textbox.Text = text; + if (color.HasValue) + textbox.ForeColor = color.Value; + } + } + } + catch (ObjectDisposedException) + { + + } + } + + // 更新UI文本框文本 + private void SetUITextBox(System.Windows.Forms.TextBox textbox, string text, Color? color = null) + { + try + { + if (textbox.IsDisposed || cts?.IsCancellationRequested == true) + return; + + if (textbox.InvokeRequired) + { + textbox.BeginInvoke((MethodInvoker)delegate + { + if (!textbox.IsDisposed) + { + textbox.Text = text; + if (color.HasValue) + textbox.ForeColor = color.Value; + } + }); + } + else + { + if (!textbox.IsDisposed) + { + textbox.Text = text; + if (color.HasValue) + textbox.ForeColor = color.Value; + } + } + } + catch (ObjectDisposedException) + { + + } + } + + // 更新进度条值 + private void SetProgressBar(Sunny.UI.UIProcessBar progressBar, int value) + { + try + { + if (progressBar.IsDisposed || cts?.IsCancellationRequested == true) + return; + + if (progressBar.InvokeRequired) + { + progressBar.BeginInvoke((MethodInvoker)delegate + { + if (!progressBar.IsDisposed) + { + progressBar.Value = Math.Min(value, progressBar.Maximum); + } + }); + } + else + { + if (!progressBar.IsDisposed) + { + progressBar.Value = Math.Min(value, progressBar.Maximum); + } + } + } + catch (ObjectDisposedException) + { + // + } + } + + // 设置进度条最大值 + private void SetProgressBarMax(Sunny.UI.UIProcessBar progressBar, int maximum) + { + try + { + if (progressBar.IsDisposed || cts?.IsCancellationRequested == true) + return; + + if (progressBar.InvokeRequired) + { + progressBar.BeginInvoke((MethodInvoker)delegate + { + if (!progressBar.IsDisposed) + { + progressBar.Maximum = maximum; + // 确保当前值不超过新的最大值 + if (progressBar.Value > maximum) + progressBar.Value = maximum; + } + }); + } + else + { + if (!progressBar.IsDisposed) + { + progressBar.Maximum = maximum; + if (progressBar.Value > maximum) + progressBar.Value = maximum; + } + } + } + catch (ObjectDisposedException) + { + // + } + } + + + // 串口1接收函数(扫码枪1) + //private void CodePort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) + //{ + // try + // { + // System.Threading.Thread.Sleep(50); + // int len = CodePort1.BytesToRead; //获取可以读取的字节数 + // if (len > 1) + // { + // byte[] buff = new byte[len]; //创建缓存数据数组 + // CodePort1.Read(buff, 0, len); //把数据读取到buff数组 + // Invoke((new System.Action(() => //接收计数 + // { + // string time = DateTime.Now.ToString(); + // string code = Encoding.Default.GetString(buff); + // string CODE = code.Replace("\r\n", ""); + // //log.MES_Logmsg(time + " " + CODE); + // //ClcCode = CODE; + + // string codecd = CODE.Length.ToString(); + // // PlcCode = code.Substring(0,int.Parse(CH1codeLeng.Text)); + + // Console.WriteLine("扫码枪1串口收到:" + code); + // if (CODE.Length == int.Parse(CH1codeLeng.Text)) + // { + // CH1Code.Text = CODE; + // Slot_PLC_WriteCoil(502, true); + // ChkINMsg.Text = "CH1扫码完成"; + // } + // else + // { + // ChkINMsg.Text = "当前条形码长度为" + CODE.Length + " " + "所设置的条码长度为" + CH1codeLeng.Text; + // } + // //PlcReadCode.Interval = 500; + // //PlcReadCode.Start(); + // // CodeLength(code); + // CodePort1.DiscardInBuffer(); + // //c#如何把a跟b数据绑定在一起并判断 a是string b是bool + // }))); + + // //入站接口 + // // AddGhMES_CheckPass(); + // } + // else + // { + // return; + // } + // } + // catch (Exception ex) + // { + // ShowMessage("Code1:" + ex.Message, 2); + // log.PLC_Logmsg(DateTime.Now.ToString() + " " + ex.Message); + // } + //} + + // 主界面菜单栏 + private void uiNavBar1_MenuItemClick(string itemText, int menuIndex, int pageIndex) + { + if (!String.IsNullOrEmpty(User) && (User != "操作员")) + { + if (itemText == "PLC控制") + { + Form_PLCcontrol elec = new Form_PLCcontrol(); + elec.Signal_PLC_WriteCoil += Slot_PLC_WriteCoil; + OpenForm(elec); + } + + if (itemText == "PLC通讯配置") + { + Form_PLC_Serialport elec = new Form_PLC_Serialport(); + OpenForm(elec); + } + + if (itemText == "PLC网口配置") + { + Form_PLC_TCP elec = new Form_PLC_TCP(); + OpenForm(elec); + } + + //if (itemText == "基本设置") + //{ + // Config c1 = new Config(); + // OpenForm(c1); + //} + if (itemText == "测试参数") + { + Electricity elec = new Electricity(); + elec.Signal_PLC_WriteCoil += Slot_PLC_WriteCoil; + OpenForm(elec); + } + if (itemText == "产能清零") + { + DialogResult result = MessageBox.Show( + "确定要清零吗?", + "确认", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question + ); + + if (result == DialogResult.Yes) + { + m_production.Clear(); + UploadProductionData(m_production.GetTotal(), m_production.GetOK(), m_production.GetNG(), m_production.GetOKRate()); // 更新产能 + } + } + //if (itemText == "LIN设置") + //{ + // LinConfig lin = new LinConfig(); + // OpenForm(lin); + //} + if (itemText == "存储设置") + { + Form_Save save = new Form_Save(); + OpenForm(save); + } + if (itemText == "仪器网络设置") + { + Form_NetworkSet tcp = new Form_NetworkSet(); + OpenForm(tcp); + } + if (itemText == "MES在线/离线") + { + MES_Switch(); + //Form_Save tcp = new Form_Save(); + //OpenForm(tcp); + } + if (itemText == "查看UPH") + { + //UPH upph = new UPH(); + //OpenForm(upph); + } + if (itemText == "扫码器设置") + { + Form_SaomaSet port = new Form_SaomaSet("SerialPort"); // SerialPort/TCP + OpenForm(port); + } + if (itemText == "复测数据") + { + //DateNG port = new DateNG(); + //OpenForm(port); + } + + if (itemText == "权限设置") + { + UserManagement user = new UserManagement(); + OpenForm(user); + } + if (itemText == "报警记录") + { + Warning warn = new Warning(); + OpenForm(warn); + } + + if (itemText == "清理日志") + { + mxlLog.Instance.ClearOldLogs(); + } + + //if (itemText=="SPC设置") + //{ + // SpcApi spc = new SpcApi(); + // OpenForm(spc); + //} + //if (itemText == "智能手表设置") + //{ + // Watch spc = new Watch(); + // OpenForm(spc); + //} + + //if (itemText == "打开文件") + //{ + // OpenMachineINI.CheckFileExists = true; + // OpenMachineINI.Multiselect = false; + // OpenMachineINI.CheckPathExists = true; + // OpenMachineINI.DefaultExt = ".ini"; + // OpenMachineINI.Filter = "配置文件(*.ini)|*.ini"; + // OpenMachineINI.ShowDialog(); + // string machine_path = OpenMachineINI.FileName; + // if (!String.IsNullOrEmpty(machinepath) && (machine_path != "openFileDialog1")) + // { + // machine = OpenMachineINI.SafeFileName; + // machinepath = OpenMachineINI.FileName; + // //ReadOrder(); + // //ReadSetting(); + // } + //} + //if (itemText == "左工位1通道自检") + //{ + // ReadParameters(4, 1); + //} + //if (itemText == "左工位2通道自检") + //{ + // ReadParameters(4, 2); + //} + //if (itemText == "右工位1通道自检") + //{ + // ReadParameters(4, 3); + //} + //if (itemText == "右工位2通道自检") + //{ + // ReadParameters(4, 4); + //} + } + if (itemText == "PLC重连") + { + + } + if (itemText == "段别查询") + { + //DuanBie db = new DuanBie(); + //OpenForm(db); + } + if (itemText == "MES设置") + { + Form_HQMESconfig mes = new Form_HQMESconfig(); + OpenForm(mes); + //GhMes mes = new GhMes(); + //OpenForm(mes); + } + //if (itemText == "启动") + //{ + // plc.MachineStart(); + //} + //if (itemText == "复位") + //{ + // plc.MachineReset(); + //} + if (itemText == "登录") + { + Form_LogOn log = new Form_LogOn(); + OpenForm(log); + } + if (itemText == "注销") + { + User = "操作员"; + lb_User.Text = "操作员"; + tb_CH1codeLeng.Enabled = false; + tb_CH2codeLeng.Enabled = false; + tb_CH3codeLeng.Enabled = false; + tb_CH4codeLeng.Enabled = false; + + } + if (itemText == "MES日志") + { + //MESMsg.mesmsg.Show(); + //if (filesave.ChkMES) + //{ + // //mesmsg.Show(); + // string path = System.Environment.CurrentDirectory + "\\MES_Log" + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt"; + // if (File.Exists(path)) + // { + // Process.Start(path); + // //File.Open(path, FileMode.Open); + // //pro + // } + // else + // { + // //MessageBox.Show("无今日mes日志!"); + // } + //} + //else + //{ + // //MessageBox.Show("没有勾选mes!"); + //} + } + if (User == "厂商" || User == "工程师") + { + if (itemText == "CH1仪器启动") + { + ch1workstation = (int)yiqi.start; + return; + } + if (itemText == "CH2仪器启动") + { + ch2workstation = (int)yiqi.start; + return; + } + if (itemText == "CH3仪器启动") + { + ch3workstation = (int)yiqi.start; + return; + } + if (itemText == "CH4仪器启动") + { + ch4workstation = (int)yiqi.start; + return; + } + + if (itemText == "CH1仪器-复位") + { + ch1workstation = (int)yiqi.rst; + return; + } + if (itemText == "CH2仪器-复位") + { + ch2workstation = (int)yiqi.rst; + return; + } + if (itemText == "CH3仪器-复位") + { + ch3workstation = (int)yiqi.rst; + return; + } + if (itemText == "CH4仪器-复位") + { + ch4workstation = (int)yiqi.rst; + return; + } + + if (itemText == "厂商配置") + { + Form_RootSet root = new Form_RootSet(); + OpenForm(root); + } + } + if (User == "厂商") + { + if (itemText == "高级功能设置") + { + LeakCompensate comp = new LeakCompensate(); + OpenForm(comp); + } + } + } + + // MES开关 + private void MES_Switch() + { + var jsconfig = new JsonConfig("config.json"); + + if (m_MESswitch) + { + m_MESswitch = false; + lb_MESswitch.Text = "MES离线"; + pb_MESswitch.BackColor = Color.Red; + jsconfig.SetValue("MESswitch", false); + } + else + { + // mes初始化 + if (HQMES_Init()) + { + m_MESswitch = true; + lb_MESswitch.Text = "MES在线"; + pb_MESswitch.BackColor = Color.Green; + jsconfig.SetValue("MESswitch", true); + } + else + { + m_MESswitch = false; + lb_MESswitch.Text = "MES离线"; + pb_MESswitch.BackColor = Color.Red; + jsconfig.SetValue("MESswitch", false); + } + } + } + + // 表格1根据结果变色 + //#region 表格根据结果变色 + private void DataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) + { + for (int i = 0; i < this.DataGridView1.Rows.Count - 1; i++) + { + if (this.DataGridView1.Rows[i].Cells["Column7"].Value.ToString() == "OK") + { + this.DataGridView1.Rows[i].DefaultCellStyle.ForeColor = Color.Green; + } + if (this.DataGridView1.Rows[i].Cells["Column7"].Value.ToString() == "NG") + { + this.DataGridView1.Rows[i].DefaultCellStyle.ForeColor = Color.Red; + } + if ((this.DataGridView1.Rows[i].Cells["Column7"].Value.ToString() != "NG") && (this.DataGridView1.Rows[i].Cells["Column7"].Value.ToString() != "OK")) + { + this.DataGridView1.Rows[i].DefaultCellStyle.ForeColor = Color.Blue; + } + } + } + + // 表格2根据结果变色 + private void DataGridView2_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) + { + for (int i = 0; i < this.DataGridView2.Rows.Count - 1; i++) + { + if (this.DataGridView2.Rows[i].Cells["dataGridViewTextBoxColumn7"].Value.ToString() == "OK") + { + this.DataGridView2.Rows[i].DefaultCellStyle.ForeColor = Color.Green; + } + if (this.DataGridView2.Rows[i].Cells["dataGridViewTextBoxColumn7"].Value.ToString() == "NG") + { + this.DataGridView2.Rows[i].DefaultCellStyle.ForeColor = Color.Red; + } + if ((this.DataGridView2.Rows[i].Cells["dataGridViewTextBoxColumn7"].Value.ToString() != "NG") && (this.DataGridView2.Rows[i].Cells["dataGridViewTextBoxColumn7"].Value.ToString() != "OK")) + { + this.DataGridView2.Rows[i].DefaultCellStyle.ForeColor = Color.Blue; + } + } + } + + // 界面退出按钮 + private void uiHeaderButton1_Click(object sender, EventArgs e) + { + System.Environment.Exit(0); + } + + // 字节转字符串 + public string ByteToHexStr(byte[] bytes) + { + string returnStr = ""; + try + { + if (bytes != null) + { + for (int i = 0; i < bytes.Length; i++) + { + returnStr += bytes[i].ToString("X2");//每个字节转换成两位十六进制 + // returnStr += " ";//两个16进制用空格隔开,方便看数据 + } + } + return returnStr; + } + catch (Exception) + { + return returnStr; + } + } + + //将发送数据转为十六进制数据 + private static byte[] StrtoHexbyte(String hexstring) + { + hexstring = hexstring.Replace(" ", ""); + byte[] returnBytes = new byte[(hexstring.Length) / 2]; + try + { + for (int i = 0; i < returnBytes.Length; i++) + { + returnBytes[i] = Convert.ToByte(hexstring.Substring(i * 2, 2), 16); + } + } + catch (Exception ex) + { + //MessageBox.Show(ex.Message); + return null; + } + return returnBytes; + } + + //定时清理垃圾 + [DllImport("kernel32.dll")] + private static extern bool SetProcessWorkingSetSize(IntPtr process, int minsuze, int maxSize); + + //定时清理垃圾 + private void timer1_Tick(object sender, EventArgs e) + { + FlushMemory(); + if (lb_MESswitch.Text == "MES离线") + { + lb_CH1MES_INstatus.Text = ""; + lb_CH2MES_INstatus.Text = ""; + lb_CH3MES_INstatus.Text = ""; + lb_CH4MES_INstatus.Text = ""; + + lb_CH1MES_OUTstatus.Text = ""; + lb_CH2MES_OUTstatus.Text = ""; + lb_CH3MES_OUTstatus.Text = ""; + lb_CH4MES_OUTstatus.Text = ""; + } + } + + //强制释放内存 + public static void FlushMemory() + { + GC.Collect(); + GC.WaitForPendingFinalizers(); + if (Environment.OSVersion.Platform == PlatformID.Win32NT) + { + SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1); + } + } + + // 定时函数 定时退出用户 + private void UserClear_Tick(object sender, EventArgs e) + { + if (Environment.MachineName.Trim() == "PC-20230419CFZS") // 计算机名 + return; + + if (Form1.f1.lb_User.Text == "厂商") + { + lb_User.Text = "操作员"; + User = "操作员"; + } + } + + // 用户变化 + private void Admin_TextChanged(object sender, EventArgs e) + { + if (lb_User.Text == "厂商" && lb_User.Text == "管理员") + { + tb_CH1codeLeng.Enabled = true; + tb_CH2codeLeng.Enabled = true; + tb_CH3codeLeng.Enabled = true; + tb_CH4codeLeng.Enabled = true; + } + else + { + tb_CH1codeLeng.Enabled = false; + tb_CH2codeLeng.Enabled = false; + tb_CH3codeLeng.Enabled = false; + tb_CH4codeLeng.Enabled = false; + } + } + + // 用户属性变化 + private void Admin_TabIndexChanged(object sender, EventArgs e) + { + if (lb_User.Text == "厂商") + { + // 用户重置 + UserClear.Interval = 600000; + UserClear.Start(); + } + } + + // 清除条码1 + private void button2_Click(object sender, EventArgs e) + { + tb_CH1Code.Text = ""; + ch1_oldcode = ""; + lb_CH1MES_INstatus.Text = "##"; + } + + // 清除条码2 + private void button3_Click(object sender, EventArgs e) + { + tb_CH2Code.Text = ""; + ch1_oldcode = ""; + lb_CH2MES_INstatus.Text = "##"; + } + // 清除条码3 + private void bt_code3clear_Click(object sender, EventArgs e) + { + tb_CH3Code.Text = ""; + ch1_oldcode = ""; + lb_CH3MES_INstatus.Text = "##"; + } + // 清除条码4 + private void bt_code4clear_Click(object sender, EventArgs e) + { + tb_CH4Code.Text = ""; + ch1_oldcode = ""; + lb_CH4MES_INstatus.Text = "##"; + } + + //防止打开多个相同的窗口 + public void OpenForm(System.Windows.Forms.Form frm, bool isStatic = false) + { + if (frm == null) return; + foreach (System.Windows.Forms.Form f in System.Windows.Forms.Application.OpenForms) + { + if (f.Name == frm.Name) + { + f.Activate(); + //if(isStatic) + // f.ShowDialog(); + //else + f.Show(); + frm.Dispose(); + System.GC.Collect(); + System.GC.WaitForPendingFinalizers(); + return; + } + } + frm.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + //if (isStatic) + // frm.ShowDialog(); + //else + frm.Show(); + System.GC.Collect(); + System.GC.WaitForPendingFinalizers(); + } + + public bool ch1AutoConnect = true; // 仪器自动重连 + public bool ch2AutoConnect = true; + public bool ch3AutoConnect = true; + public bool ch4AutoConnect = true; + + private int ch1ReconnectCount = 0; // 仪器自动重连次数 + private int ch2ReconnectCount = 0; + private int ch3ReconnectCount = 0; + private int ch4ReconnectCount = 0; + + // 定时器 监控仪器通讯状态 + private void timer_yiqiRun_Tick(object sender, EventArgs e) + { + try + { + // 通道1 + if (LL28CH1client != null && LL28CH1client.isRunning) + { + lb_CH1Communication_status.Text = "OK"; + lb_CH1Communication_status.ForeColor = Color.Green; + + ch1ReconnectCount = 0; + } + else + { + lb_CH1Communication_status.Text = "NG"; + lb_CH1Communication_status.ForeColor = Color.Red; + + if(ch1AutoConnect) // 重连 + { + ch1ReconnectCount++; + if (ch1ReconnectCount % 6 == 0) + { + LL28CH1client?.Stop(); // 先停止线程(如果正在运行) + LL28CH1client?.Disconnect(); // 断开旧连接 + LL28CH1client?.Connect(ch1ipaddress); // 连接新 IP + LL28CH1client?.Start(); // 重新启动线程 + } + } + } + + // 通道2 + if (LL28CH2client != null && LL28CH2client.isRunning) + { + lb_CH2Communication_status.Text = "OK"; + lb_CH2Communication_status.ForeColor = Color.Green; + + ch2ReconnectCount = 0; + } + else + { + lb_CH2Communication_status.Text = "NG"; + lb_CH2Communication_status.ForeColor = Color.Red; + + if(ch2AutoConnect) // 重连 + { + ch2ReconnectCount++; + if (ch2ReconnectCount % 6 == 0) + { + LL28CH2client?.Stop(); // 先停止线程(如果正在运行) + LL28CH2client?.Disconnect(); // 断开旧连接 + LL28CH2client?.Connect(ch2ipaddress); // 连接新 IP + LL28CH2client?.Start(); // 重新启动线程 + } + } + } + + // 通道3 + if (LL28CH3client != null && LL28CH3client.isRunning) + { + lb_CH3Communication_status.Text = "OK"; + lb_CH3Communication_status.ForeColor = Color.Green; + + ch3ReconnectCount = 0; + } + else + { + lb_CH3Communication_status.Text = "NG"; + lb_CH3Communication_status.ForeColor = Color.Red; + + if (ch3AutoConnect) // 重连 + { + ch3ReconnectCount++; + if (ch3ReconnectCount % 6 == 0) + { + LL28CH3client?.Stop(); // 先停止线程(如果正在运行) + LL28CH3client?.Disconnect(); // 断开旧连接 + LL28CH3client?.Connect(ch3ipaddress); // 连接新 IP + LL28CH3client?.Start(); // 重新启动线程 + } + } + } + + // 通道4 + if (LL28CH4client != null && LL28CH4client.isRunning) + { + lb_CH4Communication_status.Text = "OK"; + lb_CH4Communication_status.ForeColor = Color.Green; + + ch4ReconnectCount = 0; + } + else + { + lb_CH4Communication_status.Text = "NG"; + lb_CH4Communication_status.ForeColor = Color.Red; + + if (ch4AutoConnect) // 重连 + { + ch4ReconnectCount++; + if (ch4ReconnectCount % 6 == 0) + { + LL28CH4client?.Stop(); // 先停止线程(如果正在运行) + LL28CH4client?.Disconnect(); // 断开旧连接 + LL28CH4client?.Connect(ch4ipaddress); // 连接新 IP + LL28CH4client?.Start(); // 重新启动线程 + } + } + } + } + catch (OverflowException) + { + ch1ReconnectCount = 0; // 溢出时重置 + ch2ReconnectCount = 0; + ch3ReconnectCount = 0; + ch4ReconnectCount = 0; + } + } + + // 更新条码框 + private void UpdateCodeBox(string CODE) + { + // 1-4顺序放 + if (string.IsNullOrEmpty(tb_CH1Code.Text)) + { + tb_CH1Code.Text = CODE; + lastUseCodebox = 1; + } + else if (string.IsNullOrEmpty(tb_CH2Code.Text)) + { + tb_CH2Code.Text = CODE; + lastUseCodebox = 2; + } + else if (string.IsNullOrEmpty(tb_CH3Code.Text)) + { + tb_CH3Code.Text = CODE; + lastUseCodebox = 3; + } + else if (string.IsNullOrEmpty(tb_CH4Code.Text)) + { + tb_CH4Code.Text = CODE; + lastUseCodebox = 4; + } + else // suoy 所有框都有条码时 + { + lastUseCodebox = lastUseCodebox % 4 + 1; + + switch (lastUseCodebox) + { + case 1: tb_CH1Code.Text = CODE; break; + case 2: tb_CH2Code.Text = CODE; break; + case 3: tb_CH3Code.Text = CODE; break; + case 4: tb_CH4Code.Text = CODE; break; + } + } + } + + //string lastCode = ""; // 保存上一次条码 + int lastUseCodebox = 0; // 保存上一次填充的条码框 + + // 扫码枪1串口接收函数 + private void SerialPort_CH1Saoma_DataReceived(object sender, SerialDataReceivedEventArgs e) + { + try + { + System.Threading.Thread.Sleep(50); + int len = SerialPort_CH1Saoma.BytesToRead; // 获取可以读取的字节数 + if (len > 1) + { + byte[] buff = new byte[len]; // 创建缓存数据数组 + SerialPort_CH1Saoma.Read(buff, 0, len); // 把数据读取到buff数组 + Invoke((new System.Action(() => + { + string time = DateTime.Now.ToString(); + string code = Encoding.Default.GetString(buff).Replace(" ", "").Replace("\r", "").Replace("\n", ""); + + Console.WriteLine("扫码枪1串口收到:" + code); + //code = code.Split(';')[0]; + //Console.WriteLine("扫码枪1串口去掉分隔符:" + code); + + if (tb_CH1Code.Text == code || tb_CH2Code.Text == code || tb_CH3Code.Text == code || tb_CH4Code.Text == code) + { + //MessageBox.Show($"条码 {CODE} 已存在", "重复提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); + SerialPort_CH1Saoma.DiscardInBuffer(); + return; + } + + if (code.Length.ToString() == tb_CH1codeLeng.Text.Trim()) + { + tb_CH1Code.Text = code; + } + else + { + //SetUITextBox(tb_CH1MainMessage, "CH1当前条形码长度为" + code.Length + " 所设置的条码长度为" + tb_CH1codeLeng.Text); + } + + SerialPort_CH1Saoma.DiscardInBuffer(); + }))); + } + else + { + return; + } + } + catch (Exception ex) + { + mxlLog.Instance.Error($"串口扫码枪1接收函数 异常 ,行号{ex.StackTrace} ", ex); + } + } + + // 扫码枪2串口接收函数 + private void SerialPort_CH2Saoma_DataReceived(object sender, SerialDataReceivedEventArgs e) + { + try + { + System.Threading.Thread.Sleep(50); + int len = SerialPort_CH2Saoma.BytesToRead; // 获取可以读取的字节数 + if (len > 1) + { + byte[] buff = new byte[len]; // 创建缓存数据数组 + SerialPort_CH2Saoma.Read(buff, 0, len); // 把数据读取到buff数组 + Invoke((new System.Action(() => + { + string time = DateTime.Now.ToString(); + string code = Encoding.Default.GetString(buff).Replace(" ", "").Replace("\r", "").Replace("\n", ""); + + Console.WriteLine("扫码枪2串口收到:" + code); + //code = code.Split(';')[0]; + //Console.WriteLine("扫码枪1串口去掉分隔符:" + code); + + if (tb_CH1Code.Text == code || tb_CH2Code.Text == code || tb_CH3Code.Text == code || tb_CH4Code.Text == code) + { + //MessageBox.Show($"条码 {CODE} 已存在", "重复提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); + SerialPort_CH2Saoma.DiscardInBuffer(); + return; + } + + if (code.Length.ToString() == tb_CH2codeLeng.Text.Trim()) + { + tb_CH2Code.Text = code; + } + else + { + //SetUITextBox(tb_CH2MainMessage, "CH2当前条形码长度为" + code.Length + " 所设置的条码长度为" + tb_CH2codeLeng.Text); + } + + SerialPort_CH2Saoma.DiscardInBuffer(); + }))); + } + else + { + return; + } + } + catch (Exception ex) + { + mxlLog.Instance.Error($"串口扫码枪2接收函数 异常 ,行号{ex.StackTrace} ", ex); + } + } + + // 扫码枪3串口接收函数 + private void SerialPort_CH3Saoma_DataReceived(object sender, SerialDataReceivedEventArgs e) + { + try + { + System.Threading.Thread.Sleep(50); + int len = SerialPort_CH3Saoma.BytesToRead; // 获取可以读取的字节数 + if (len > 1) + { + byte[] buff = new byte[len]; // 创建缓存数据数组 + SerialPort_CH3Saoma.Read(buff, 0, len); // 把数据读取到buff数组 + Invoke((new System.Action(() => + { + string time = DateTime.Now.ToString(); + string code = Encoding.Default.GetString(buff).Replace(" ", "").Replace("\r", "").Replace("\n", ""); + + Console.WriteLine("扫码枪3串口收到:" + code); + //code = code.Split(';')[0]; + //Console.WriteLine("扫码枪3串口去掉分隔符:" + code); + + if (tb_CH1Code.Text == code || tb_CH2Code.Text == code || tb_CH3Code.Text == code || tb_CH4Code.Text == code) + { + //MessageBox.Show($"条码 {CODE} 已存在", "重复提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); + SerialPort_CH3Saoma.DiscardInBuffer(); + return; + } + + if (code.Length.ToString() == tb_CH3codeLeng.Text.Trim()) + { + tb_CH3Code.Text = code; + } + else + { + //SetUITextBox(tb_CH3MainMessage, "CH3当前条形码长度为" + code.Length + " 所设置的条码长度为" + tb_CH3codeLeng.Text); + } + + SerialPort_CH3Saoma.DiscardInBuffer(); + }))); + } + else + { + return; + } + } + catch (Exception ex) + { + mxlLog.Instance.Error($"串口扫码枪3接收函数 异常 ,行号{ex.StackTrace} ", ex); + } + } + + // 扫码枪4串口接收函数 + private void SerialPort_CH4Saoma_DataReceived(object sender, SerialDataReceivedEventArgs e) + { + try + { + System.Threading.Thread.Sleep(50); + int len = SerialPort_CH4Saoma.BytesToRead; // 获取可以读取的字节数 + if (len > 1) + { + byte[] buff = new byte[len]; // 创建缓存数据数组 + SerialPort_CH4Saoma.Read(buff, 0, len); // 把数据读取到buff数组 + Invoke((new System.Action(() => + { + string time = DateTime.Now.ToString(); + string code = Encoding.Default.GetString(buff).Replace(" ", "").Replace("\r", "").Replace("\n", ""); + + Console.WriteLine("扫码枪4串口收到:" + code); + //code = code.Split(';')[0]; + //Console.WriteLine("扫码枪4串口去掉分隔符:" + code); + + if (tb_CH1Code.Text == code || tb_CH2Code.Text == code || tb_CH3Code.Text == code || tb_CH4Code.Text == code) + { + //MessageBox.Show($"条码 {CODE} 已存在", "重复提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); + SerialPort_CH4Saoma.DiscardInBuffer(); + return; + } + + if (code.Length.ToString() == tb_CH4codeLeng.Text.Trim()) + { + tb_CH4Code.Text = code; + } + else + { + //SetUITextBox(tb_CH4MainMessage, "CH4当前条形码长度为" + code.Length + " 所设置的条码长度为" + tb_CH4codeLeng.Text); + } + + SerialPort_CH4Saoma.DiscardInBuffer(); + }))); + } + else + { + return; + } + } + catch (Exception ex) + { + mxlLog.Instance.Error($"串口扫码枪1接收函数 异常 ,行号{ex.StackTrace} ", ex); + } + } + + // 条码变化函数 + private void CH1Code_TextChanged(object sender, EventArgs e) + { + if (!tb_CH1Code.Text.IsNullOrEmpty()) + { + bool len_bool = tb_CH1Code.Text.Length.ToString() == tb_CH1codeLeng.Text.Trim(); // 长度 + bool rep_bool = (tb_CH1Code.Text != tb_CH2Code.Text && + tb_CH1Code.Text != tb_CH3Code.Text && + tb_CH1Code.Text != tb_CH4Code.Text); // 重复 + if (len_bool && rep_bool) + { + // 首次扫码要写入正压 + CH1NowMode = "正压"; + LL28CH1client.writeRegisters(1006, GetYiqiParam(1, "P").GetArray()); + Slot_PLC_WriteCoil(1008, false); + Slot_PLC_WriteCoil(1000, GetYiqiParam(1, "P").opmode); + + Console.WriteLine("CH1Code_TextChanged()"); + + // 治具下压-仪器启动 + + if (m_MESswitch) + { + Task.Run(() => + { + // MES入站 + var ret = ruzhan(tb_CH1Code.Text, m_ActionName, m_Tools); + if (ret.result) + { + SetLabelText(lb_CH1MES_INstatus, "PASS", Color.Green); + if (HCPLC_client.Connected) + { + lock (plcLock) // 加锁 + { + try + { + HCPLC_client.WriteSingleRegister(10, 10); + mxlLog.Instance.Info($"CH1入站 PLC写入10"); + } + catch(Exception ex) + { + mxlLog.Instance.Error($"CH1入站 PLC写入10异常 ,行号{ex.StackTrace} ", ex); + } + } + } + } + else + { + SetLabelText(lb_CH1MES_INstatus, "NG", Color.Red); + SetUITextBox(tb_CH1MainMessage, $"CH1 入站NG:{ret.msg}"); + if (HCPLC_client.Connected) + { + lock (plcLock) // 加锁 + { + try + { + HCPLC_client.WriteSingleRegister(10, 0); + mxlLog.Instance.Info($"CH1入站 PLC写入0"); + } + catch (Exception ex) + { + mxlLog.Instance.Error($"CH1入站 PLC写入0异常 ,行号{ex.StackTrace} ", ex); + } + } + } + } + SetLabelText(lb_CH1MES_OUTstatus, ""); + }); + } + else + { + if (HCPLC_client.Connected) + { + lock (plcLock) // 加锁 + { + try + { + HCPLC_client.WriteSingleRegister(10, 10); + mxlLog.Instance.Info($"CH1入站 PLC写入10"); + } + catch (Exception ex) + { + mxlLog.Instance.Error($"CH1入站 PLC写入10异常 ,行号{ex.StackTrace} ", ex); + } + } + } + } + } + else + { + if(!len_bool) + SetUITextBox(tb_CH1MainMessage, $"[CH1]当前条码长度{tb_CH1Code.Text.Length},限定{tb_CH1codeLeng.Text}"); + else if(!rep_bool) + SetUITextBox(tb_CH1MainMessage, "[CH1]当前条码重复"); // 看起来条码接收函数处理了,这里不会触发 + tb_CH1Code.Text = ""; + } + } + else + { + tb_CH1Code.Focus(); + } + } + + private void CH2Code_TextChanged(object sender, EventArgs e) + { + if (!tb_CH2Code.Text.IsNullOrEmpty()) + { + bool len_bool = tb_CH2Code.Text.Length.ToString() == tb_CH2codeLeng.Text.Trim(); + bool rep_bool = (tb_CH2Code.Text != tb_CH1Code.Text && + tb_CH2Code.Text != tb_CH3Code.Text && + tb_CH2Code.Text != tb_CH4Code.Text); + if (len_bool && rep_bool) + { + // 首次扫码要写入正压 + CH2NowMode = "正压"; + LL28CH2client.writeRegisters(1006, GetYiqiParam(2, "P").GetArray()); + Slot_PLC_WriteCoil(1009, false); + Slot_PLC_WriteCoil(1001, GetYiqiParam(2, "P").opmode); + + Console.WriteLine("CH2Code_TextChanged()"); + + // 治具下压-仪器启动 + + if (m_MESswitch) + { + Task.Run(() => + { + // MES入站 + var ret = ruzhan(tb_CH2Code.Text, m_ActionName, m_Tools); + if (ret.result) + { + SetLabelText(lb_CH2MES_INstatus, "PASS", Color.Green); + if (HCPLC_client.Connected) + { + lock (plcLock) // 加锁 + { + try + { + HCPLC_client.WriteSingleRegister(11, 10); + mxlLog.Instance.Info($"CH2入站 PLC写入10"); + } + catch (Exception ex) + { + mxlLog.Instance.Error($"CH2入站 PLC写入10异常 ,行号{ex.StackTrace} ", ex); + } + } + } + } + else + { + SetLabelText(lb_CH2MES_INstatus, "NG", Color.Red); + SetUITextBox(tb_CH2MainMessage, $"CH2 入站NG:{ret.msg}"); + if (HCPLC_client.Connected) + { + lock (plcLock) // 加锁 + { + try + { + HCPLC_client.WriteSingleRegister(11, 0); + mxlLog.Instance.Info($"CH2入站 PLC写入0"); + } + catch (Exception ex) + { + mxlLog.Instance.Error($"CH2入站 PLC写入0异常 ,行号{ex.StackTrace} ", ex); + } + } + } + } + SetLabelText(lb_CH2MES_OUTstatus, ""); + }); + } + else + { + if (HCPLC_client.Connected) + { + lock (plcLock) // 加锁 + { + try + { + HCPLC_client.WriteSingleRegister(11, 10); + mxlLog.Instance.Info($"CH2入站 PLC写入10"); + } + catch (Exception ex) + { + mxlLog.Instance.Error($"CH2入站 PLC写入10异常 ,行号{ex.StackTrace} ", ex); + } + } + } + } + } + else + { + if (!len_bool) + SetUITextBox(tb_CH2MainMessage, $"[CH2]当前条码长度{tb_CH2Code.Text.Length},限定{tb_CH2codeLeng.Text}"); + else if (!rep_bool) + SetUITextBox(tb_CH2MainMessage, "[CH2]当前条码重复"); + tb_CH2Code.Text = ""; + } + } + else + { + tb_CH2Code.Focus(); + } + } + + + private void lb_CH3Code_TextChanged(object sender, EventArgs e) + { + if (!tb_CH3Code.Text.IsNullOrEmpty()) + { + bool len_bool = tb_CH3Code.Text.Length.ToString() == tb_CH3codeLeng.Text.Trim(); + bool rep_bool = (tb_CH3Code.Text != tb_CH1Code.Text && + tb_CH3Code.Text != tb_CH2Code.Text && + tb_CH3Code.Text != tb_CH4Code.Text); + if (len_bool && rep_bool) + { + // 首次扫码要写入正压 + CH3NowMode = "正压"; + LL28CH3client.writeRegisters(1006, GetYiqiParam(3, "P").GetArray()); + Slot_PLC_WriteCoil(1010, false); + Slot_PLC_WriteCoil(1002, GetYiqiParam(3, "P").opmode); + + Console.WriteLine("CH3Code_TextChanged()"); + + // 治具下压-仪器启动 + + if (m_MESswitch) + { + Task.Run(() => + { + // MES入站 + var ret = ruzhan(tb_CH3Code.Text, m_ActionName, m_Tools); + if (ret.result) + { + SetLabelText(lb_CH3MES_INstatus, "PASS", Color.Green); + if (HCPLC_client.Connected) + { + lock (plcLock) // 加锁 + { + try + { + HCPLC_client.WriteSingleRegister(12, 10); + mxlLog.Instance.Info($"CH3入站 PLC写入10"); + } + catch (Exception ex) + { + mxlLog.Instance.Error($"CH3入站 PLC写入10异常 ,行号{ex.StackTrace} ", ex); + } + } + } + } + else + { + SetLabelText(lb_CH3MES_INstatus, "NG", Color.Red); + SetUITextBox(tb_CH1MainMessage, $"CH3 入站NG:{ret.msg}"); + if (HCPLC_client.Connected) + { + lock (plcLock) // 加锁 + { + try + { + HCPLC_client.WriteSingleRegister(12, 0); + mxlLog.Instance.Info($"CH3入站 PLC写入0"); + } + catch (Exception ex) + { + mxlLog.Instance.Error($"CH3入站 PLC写入0异常 ,行号{ex.StackTrace} ", ex); + } + } + } + } + SetLabelText(lb_CH3MES_OUTstatus, ""); + }); + } + else + { + if (HCPLC_client.Connected) + { + lock (plcLock) // 加锁 + { + try + { + HCPLC_client.WriteSingleRegister(12, 10); + mxlLog.Instance.Info($"CH3入站 PLC写入10"); + } + catch (Exception ex) + { + mxlLog.Instance.Error($"CH3入站 PLC写入10异常 ,行号{ex.StackTrace} ", ex); + } + } + } + } + } + else + { + if (!len_bool) + SetUITextBox(tb_CH1MainMessage, $"[CH3]当前条码长度{tb_CH3Code.Text.Length},限定{tb_CH3codeLeng.Text}"); + else if (!rep_bool) + SetUITextBox(tb_CH1MainMessage, "[CH3]当前条码重复"); + tb_CH3Code.Text = ""; + } + } + else + { + tb_CH3Code.Focus(); + } + } + + private void lb_CH4Code_TextChanged(object sender, EventArgs e) + { + if (!tb_CH4Code.Text.IsNullOrEmpty()) + { + bool len_bool = tb_CH4Code.Text.Length.ToString() == tb_CH4codeLeng.Text.Trim(); + bool rep_bool = (tb_CH4Code.Text != tb_CH1Code.Text && + tb_CH4Code.Text != tb_CH2Code.Text && + tb_CH4Code.Text != tb_CH3Code.Text); + if (len_bool && rep_bool) + { + // 首次扫码要写入正压 + CH4NowMode = "正压"; + LL28CH4client.writeRegisters(1006, GetYiqiParam(4, "P").GetArray()); + Slot_PLC_WriteCoil(1011, false); + Slot_PLC_WriteCoil(1003, GetYiqiParam(4, "P").opmode); + + Console.WriteLine("CH4Code_TextChanged()"); + + // 治具下压-仪器启动 + + if (m_MESswitch) + { + Task.Run(() => + { + // MES入站 + var ret = ruzhan(tb_CH4Code.Text, m_ActionName, m_Tools); + if (ret.result) + { + SetLabelText(lb_CH4MES_INstatus, "PASS", Color.Green); + if (HCPLC_client.Connected) + { + lock (plcLock) // 加锁 + { + try + { + HCPLC_client.WriteSingleRegister(13, 10); + mxlLog.Instance.Info($"CH4入站 PLC写入10"); + } + catch (Exception ex) + { + mxlLog.Instance.Error($"CH4入站 PLC写入10异常 ,行号{ex.StackTrace} ", ex); + } + } + } + } + else + { + SetLabelText(lb_CH4MES_INstatus, "NG", Color.Red); + SetUITextBox(tb_CH2MainMessage, $"CH4 入站NG:{ret.msg}"); + if (HCPLC_client.Connected) + { + lock (plcLock) // 加锁 + { + try + { + HCPLC_client.WriteSingleRegister(13, 0); + mxlLog.Instance.Info($"CH4入站 PLC写入0"); + } + catch (Exception ex) + { + mxlLog.Instance.Error($"CH4入站 PLC写入0异常 ,行号{ex.StackTrace} ", ex); + } + } + } + } + SetLabelText(lb_CH4MES_OUTstatus, ""); + }); + } + else + { + if (HCPLC_client.Connected) + { + lock (plcLock) // 加锁 + { + try + { + HCPLC_client.WriteSingleRegister(13, 10); + mxlLog.Instance.Info($"CH4入站 PLC写入10"); + } + catch (Exception ex) + { + mxlLog.Instance.Error($"CH4入站 PLC写入10异常 ,行号{ex.StackTrace} ", ex); + } + } + } + } + } + else + { + if (!len_bool) + SetUITextBox(tb_CH2MainMessage, $"[CH4]当前条码长度{tb_CH4Code.Text.Length},限定{tb_CH4codeLeng.Text}"); + else if (!rep_bool) + SetUITextBox(tb_CH2MainMessage, "[CH4]当前条码重复"); + tb_CH4Code.Text = ""; + } + } + else + { + tb_CH4Code.Focus(); + } + } + + // 信息栏变化 + private void tb_CH1MainMessage_TextChanged(object sender, EventArgs e) + { + timer_ClearMainMessage.Stop(); + timer_ClearMainMessage.Start(); // 重新计时 + } + private void tb_CH2MainMessage_TextChanged(object sender, EventArgs e) + { + timer_ClearMainMessage.Stop(); + timer_ClearMainMessage.Start(); + } + + // 定时清空主界面信息框 + private void timer_ClearMainMessage_Tick(object sender, EventArgs e) + { + timer_ClearMainMessage.Stop(); + tb_CH1MainMessage.Clear(); + tb_CH2MainMessage.Clear(); + } + + static int aaaaa = 0; + private void bt_test_Click(object sender, EventArgs e) + { + //coil1032[0] = true; + //int aaa = Convert.ToInt32(tb_mxl.Text); + //coil1032[aaa] = true; + return; + // 读取到M1100为true + AlarmManager.UpdateAlarm("M1100", true); + AlarmManager.UpdateAlarm("M1101", true); + + + + //LL28CH1client.writeRegisters(1006, GetYiqiParam(1,"P").GetArray()); + return; + aaaaa++; + if(aaaaa % 10 == 1) + { + m_production.AddNG(); + } + else + { + m_production.AddOK(); + } + UploadProductionData(m_production.GetTotal(), m_production.GetOK(), m_production.GetNG(), m_production.GetOKRate()); // 更新产能 + + //// 测试文件冲突 + //CreateFile(1, true, "123456789"); + //CreateFile(2, true, "123456789"); + //CreateFile(3, true, "123456789"); + //CreateFile(4, true, "123456789"); + + // 写入激活状态 + //ActivationManager.WriteActivationStatus(false); + //this.Enabled = false; + + //Form_Activate elec = new Form_Activate(); + //elec.Signal_LoginResult += Slot_MainShow; + //OpenForm(elec, true); + + //this.Enabled = false; + //mxlLog.Instance.ClearOldLogs(); + // MES + //if (MESswitch) + //{ + // RtValue rdata = chuzhan(2, lb_CH2Code.Text, false); + // if (rdata.result) + // { + // SetLabelText(lb_CH2MES_OUTstatus, "PASS", Color.Green); + // } + // else + // { + // SetLabelText(lb_CH2MES_OUTstatus, "NG", Color.Red); + // } + //} + + //AddTxT(1,true,"123456789"); + //tb_CH1MainMessage.Text = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20"; + //mxlLog.Instance.Debug($"debug2"); + //mxlLog.Instance.Error($"error2"); + //LL28CH2client.writeRegisters(1076, new int[] {1}); + } + + + private void bt_test2_Click(object sender, EventArgs e) + { + //int aaa = Convert.ToInt32(tb_mxl.Text); + //coil1032[aaa] = false; + return; + + // 读取到M1100为false + AlarmManager.UpdateAlarm("M1100", false); + + //// 读取到M1101为true + //AlertManager.UpdateAlert("M1101", true, "CH1通道异常急停触发"); + } + + // 条码长度变化 + private void tb_CH1codeLeng_TextChanged(object sender, EventArgs e) + { + if(tcpSaoma_Enabled && saomaClient1 != null && !tb_CH1codeLeng.Text.IsNullOrEmpty()) + { + saomaClient1.codeLength = Convert.ToInt32(tb_CH1codeLeng.Text); + } + } + private void tb_CH2codeLeng_TextChanged(object sender, EventArgs e) + { + if(tcpSaoma_Enabled && saomaClient2 != null && !tb_CH2codeLeng.Text.IsNullOrEmpty()) + { + saomaClient2.codeLength = Convert.ToInt32(tb_CH2codeLeng.Text); + } + } + + // 发送扫码启动 + private void timer_SaomaStart_Tick(object sender, EventArgs e) + { + Slot_SaomaStart(1); + Slot_SaomaStart(2); + Slot_SaomaStart(3); + Slot_SaomaStart(4); + } + + // 显示时间 + private void timer_nowTime_Tick(object sender, EventArgs e) + { + string time = System.DateTime.Now.ToString("HH:mm:ss"); + lb_NowTime.Text = time; + } + private string GetLocalIPv4() + { + var host = Dns.GetHostEntry(Dns.GetHostName()); + foreach (var ip in host.AddressList) + { + if (ip.AddressFamily == AddressFamily.InterNetwork) + { + return ip.ToString(); + } + } + throw new Exception("No IPv4 address found."); + } + + + #region USB扫码 + private StringBuilder codeBuff = new StringBuilder(); + private DateTime lastKeyTime = DateTime.Now; + private readonly int timeoutMs = 300; + private bool monitorAllInput = false; + + private void tb_CHxCode_KeyPress(object sender, KeyPressEventArgs e) + { + if (monitorAllInput || sender is Sunny.UI.UITextBox) + { + ProcessKeyPress(e.KeyChar); + e.Handled = true; // 阻止字符显示 + } + } + + // 条码字符处理 + private void ProcessKeyPress(char keyChar) + { + TimeSpan elapsed = DateTime.Now - lastKeyTime; + if (elapsed.TotalMilliseconds > timeoutMs) + { + codeBuff.Clear(); + } + + lastKeyTime = DateTime.Now; + + if (keyChar == '\r' || keyChar == '\n') + { + string barcode = codeBuff.ToString().Trim(); + if (!string.IsNullOrEmpty(barcode)) + { + UpdateCodeBox(barcode); + } + codeBuff.Clear(); + } + else + { + codeBuff.Append(keyChar); + } + } + + // 主窗口的KeyPreview设置为true,重写函数捕获所有键盘输入(勿删,没有引用,但是运行需调用) + protected override void OnKeyPress(KeyPressEventArgs e) + { + if (monitorAllInput) + { + ProcessKeyPress(e.KeyChar); + e.Handled = true; // 阻止进一步处理 + } + base.OnKeyPress(e); // 调用基类实现,确保其他功能正常 + } + + // 专注扫码复选框 + private void chk_SaomaFocus_CheckedChanged(object sender, EventArgs e) + { + monitorAllInput = chk_SaomaFocus.Checked; + + if (monitorAllInput) + { + // 监控所有输入时,让文本框获取焦点以便接收键盘事件 + this.Focus(); + } + } + #endregion + + #region 华勤MES + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate int MESBackFunc(StringBuilder data); + + /// + /// mes函数执行成功 + /// + public const int MesBackOK = 0; + + /// + /// MES的句柄 + /// + public static int hMes = 0; + private const string DLLPATH = "HQMES.dll"; + [DllImport(DLLPATH)] + public static extern int MesInit(MESBackFunc func, ref int hMes, StringBuilder sInfo, ref int InfoLen); + [DllImport(DLLPATH)] + public static extern int MesStart(int hMes, string SN, string ActionName, string Tools, StringBuilder sInfo, ref int InfoLen); + [DllImport(DLLPATH)] + public static extern int MesStart2(int hMes, string SN, string SNType, string ActionName, string Tools, StringBuilder sInfo, ref int InfoLen); + [DllImport(DLLPATH)] + public static extern int MesEnd(int hMes, string SN, string ActionName, string Tools, string ErrorCode, StringBuilder sInfo, ref int InfoLen); + [DllImport(DLLPATH)] + public static extern int MesEnd2(int hMes, string SN, string SNType, string ActionName, string Tools, string ErrorCode, string AllData, StringBuilder sInfo, ref int InfoLen); + [DllImport(DLLPATH)] + private static extern int MesSaveAndGetExtraInfo(int hMes, string G_TYPE, string G_POSITION, string G_KEY, string G_VALUE, string G_EXTINFO, StringBuilder sInfo, ref int InfoLen); + [DllImport(DLLPATH)] + public static extern int MesUnInit(int hMes); + [DllImport(DLLPATH)] + public static extern int MesStart3(int hMes, string SN, string SNType, string ActionName, string Tools, string Extinfo, StringBuilder sInfo, ref int InfoLen); + + + private static MESBackFunc tempFunc;// 必须要加一个变量,这样不会被回收 + public static int WriteLogFile(StringBuilder data) + { + return 0; + } + + // 华勤mes参数 + public static string m_ActionName; + public static string m_Tools; + public static string m_LINE; + public static string G_CHECKFLOWID; + + static int hmes = 0; + + // 华勤MES初始化 + public static bool HQMES_Init() + { + int len = 102400; + StringBuilder strdata = new StringBuilder(len); + if (hMes == 0) + { + tempFunc = WriteLogFile; // 必须要加一个变量,这样不会被回收 这个回调函数赋值只能放在这个位置,防止当多次点击init之后可能会出现回调函数被回收的现象 + if (0 == MesInit(tempFunc, ref hMes, strdata, ref len)) + { + JObject mesObj = (JObject)JsonConvert.DeserializeObject(strdata.ToString()); + string version = ""; + version = mesObj.GetValue("H_MSG") == null ? "" : mesObj.GetValue("H_MSG").ToString(); // 获取meshelepr的版本 + MessageBox.Show("初始化链接MES 成功 !MEShelper版本:" + version); // strdata会返回一个meshelper的版本号表示初始化成功 + return true; + } + else + { + hMes = 0; + MessageBox.Show("初始化链接MES 失败!"); + return false; + } + } + else + { + //MessageBox.Show("请勿重复初始化MES链接!"); + + return true; + } + } + + // 华勤MES入站 + public static (bool result, string msg) ruzhan(string SN, string ActionName, string toolName) + { + string time1 = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + int InfoLen = 102400; + StringBuilder sInfo = new StringBuilder(InfoLen); + + if (hMes != 0) + { + string DATA = ""; + string H_MSG = ""; + string G_RET_DATA = ""; + string NeedLoad = ""; + + mxlLog.Instance.MESDebug($"入站 SN:{SN} - ActionName:{ActionName} - toolName:{toolName} - sInfo:{sInfo} - InfoLen:{InfoLen}"); + if (0 == MesStart(hMes, SN, ActionName, toolName, sInfo, ref InfoLen)) + { + mxlLog.Instance.MESDebug($"入站 OK:{SN} - sInfo:{sInfo.ToString()}"); + + JObject retObj = (JObject)JsonConvert.DeserializeObject(sInfo.ToString()); + DATA = retObj.GetValue("DATA") == null ? "" : retObj.GetValue("DATA").ToString(); // data是一个json字符串,其中包含mes返回的主要字段,按照这个参考继续解析出来 例如获取CSN + + // 解析返回信息 + JObject dataObj = (JObject)JsonConvert.DeserializeObject(DATA); + string CSN = dataObj.GetValue("CSN") == null ? "" : dataObj.GetValue("CSN").ToString(); + G_CHECKFLOWID = dataObj.GetValue("G_CHECKFLOWID") == null ? "" : dataObj.GetValue("G_CHECKFLOWID").ToString(); + + H_MSG = retObj.GetValue("H_MSG") == null ? "" : retObj.GetValue("H_MSG").ToString(); + G_RET_DATA = retObj.GetValue("G_RET_DATA") == null ? "" : retObj.GetValue("G_RET_DATA").ToString(); // 标记工具需要回传给MES的字段,是json格式,将其解析出来可以得到字段,工具必须将该字段赋值并回传给MES,在endmes函数回传 + NeedLoad = retObj.GetValue("NeedLoad") == null ? "" : retObj.GetValue("NeedLoad").ToString(); // 标记工具是否需要重启 + + if (!String.IsNullOrEmpty(H_MSG) && H_MSG == "MES response:") + { + return (true, H_MSG); + } + else + { + return (false, H_MSG); + } + } + else + { + mxlLog.Instance.MESDebug($"入站 NG:{SN} - sInfo:{sInfo.ToString()}"); + + JObject retObj = (JObject)JsonConvert.DeserializeObject(sInfo.ToString()); + H_MSG = retObj.GetValue("H_MSG") == null ? "" : retObj.GetValue("H_MSG").ToString(); // mes返回的错误信息最好将其在工具界面展示出来给操作人员查看 + + return (false, sInfo.ToString()); + } + } + else + { + MessageBox.Show("请初始化MES链接!"); + return (false, sInfo.ToString()); + } + } + + public static (bool result, string msg) chuzhan(int CH, string SN, string ActionName, string Tools, string checkFlowId, bool result) + { + int InfoLen = 102400; + Log log = new Log(); + StringBuilder sInfo = new StringBuilder(InfoLen); + + if (hMes != 0) + { + string ErrorCode = "0"; + + Dictionary map = new Dictionary(); + + // 确认错误码和错误项 + if (result) + { + ErrorCode = "0"; + } + else + { + ErrorCode = "NG"; + sInfo.Append($"泄漏量超出设定范围"); // 错误详细描述 + } + + switch (CH) + { + case 1: + map["Xlvall"] = Form1.f1.lb_CH1_TestPressure.Text + Form1.f1.lb_CH1_PressureUnit.Text; // 测试压力 + map["Csvall"] = Form1.f1.LL28CH1client.readFloatF2(38); // 泄漏量 + break; + case 2: + map["Xlvall"] = Form1.f1.lb_CH2_TestPressure.Text + Form1.f1.lb_CH2_PressureUnit.Text; // 测试压力 + map["Csvall"] = Form1.f1.LL28CH2client.readFloatF2(38); // 泄漏量 + break; + case 3: + map["Xlvall"] = Form1.f1.lb_CH3_TestPressure.Text + Form1.f1.lb_CH3_PressureUnit.Text; // 测试压力 + map["Csvall"] = Form1.f1.LL28CH3client.readFloatF2(38); // 泄漏量 + break; + case 4: + map["Xlvall"] = Form1.f1.lb_CH4_TestPressure.Text + Form1.f1.lb_CH4_PressureUnit.Text; // 测试压力 + map["Csvall"] = Form1.f1.LL28CH4client.readFloatF2(38); // 泄漏量 + break; + } + + //压力转换 + map["G_OP_LINE"] = m_LINE; + map["DateTime"] = DateTime.Now.ToString(); + map["G_CHECKFLOWID"] = checkFlowId; + + string AllData = JsonConvert.SerializeObject(map); + string SNType = "1"; + + mxlLog.Instance.MESDebug($"出站-通道{CH} MesEnd2:" + $"hMes:{hMes}-SN:{SN}-SNType:{SNType}-ActionName:{ActionName}-toolName:{Tools}-ErrorCode:{ErrorCode}-AllData:{AllData}-strdata:{sInfo}-len:{InfoLen}"); + if (0 == MesEnd2(hMes, SN, SNType, ActionName, Tools, ErrorCode, AllData, sInfo, ref InfoLen)) + { + mxlLog.Instance.MESDebug($"出站-通道{CH} OK:{SN} - sInfo:{sInfo.ToString()}"); + + JObject retObj = (JObject)JsonConvert.DeserializeObject(sInfo.ToString()); + string msg = retObj.GetValue("G_NEXTWS") == null ? "" : retObj.GetValue("G_NEXTWS").ToString(); + + if (!String.IsNullOrEmpty(msg) && (msg.Contains("过站成功") || msg.Contains("测试PASS"))) // 还需优化,文档未标注已过站字段 + { + return (true, msg); + } + else + { + return (false, msg); + } + } + else + { + mxlLog.Instance.MESDebug($"出站-通道{CH} NG:{SN} - sInfo:{sInfo.ToString()}"); + return (false, sInfo.ToString()); + } + } + else + { + MessageBox.Show("请初始化MES链接!"); + return (false, sInfo.ToString()); + } + } + #endregion + + // 启动5s后,如果仪器在运行则写入正压参数 + private void timer2_Tick(object sender, EventArgs e) + { + + timer2.Stop(); + + Task.Run(() => + { + { + CH1NowMode = "正压"; + LL28CH1client.writeRegisters(1006, GetYiqiParam(1, "P").GetArray()); + Slot_PLC_WriteCoil(1008, false); + Slot_PLC_WriteCoil(1000, GetYiqiParam(1, "P").opmode); + } + { + CH2NowMode = "正压"; + LL28CH2client.writeRegisters(1006, GetYiqiParam(2, "P").GetArray()); + Slot_PLC_WriteCoil(1009, false); + Slot_PLC_WriteCoil(1001, GetYiqiParam(2, "P").opmode); + } + { + CH3NowMode = "正压"; + LL28CH3client.writeRegisters(1006, GetYiqiParam(3, "P").GetArray()); + Slot_PLC_WriteCoil(1010, false); + Slot_PLC_WriteCoil(1002, GetYiqiParam(3, "P").opmode); + } + { + CH4NowMode = "正压"; + LL28CH4client.writeRegisters(1006, GetYiqiParam(4, "P").GetArray()); + Slot_PLC_WriteCoil(1011, false); + Slot_PLC_WriteCoil(1003, GetYiqiParam(4, "P").opmode); + } + }); + } + } +} diff --git a/SLC1-N/Form1.resx b/SLC1-N/Form1.resx new file mode 100644 index 0000000..de12f9b --- /dev/null +++ b/SLC1-N/Form1.resx @@ -0,0 +1,615 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 147, 17 + + + True + + + True + + + True + + + True + + + True + + + 488, 47 + + + 14, 18 + + + 266, 44 + + + 317, 17 + + + 580, 47 + + + 782, 47 + + + 24, 56 + + + 1074, 47 + + + 490, 17 + + + 672, 17 + + + True + + + True + + + True + + + True + + + True + + + 1251, 47 + + + 141 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAACq + qnqHeoqqgAAAAAAAAAAAAAAAAAAACqiAAAAAAAAAeqgAAAAAAAAAAAAAAAAKqAAAAAAAAAAAAAqoAAAA + AAAAAAAAAAegAAAAAAAAAAAAAAAIoAAAAAAAAAAAAKcAAAAAAAAAAAAAAAAACqAAAAAAAAAACgAIenqq + qqqqqqqqqqAAAIoAAAAAAAAAoAAAAKqqqqqqqqqqqqgAAAigAAAAAAAKAAAAiqqqqqqqqqqqqqoAAACK + AAAAAAB3AAAAeHiqqqqqqqqqqqoAAAAKAAAAAACgAAAAAAqqqqqqqqqqqqoAAAAAoAAAAAqAAAAAAKqq + qqqqoAAAAAAAAAAAgAAAAAoAAAAAAAAIqqqqpwAAAAAAAAAACgAAAAoAAAAAAAAKqqqqqgAAAAAAAAAA + CgAAAAgAAAAAAAiqqqqqqqAAAAAAAAAABwAAAAoAAAAAAAAACKqqqqAAAAAAAAAACgAAAAgAAAAAAAAA + qqqqqqgAAAAAAAAACgAAAAoAAAAAAAAKqqqqqqoAAAAAAAAACgAAAAoAAAAAAAAAAAqqqqpwAAAAAAAA + CgAAAAoAAAAAAAAAAKqqqqqgAAAAAAAAiAAAAACAAAAAAAAAB6iqqqqoAAAAAAAAoAAAAACgAAAAAAAA + AACKqqqqAAAAAAAIoAAAAAAKAAAAAAAAAAqqqqqqgAAAAAAKAAAAAAAAoAAAAAAAAIqKiqqqoAAAAACg + AAAAAAAAigAAAAAAAAAAqqqqqAAAAAoAAAAAAAAACKAAAAAAAAAKqqqqqgAAAKAAAAAAAAAAAAqAAAAA + AAAAAAAAAAAAqgAAAAAAAAAAAACqgAAAAAAAAAAAAAB6gAAAAAAAAAAAAAAAeqAAAAAAAAAAAKqAAAAA + AAAAAAAAAAAAAAenoAAAAAB6qAAAAAAAAAAAAAAAAAAAAAAAinqqqqhwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////P///AAD//8AAf/8AAP/+H/8P/wAA//j//+P/ + AAD/5///+f8AAP/P///+fwAA/7gAAB8/AAD/fwAAD58AAP78AAAPzwAA/PwAAA/vAAD9/4AAD/cAAPn/ + AB//9wAA+//gD//7AAD7/+AP//sAAPv/gAf/+wAA+//4B//7AAD7//AD//sAAPv/4AP/+wAA+//+Af/7 + AAD7//wB//MAAP3/+AD/9wAA/f//AP/nAAD+//4Af+8AAP9//AB/3wAA/z//wD+/AAD/n/+AP38AAP/n + ///8/wAA//H///H/AAD//H//x/8AAP//h/w//wAA///wAf//AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAACKqAAAenAAAAAAAAAAAACoAAAAAAAAegAAAAAAAAB3AAAAAAAAAACKAAAAAA + AKAAqqqqqqqqoAAIAAAAAAoAAIqqqqqqqqoAAKAAAACAAAinqqqqqqqqAAAIAAAAoAAACqqqqqeqigAA + CgAACAAAAAiKqqoAAAAAAAAAAAoAAAAAqqqqoAAAAAAAgAAKAAAAAACqqqAAAAAAAKAACAAAAAAIqqqq + AAAAAABwAAoAAAAAAAqqqgAAAAAAcAAAAAAAAACqqqqgAAAAAAAAAHAAAAAAAKqqoAAAAAoAAAAIAAAA + AAqqqqgAAACAAAAACgAAAAAACKqqAAAIAAAAAACHAAAAAKqqqqAAoAAAAAAAAKAAAAAAAAAACAAAAAAA + AAAAdwAAAAAAigAAAAAAAAAAAAAHqKeooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////+Hj//+f/n/+f/+f/cAB7/vAAPf3gAD79+AA++/g + P//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/Ad//f/+//8/8///4B/////////////// + //////////////////8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqoAAAAAAKqoAAAAAAAAiqoA + AAAAAAAKqgAAAAAAAAiqgAAAAAAAAHqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAP//AAD//wAA//8AAP//AAD4DwAA/D8AAPw/AAD+PwAA/h8AAP8fAAD//wAA//8AAP// + AAD//wAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAAP4AAAX+ + BQAJ/wkADf4NABH/EQAW/hYAGf8ZAB3+HQAh/iEAJv4mACr+KgAt/i0AMf4xADX+NQA5/jkAPf49AEH+ + QQBF/kUAS/9LAE3+TQBR/lEAVf5VAFn+WQBe/14AYf5hAGX+ZQBp/mkAbv9uAHD/cAB1/nUAef55AH7+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFggIDhMXFxsXFxIOBgobAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFgwSIAAAAAAAAAAAAAAAAAAdEQwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMHQAA + AAAAAAAAAAAAAAAAAAAAAAAbDBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAbCAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAB0IAAAAAAAAAAAAAAAAAAAAAAAAAAwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREA + AAAAAAAAAAAAAAAAAAAACgAAACAbFgwBAQEBAQEBAQEBAQEBAQEBAQEAAAAAABsOAAAAAAAAAAAAAAAA + AAAKAAAAAAAAAAwBAQEBAQEBAQEBAQEBAQEBAQEbAAAAAAAgDgAAAAAAAAAAAAAAAA4AAAAAAAAdBAEB + AQEBAQEBAQEBAQEBAQEBAQEOAAAAAAAAGxIAAAAAAAAAAAAAGxYAAAAAAAAgICAgCgEBAQEBAQEBAQEB + AQEBAQEBAAAAAAAAAA4AAAAAAAAAAAAADAAAAAAAAAAAAAAWAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAA + AAAKAAAAAAAAAAAWHQAAAAAAAAAAAAwBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAK + AAAAAAAAAAAAAAAAACAGAQEBAQEBFgAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAOAAAAAAAAAAAAAAAA + AAgBAQEBAQEBBAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAATAAAAAAAAAAAAAAAXAQEBAQEBAQEBARYA + AAAAAAAAAAAAAAAAAAAADAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAFwEBAQEBAQYAAAAAAAAAAAAAAAAA + AAAADAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAWAQEBAQEBAQEXAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAS + AAAAAAAAAAAAAAAAAAoBBAQBAQEBAQEEAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAA + AAAAAAAOAQEBAQEBGwAAAAAAAAAAAAAAAAAAEQAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAYBAQEBAQEB + BAAAAAAAAAAAAAAAAAAbFwAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAEQwODAQBAQEBAR0AAAAAAAAAAAAA + AAAKAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAIAQBAQEBAQgAAAAAAAAAAAAAAB0WAAAAAAAAAAAA + AAoAAAAAAAAAAAAAAAAAAAARAQEBAQEBAQEdAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAMAAAAAAAAAAAA + AAAAABsbFxsRAQEBAQEKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAbEQAAAAAAAAAAAAAAAAAAAAAMAQEB + AQEBIAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAGw4AAAAAAAAAAAAAAAAAAAYBAQEBAQEBCAAAAAAAAAoA + AAAAAAAAAAAAAAAAAAAAAAAIGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCgAAAAAAAAAAAAAAAAAA + AAAAAAAAFwgdAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXDBMA + AAAAAAAAAAAAAAAAAAAAABIMGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODhIXAAAAAAAAAAAA + FxEMEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEw4IBAQECA4WIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///z///wAA///AAH//AAD//h//D/8AAP/4///j/wAA/+f///n/ + AAD/z////n8AAP+4AAAfPwAA/38AAA+fAAD+/AAAD88AAPz8AAAP7wAA/f+AAA/3AAD5/wAf//cAAPv/ + 4A//+wAA+//gD//7AAD7/4AH//sAAPv/+Af/+wAA+//wA//7AAD7/+AD//sAAPv//gH/+wAA+//8Af/z + AAD9//gA//cAAP3//wD/5wAA/v/+AH/vAAD/f/wAf98AAP8//8A/vwAA/5//gD9/AAD/5////P8AAP/x + ///x/wAA//x//8f/AAD//4f8P/8AAP//8AH//wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA/gAABf4FAAn+CQAP/g8AHv4eACv+KwAs/ywAM/8zADT/ + NAA+/j4AQv5CAEX+RQBJ/kkATP5MAFD+UABV/lUAWf9ZAF7+XgBh/mEAZf5lAGj+aABt/m0Acv5yAHX+ + dQB5/nkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkODhcAAAAAFg4O + AAAAAAAAAAAAAAAAAAAAAAAAAA8WAAAAAAAAAAAAAAAAExEAAAAAAAAAAAAAAAAAABMWAAAAAAAAAAAA + AAAAAAAAABEXAAAAAAAAAAAAAAANAAAADQQEAgQCBAIEAgQCBAAAAAAPAAAAAAAAAAAADQAAAAARAgIC + AgICAgICAgICCgAAAAAPAAAAAAAAABMAAAAAGREPBAICAgICAgICAgICAAAAAAAZAAAAAAAAFgAAAAAA + ABECAgICAgIGBwgICAgAAAAAAA8AAAAAABMAAAAAAAAAFxYFAgICAgAAAAAAAAAAAAAAAAAAAAAADgAA + AAAAAAAADwICAgICBwAAAAAAAAAAAAAADwAAAAANAAAAAAAAAAAAAAcCAgICAAAAAAAAAAAAAAANAAAA + AA0AAAAAAAAAAAAOAgICAgIHAAAAAAAAAAAAAA0AAAAADgAAAAAAAAAAAAAACgICAgIAAAAAAAAAAAAA + EwAAAAAAAAAAAAAAAAAAAA0CAgICAggAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAgICAgAAAAAA + AAAADQAAAAAAAAAXAAAAAAAAAAAADQICAgICCgAAAAAAABEAAAAAAAAAABcAAAAAAAAAAAAAABMCAgIC + AAAAAAAXAAAAAAAAAAAAABkTAAAAAAAAAAAOBAICAgQOAAAADwAAAAAAAAAAAAAAAAAOAAAAAAAAAAAA + AAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAADhMAAAAAAAAAAAAAEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAT + Dg0KCg0OEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////+Hj//+f + /n/+f/+f/cAB7/vAAPf3gAD79+AA++/gP//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/ + Ad//f/+//8/8///4B/////////////////////////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAB + AAAAAAAAAAAAAAABAAAAAQAAAAAAAAD+AAAE/wQAC/4LAAz/DAAR/hEAFf8VACP/IwA6/zoAQ/5DAFL/ + UgBb/1sAb/5vAHb+dgB5/3kAfv9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgICAgIFAAAAAAAA + AAAAAAcCAg4AAAAAAAAAAAAAAAALAwIMAAAAAAAAAAAAAAAAAAgCAwAAAAAAAAAAAAAAAAANBQIOAAAA + AAAAAAAAAAAAAAoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAPgP + AAD8PwAA/D8AAP4/AAD+HwAA/x8AAP//AAD//wAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/AEUA/wBjAP8AdgD+AIMA/wCGAP8AfAD/AHIA/wBeAP8AQAD+ + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/AAIA/wAnAP4AZgD/AKkA/wDiAP8A5QD/AMkA/wC0AP8ApQD+AJ4A/wCZAP8AnwD/ + AKgA/wC4AP8AzAD+AOkA/wDaAP8AmwD/AFwA/wAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAQAP8ATgD/AKwA/wDRAP4AuwD/AIAA/wBCAP8AIgD/ABUA/wAMAP8ABQD+ + AAIAAAAAAP8AAwD/AAYA/wANAP8AFwD+ACQA/wBMAP8AjQD/AMAA/wDTAP8AnAD+AD8A/wAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ACAD+AEQA/gC5AP4A0QD+AIcA/gA3AP4ACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABEA/gA+AP4AmwD+ + ANQA/gCmAP4AOAD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAZAP4AlgD/AOcA/wB2AP8AGQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+ACcA/wCQAP8A5gD/AH4A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD8A/wDTAP4AqwD/ACEA/wAGAP8AMAD/ + AF8A/wByAP4AcgD/AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+ + AHIA/wByAP8AcgD/AHIA/wByAP8ACwAAAAAAAAAAAP8AMQD/AMYA/wDBAP8AKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wACAP8ATAD/ANsA/wB3AP4AHwD/ + AEsA/wCHAP8AnAD/AKoA/wDSAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8ATAAAAAAAAAAAAAAAAAD/ABMA/wCYAP8AywD+ + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wA/AP8A3AD/ + AGMA/wAGAAAAAAAAAAAAAAAAAP8ACAD/AFQA/wDVAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AlAD+AAMAAAAAAAAAAAAA + AAAA/wAMAP8AhgD+AMwA/wAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ACIA/wDKAP8AfAD/AAIAAAAAAAAAAAAAAAAA/wARAP8AjgD/APIA/wD/AP4A/gD/AP8A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AzgD+ + ABQAAAAAAAAAAAAAAAAAAAAAAP8ADAD+AJkA/wC8AP8ACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD+AJ8A/gCpAP4AAwAAAAAAAAAAAAAAAAAAAAAA/gBPAP4AgAD+AIAA/gCAAP4AhAD+ + AN0A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4A+wD+ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABAA/gDJAP4AdQD+AAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ASAD/ANEA/wAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAiAP4AqwD/APkA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBCAP8A3AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AqAD/AI4A/wACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABgD/AFAA/wDRAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AHQA/wAyAP8AMgD+ADIA/wAyAP8AMgD/ADIA/wAyAP8AMgD+AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP8AuAD/AHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAWAP4A3wD/ADsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AEQA/wBTAP4AUwD/AFYA/wCDAP8A7gD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AK0A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AYAD/AL4A/wANAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBIAP4AxwD/ + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAQD/AGIA/wDkAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/APIA/wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ALwD/AMwA/wAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wBoAP4AsAD/AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAcAP4ApgD/ + APoA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wCuAP8ABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADgD/ANAA/wBDAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wB1AP4AqAD/AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAKAP4AJQD/ACYA/wAmAP8ANwD/AKEA/wD9AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wDsAP8AQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAgD/ + ANIA/wBMAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBvAP4AqwD+AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAEA/gAtAP4ArgD+APoA/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4ApQD+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABwD+ANEA/gBIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBYAP4AuwD/ABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AFMA/wDXAP8A+QD/APkA/wD5AP8A/QD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A8QD+AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AHgD/AM0A/wA4AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wApAP4A2AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wA8AP8AzQD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/gD+AJ0A/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ARwD/AMYA/wAaAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP4AzAD/AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ADQD/AHMA/wDuAP8A/gD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+APMA/wAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AkAD/AKAA/wACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AbwD/AL8A/wASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAMAP8AdgD/AMUA/wDLAP8AywD+ANIA/wD3AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wCPAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAbAP8A3wD/ + AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AGwD/AMgA/wBrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AIQA/wDxAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wDkAP8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAUA/wCOAP8ArgD/AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AFEA/gDeAP4AMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAzAP4AwwD+ + AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4AigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+AE4A/gDoAP4AKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AAYA/wB9AP8A1AD/ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ABsA/wCPAP8AngD+AJ4A/wCfAP8AvgD/APsA/wD/AP8A/wD+AP4A/wD/AP8A3wD/ACkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AQgD+ANgA/wBdAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAOAP8AmAD/AMMA/wAyAP4AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAUA/wBHAP8A1QD/AP0A/wD/AP8A/wD+AP4A/wD/AP8A/QD/ + AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wBMAP8AzgD+AHwA/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADQD/AJYA/wDNAP4AUgD/AAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AH4A/wDtAP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AN8A/wAcAAAAAAAAAAAAAAAAAP8ACwD/AGoA/wDYAP8AdQD+AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAQA/wBqAP4A4QD/ + AJwA/wAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ANQD+AHAA/wBxAP8AcQD/ + AHEA/wBxAP8AcQD+AHEA/wBxAP8AcQD/AG4A/wAmAAAAAAAAAAAA/wAqAP8ArAD/AN0A/wBMAP8AAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4AJAD/AKEA/wDnAP8AhwD/AC0A/wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wABAP8APQD+AJ4A/wDjAP8AkgD/ + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAgA/gBCAP4AqQD+ANMA/gCzAP4AXQD+AC0A/gANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gASAP4ANAD+AGsA/gC+AP4A0QD+ + AJcA/gA0AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/ADUA/wB7AP4AyAD/ + AMwA/wC/AP8AoAD/AHQA/wBVAP8APgD+ADMA/wArAP8ANAD/AEEA/wBaAP8AegD+AKcA/wDCAP8AzwD/ + AL4A/wBwAP8AKQD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD/AC8A/wBbAP8AhwD/AK8A/wDPAP8A5AD+APEA/wD1AP8A8AD/AOAA/wDJAP8AqgD+ + AIAA/wBTAP8AJQD/AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//+AB//8AAP/+AAAf/wAA//gAQAP/AAD/4D//gP8AAP/B///wfwAA/4AAAAw/AAD+AAAADh8AAPwc + AAAHDwAA/DgAAAeHAAD4eAAAB8MAAPj/AAAH4wAA+PwAAAfjAADx/AAH//EAAPH/gAf/8QAA8f8AA//x + AADx/wAD//EAAPH/wAH/8QAA8f/AAf/xAADx//wA//EAAPH/8AD/8QAA+P/gAH/jAAD4//4Af8MAAPx/ + /AB/xwAA/D/4AD+HAAD+D/8APg8AAP8H/gAcHwAA/4P+ABg/AAD/4H//wP8AAP/wD/4B/wAA//wAAAf/ + AAD//4AAP/8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA8A/gAzAP4ASwD/AFgA/gBVAP4ASQD+ + ADAA/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAEAP4ANwD+AIcA/wCzAP4AtAD+AI8A/gB1AP8AaQD+ + AGoA/gB4AP4AkgD/ALcA/gCvAP4AfwD+AC4A/wACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gADAP8ARAD+AK4A/gCWAP4AQQD/ABMA/gABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AAQD+ABYA/gBKAP4AnwD/AKYA/gA5AP4AAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD/AJsA/wCVAP8AHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AKgD/AKEA/wCMAP8ADAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ACMA/gC5AP4AUQD/AD8A/gB+AP4AuQD+ + APAA/wD2AP4A9gD+APYA/gD2AP8A9gD+APYA/gD2AP4A9gD/APYA/gD2AP4A9gD+AHkAAAAAAP4AAgD+ + AF0A/gCvAP8AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAXAP4AuAD+AC8AAAAAAAAAAAD+ + ABYA/gCfAP4A+gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+AP4A/gD+AP8A/wD+AP4A/gD+AP4AwQD/ + AAUAAAAAAAAAAAD+AEYA/wCvAP4ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD/AJwA/gBHAAAAAAAA + AAAA/wALAP4AhQD+AKoA/gCsAP8A8AD+AP4A/gD+AP4A/gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+ + AP4A/gD1AP8AHQAAAAAAAAAAAAAAAAD/AF0A/gCHAP4AAQAAAAAAAAAAAAAAAAAAAAAA/wBAAP8AlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AGgD/AKgA/wD8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDUAP8AywD/ + AMwA/wDLAP8AywD/AMsA/wBGAAAAAAAAAAAAAAAAAP8AAgD/AK0A/wAnAAAAAAAAAAAAAAAAAAAAAAD+ + AJcA/wA0AAAAAAAAAAAAAAAAAAAAAAD+AAcA/gBmAP4AjAD/AJIA/gDhAP4A/gD+AP4A/wD/AP4A/gD+ + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4ATgD+AHsAAAAAAAAAAAAA + AAAAAAAAAP4AtwD/AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP8ArQD+AP0A/gD+AP4A/gD/ + AP8A/gD+AP4A1AD+AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP4AqwAA + AAAAAAAAAAAAAAAAAAAA/gC9AP8AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD+AFAA/wBuAP4AdgD+ + ANQA/gD+AP8A/wD+AP4A/gD9AP4AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAMA/gC9AAAAAAAAAAAAAAAAAAAAAAD/ALsA/wAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AB4A/wCvAP8A/QD/AP8A/wD/AP8A/wD/AP8A/wDTAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ACAD/ALkAAAAAAAAAAAAAAAAAAAAAAP4ArwD/ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ANwD+AFAA/gBWAP4AwwD/AP8A/gD+AP4A/gD+AP0A/wBXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/gAoAP4AnAAAAAAAAAAAAAAAAAAAAAAA/gB6AP8AVgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AIwD+ALgA/gD9AP8A/wD+AP4A/gD+AP4A/gD/AMgA/gAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AHIA/gBcAAAAAAAAAAAAAAAAAAAAAAD+AB8A/wCzAP4ACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAcAP4AMgD+ADsA/wCrAP4A/gD+AP4A/gD+AP8A/QD+ + AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAQAP4AuwD+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AGUA/wCJAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAkAP8AvQD/AP4A/wD/AP8A/wD/ + AP8A/wD/AP8AwQD/AAUAAAAAAAAAAAAAAAAAAAAAAP8ABgD/AJ8A/wBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABQD+AIsA/gB2AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAkA/gAUAP8AIAD+ + AJcA/gD8AP4A/gD/AP8A/gD6AP4ARwAAAAAAAAAAAAAAAAD+AAkA/gCMAP8AdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ABQD+AIQA/gCaAP8AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + ACAA/wC0AP4A9QD+APUA/gD1AP8A9gD+APUA/gCyAAAAAAAAAAAA/gAeAP4AqgD+AG8A/wADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AEkA/wC5AP4AbgD+ABQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAbAP8AfQD+ALUA/gA3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAwA/wBkAP8AswD/ + AJgA/wBVAP8AJQD/ABEA/wAGAP8AAQD/AAIA/wAIAP8AEwD/ACgA/wBeAP8AngD/AK8A/wBVAP8ACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/gAFAP4AMAD/AHAA/gCgAP4AsAD+ALoA/wDAAP4AwAD+ALkA/gCvAP8AnAD+AGcA/gArAP4AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////+Af//4AAf/4D8B/8P/8P+AAAh/GA + AGPjAABx58AAceeAH/nn4A/558AP+efwB/nn8Af55/gD+eP4A/Hx/AHj8PwBx/h+AYf+H/4f/wAAP//A + AP////////////////////////////////8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/ACsA/wAeAP8AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD4A/gBlAP8AXgD+AEEA/wA1AP4AQgD/ + AF8A/gBmAP8AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/AG4A/wBcAP8AagD/AHsA/wB7AP8AewD/ + AHsA/wB7AP8AWwD/ADMA/wBpAP8ABgAAAAAAAAAAAAAAAAD/AGwA/gAMAP8AKQD+ALwA/wD7AP4A/gD/ + AP8A/gD+AP8A/wD+AO0A/wAIAP4AEQD/AGcAAAAAAAAAAAD/ADYA/wAzAAAAAAD/AAEA/wBtAP8A3AD/ + AP8A/wD/AP8AgQD/AGYA/wBlAP8AEQAAAAAA/wA/AP8AKAAAAAAA/gBdAP8ABAAAAAAAAAAAAP4AGwD/ + AKQA/gD0AP8A/wD+AJAAAAAAAAAAAAAAAAAAAAAAAP8ABwD+AFoAAAAAAP8AWgD/AAYAAAAAAAAAAAAA + AAAA/wBVAP8AxQD/AP8A/wDzAP8AFwAAAAAAAAAAAAAAAAD/AAwA/wBVAAAAAAD+ACYA/wBFAAAAAAAA + AAAAAAAAAP8ADwD+AIkA/wDqAP4A/gD/AIYAAAAAAAAAAAAAAAAA/wBPAP4AGwAAAAAAAAAAAP8AXwD/ + AB8AAAAAAAAAAAAAAAAA/wBAAP8ArQD/AP4A/wDuAP8AEwAAAAAA/wAnAP8AWAAAAAAAAAAAAAAAAAD/ + AAEA/gBaAP8ATwD+AAUAAAAAAP4ACAD/AGoA/gB6AP8AegD+ADMA/wBUAP4AVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/ABwA/wBgAP8AYgD/AGEA/wBhAP8AYQD/AGIA/wBfAP8AFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA/B8AAPAHAADAAQAAwAEAAJAEAACYPAAAnBwAAJwcAADOCQAAwgMAAPAH + AAD//wAA//8AAP//AAA= + + + \ No newline at end of file diff --git a/SLC1-N/Form_Alarm.Designer.cs b/SLC1-N/Form_Alarm.Designer.cs new file mode 100644 index 0000000..14940f4 --- /dev/null +++ b/SLC1-N/Form_Alarm.Designer.cs @@ -0,0 +1,78 @@ +namespace SLC1_N +{ + partial class Form_Alarm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.lb_alarmmsg = new System.Windows.Forms.Label(); + this.bt_OK = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // lb_alarmmsg + // + this.lb_alarmmsg.AutoSize = true; + this.lb_alarmmsg.Font = new System.Drawing.Font("宋体", 18F); + this.lb_alarmmsg.Location = new System.Drawing.Point(68, 71); + this.lb_alarmmsg.Name = "lb_alarmmsg"; + this.lb_alarmmsg.Size = new System.Drawing.Size(106, 24); + this.lb_alarmmsg.TabIndex = 0; + this.lb_alarmmsg.Text = "警报信息"; + // + // bt_OK + // + this.bt_OK.Location = new System.Drawing.Point(182, 139); + this.bt_OK.Name = "bt_OK"; + this.bt_OK.Size = new System.Drawing.Size(123, 48); + this.bt_OK.TabIndex = 1; + this.bt_OK.Text = "已处理"; + this.bt_OK.UseVisualStyleBackColor = true; + this.bt_OK.Click += new System.EventHandler(this.bt_OK_Click); + // + // Form_Alarm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(513, 226); + this.Controls.Add(this.bt_OK); + this.Controls.Add(this.lb_alarmmsg); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Name = "Form_Alarm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "PLC警报"; + this.TopMost = true; + this.Load += new System.EventHandler(this.Form_Alarm_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label lb_alarmmsg; + private System.Windows.Forms.Button bt_OK; + } +} \ No newline at end of file diff --git a/SLC1-N/Form_Alarm.cs b/SLC1-N/Form_Alarm.cs new file mode 100644 index 0000000..01c68b8 --- /dev/null +++ b/SLC1-N/Form_Alarm.cs @@ -0,0 +1,254 @@ +using HslCommunication.Core.IMessage; +using Sunny.UI; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class Form_Alarm : Form // 警报弹窗 + { + public Form_Alarm() + { + InitializeComponent(); + } + + private void Form_Alarm_Load(object sender, EventArgs e) + { + + } + + // 设置报警消息的方法 + public void SetAlarmMessage(string message) + { + lb_alarmmsg.Text = message; + } + + private void bt_OK_Click(object sender, EventArgs e) + { + this.Close(); + } + } + + + public static class AlarmManager + { + private static Form_Alarm Form_Alarm; + private static readonly Queue m_alarmQueue = new Queue(); + public static string nowAlarmMessage; // 记录当前显示的是哪个报警 + private static readonly object lockObject = new object(); + + public static bool isShow = false; // 跟踪弹窗是否正在显示 + + // 更新报警 + public static void UpdateAlarm(string address, bool isshow) + { + lock (lockObject) // 添加锁确保线程安全 + { + string message = GetAlarmItem(address); + if (message == null) return; + + if (isshow) + { + // 有报警,加入队列(警报不在队列中且不是当前显示的) + if (!m_alarmQueue.Contains(message) && message != nowAlarmMessage) + { + m_alarmQueue.Enqueue(message); + } + + // 如果弹窗没显示,就显示 + if (!isShow) + { + ShowNextAlarm(); + } + } + else + { + if (message == nowAlarmMessage) // 如果是当前显示的报警,关闭弹窗 + { + + CloseFormAlarm(); + } + + // 从队列移除对应的报警 + if (m_alarmQueue.Contains(message)) + { + var newQueue = new Queue(m_alarmQueue.Where(m => m != message)); + m_alarmQueue.Clear(); + foreach (var msg in newQueue) + { + m_alarmQueue.Enqueue(msg); + } + } + } + } + } + + // 显示下一个警报 + private static void ShowNextAlarm() + { + lock (lockObject) + { + if (m_alarmQueue.Count > 0 && !isShow) + { + nowAlarmMessage = m_alarmQueue.Dequeue(); + if (string.IsNullOrEmpty(nowAlarmMessage)) + return; + + isShow = true; + + // 使用UI线程显示弹窗 + if (Application.OpenForms.Count > 0) + { + var mainForm = Application.OpenForms[0]; + if (mainForm.InvokeRequired) + { + mainForm.BeginInvoke(new Action(() => ShowAlarmDialog())); + } + else + { + ShowAlarmDialog(); + } + } + } + else + { + nowAlarmMessage = null; + } + } + } + + // 显示警报对话框 + private static void ShowAlarmDialog() + { + try + { + if (Form_Alarm == null || Form_Alarm.IsDisposed) + { + Form_Alarm = new Form_Alarm(); + Form_Alarm.FormClosed += (s, e) => + { + lock (lockObject) + { + isShow = false; + nowAlarmMessage = null; + + // 短暂延迟后显示下一个报警,避免竞争条件 + Task.Delay(100).ContinueWith(t => + { + ShowNextAlarm(); + }, TaskScheduler.FromCurrentSynchronizationContext()); + } + }; + } + + Form_Alarm.SetAlarmMessage(nowAlarmMessage); + Form_Alarm.StartPosition = FormStartPosition.CenterScreen; + Form_Alarm.TopMost = true; // 确保弹窗在最前面 + + Form_Alarm.ShowDialog(); // 使用show可能会出问题 + } + catch (Exception ex) + { + lock (lockObject) + { + isShow = false; + nowAlarmMessage = null; + + // 延迟后重试 + Task.Delay(100).ContinueWith(t => + { + ShowNextAlarm(); + }, TaskScheduler.FromCurrentSynchronizationContext()); + } + } + } + + // 关闭警报弹窗 + private static void CloseFormAlarm() + { + if (Form_Alarm != null && !Form_Alarm.IsDisposed && Form_Alarm.Visible) + { + try + { + if (Form_Alarm.InvokeRequired) + { + Form_Alarm.BeginInvoke(new Action(() => + { + if (!Form_Alarm.IsDisposed && Form_Alarm.Visible) + Form_Alarm.Close(); + })); + } + else + { + if (!Form_Alarm.IsDisposed && Form_Alarm.Visible) + Form_Alarm.Close(); + } + } + catch (Exception ex) + { + Console.WriteLine($"关闭报警对话框异常: {ex.Message}"); + lock (lockObject) + { + isShow = false; + nowAlarmMessage = null; + } + } + } + else + { + lock (lockObject) + { + isShow = false; + nowAlarmMessage = null; + ShowNextAlarm(); + } + } + } + + + // 报警项字典 + private static readonly Dictionary alarmDictionary = new Dictionary + { + {"M1032", "CH1 通道异常"}, + {"M1033", "CH2 通道异常"}, + {"M1034", "CH3 通道异常"}, + {"M1035", "CH4 通道异常"}, + + {"M1100", "CH1 通道异常光栅触发"}, + {"M1101", "CH1 通道异常急停触发"}, + {"M1102", "CH1 通道复位后才可启动"}, + + {"M1103", "CH2 通道异常光栅触发"}, + {"M1104", "CH2 通道异常急停触发"}, + {"M1105", "CH2 通道复位后才可启动"}, + + {"M1106", "CH3 通道异常光栅触发"}, + {"M1107", "CH3 通道异常急停触发"}, + {"M1108", "CH3 通道复位后才可启动"}, + + {"M1109", "CH4 通道异常光栅触发"}, + {"M1110", "CH4 通道异常急停触发"}, + {"M1111", "CH4 通道复位后才可启动"}, + + {"M1112", "设备异常-安全门打开"}, + {"M1113", "设备异常-总急停按下"} + }; + + // 获取报警项 + private static string GetAlarmItem(string address) + { + if (alarmDictionary.TryGetValue(address, out string message)) + { + return message; + } + return null; + } + } +} diff --git a/SLC1-N/Form_Alarm.resx b/SLC1-N/Form_Alarm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SLC1-N/Form_Alarm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SLC1-N/Form_HQMESconfig.Designer.cs b/SLC1-N/Form_HQMESconfig.Designer.cs new file mode 100644 index 0000000..f4b9e7f --- /dev/null +++ b/SLC1-N/Form_HQMESconfig.Designer.cs @@ -0,0 +1,149 @@ +namespace SLC1_N +{ + partial class Form_HQMESconfig + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tb_LINE = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.tb_Tools = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.tb_ActionName = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // tb_LINE + // + this.tb_LINE.Font = new System.Drawing.Font("宋体", 15F); + this.tb_LINE.Location = new System.Drawing.Point(110, 175); + this.tb_LINE.Name = "tb_LINE"; + this.tb_LINE.Size = new System.Drawing.Size(194, 30); + this.tb_LINE.TabIndex = 219; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label10.Location = new System.Drawing.Point(57, 178); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(41, 12); + this.label10.TabIndex = 218; + this.label10.Text = "线体:"; + // + // button1 + // + this.button1.Font = new System.Drawing.Font("宋体", 15F); + this.button1.Location = new System.Drawing.Point(123, 284); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(124, 53); + this.button1.TabIndex = 217; + this.button1.Text = "保存"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // tb_Tools + // + this.tb_Tools.Font = new System.Drawing.Font("宋体", 15F); + this.tb_Tools.Location = new System.Drawing.Point(110, 222); + this.tb_Tools.Name = "tb_Tools"; + this.tb_Tools.Size = new System.Drawing.Size(194, 30); + this.tb_Tools.TabIndex = 216; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label13.Location = new System.Drawing.Point(57, 227); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(41, 12); + this.label13.TabIndex = 215; + this.label13.Text = "工具:"; + // + // tb_ActionName + // + this.tb_ActionName.Font = new System.Drawing.Font("宋体", 15F); + this.tb_ActionName.Location = new System.Drawing.Point(110, 131); + this.tb_ActionName.Name = "tb_ActionName"; + this.tb_ActionName.Size = new System.Drawing.Size(194, 30); + this.tb_ActionName.TabIndex = 214; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label9.Location = new System.Drawing.Point(57, 138); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(41, 12); + this.label9.TabIndex = 213; + this.label9.Text = "工位:"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("宋体", 20F); + this.label4.Location = new System.Drawing.Point(127, 62); + this.label4.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(108, 27); + this.label4.TabIndex = 212; + this.label4.Text = "MES配置"; + // + // Form_HQMESconfig + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(388, 409); + this.Controls.Add(this.tb_LINE); + this.Controls.Add(this.label10); + this.Controls.Add(this.button1); + this.Controls.Add(this.tb_Tools); + this.Controls.Add(this.label13); + this.Controls.Add(this.tb_ActionName); + this.Controls.Add(this.label9); + this.Controls.Add(this.label4); + this.Name = "Form_HQMESconfig"; + this.Text = "Form_HQMESconfig"; + this.Load += new System.EventHandler(this.Form_HQMESconfig_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox tb_LINE; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.TextBox tb_Tools; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox tb_ActionName; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label4; + } +} \ No newline at end of file diff --git a/SLC1-N/Form_HQMESconfig.cs b/SLC1-N/Form_HQMESconfig.cs new file mode 100644 index 0000000..93f879e --- /dev/null +++ b/SLC1-N/Form_HQMESconfig.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class Form_HQMESconfig : Form + { + public Form_HQMESconfig() + { + InitializeComponent(); + } + + private void Form_HQMESconfig_Load(object sender, EventArgs e) + { + tb_ActionName.Text = Form1.m_ActionName; + tb_Tools.Text = Form1.m_Tools; + tb_LINE.Text = Form1.m_LINE; + } + + private void button1_Click(object sender, EventArgs e) + { + Form1.m_ActionName = tb_ActionName.Text; + Form1.m_Tools = tb_Tools.Text; + Form1.m_LINE = tb_LINE.Text; + + // Json记录 + var config = new JsonConfig("config.json"); + config.SetValue("LINE", tb_LINE.Text); + config.SetValue("ActionName", tb_ActionName.Text); + config.SetValue("Tools", tb_Tools.Text); + this.Close(); + } + } +} diff --git a/SLC1-N/Form_HQMESconfig.resx b/SLC1-N/Form_HQMESconfig.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SLC1-N/Form_HQMESconfig.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SLC1-N/Form_LogOn.Designer.cs b/SLC1-N/Form_LogOn.Designer.cs new file mode 100644 index 0000000..efb6f12 --- /dev/null +++ b/SLC1-N/Form_LogOn.Designer.cs @@ -0,0 +1,162 @@ +namespace SLC1_N +{ + partial class Form_LogOn + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form_LogOn)); + this.Account = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.Logtime = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.Password = new System.Windows.Forms.TextBox(); + this.Log = new System.Windows.Forms.Button(); + this.Timer1 = new System.Windows.Forms.Timer(this.components); + this.timer2 = new System.Windows.Forms.Timer(this.components); + this.SuspendLayout(); + // + // Account + // + this.Account.Font = new System.Drawing.Font("宋体", 15F); + this.Account.FormattingEnabled = true; + this.Account.Location = new System.Drawing.Point(54, 203); + this.Account.Name = "Account"; + this.Account.Size = new System.Drawing.Size(190, 28); + this.Account.TabIndex = 45; + this.Account.Visible = false; + this.Account.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Account_KeyDown); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("宋体", 13F); + this.label2.Location = new System.Drawing.Point(82, 182); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(134, 18); + this.label2.TabIndex = 44; + this.label2.Text = "请选择账户名称"; + this.label2.Visible = false; + // + // Logtime + // + this.Logtime.AutoSize = true; + this.Logtime.Font = new System.Drawing.Font("宋体", 14F); + this.Logtime.Location = new System.Drawing.Point(94, 9); + this.Logtime.Name = "Logtime"; + this.Logtime.Size = new System.Drawing.Size(209, 19); + this.Logtime.TabIndex = 43; + this.Logtime.Text = "yyyy-MM-dd HH:mm:ss "; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("宋体", 13F); + this.label3.Location = new System.Drawing.Point(11, 10); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(98, 18); + this.label3.TabIndex = 42; + this.label3.Text = "当前时间:"; + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("宋体", 13F); + this.label1.Location = new System.Drawing.Point(101, 43); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(98, 18); + this.label1.TabIndex = 40; + this.label1.Text = "请输入密码"; + // + // Password + // + this.Password.Font = new System.Drawing.Font("宋体", 15F); + this.Password.Location = new System.Drawing.Point(55, 64); + this.Password.Name = "Password"; + this.Password.Size = new System.Drawing.Size(190, 30); + this.Password.TabIndex = 39; + this.Password.UseSystemPasswordChar = true; + this.Password.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Password_KeyDown); + // + // Log + // + this.Log.Font = new System.Drawing.Font("宋体", 12F); + this.Log.Location = new System.Drawing.Point(103, 117); + this.Log.Name = "Log"; + this.Log.Size = new System.Drawing.Size(95, 42); + this.Log.TabIndex = 46; + this.Log.Text = "登录"; + this.Log.UseVisualStyleBackColor = true; + this.Log.Click += new System.EventHandler(this.Log_Click); + // + // Timer1 + // + this.Timer1.Tick += new System.EventHandler(this.Timer1_Tick); + // + // timer2 + // + this.timer2.Tick += new System.EventHandler(this.timer2_Tick); + // + // LogOn + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(314, 179); + this.Controls.Add(this.Log); + this.Controls.Add(this.Account); + this.Controls.Add(this.label2); + this.Controls.Add(this.Logtime); + this.Controls.Add(this.label3); + this.Controls.Add(this.label1); + this.Controls.Add(this.Password); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "LogOn"; + this.Text = "登录"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.LogOn_FormClosing); + this.Load += new System.EventHandler(this.LogOn_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + public System.Windows.Forms.ComboBox Account; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label Logtime; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox Password; + private System.Windows.Forms.Button Log; + private System.Windows.Forms.Timer Timer1; + private System.Windows.Forms.Timer timer2; + } +} \ No newline at end of file diff --git a/SLC1-N/Form_LogOn.cs b/SLC1-N/Form_LogOn.cs new file mode 100644 index 0000000..93c14fc --- /dev/null +++ b/SLC1-N/Form_LogOn.cs @@ -0,0 +1,224 @@ +using System; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class Form_LogOn : Form + { + public Form_LogOn() + { + InitializeComponent(); + } + + private void LogOn_Load(object sender, EventArgs e) + { + Logtime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + Timer1.Interval = 1000; + Timer1.Start(); + //try + //{ + // string filepath = System.Environment.CurrentDirectory + "\\Config\\Users\\UsersInfo.mdb"; + + // if (File.Exists(filepath) == true)//判断所选路径是否有文件 + // { + + // string constr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + System.Environment.CurrentDirectory + "\\Config\\Users\\UsersInfo.mdb;"; + // OleDbConnection con = new OleDbConnection(constr); + // con.Open(); + + // string sql2 = "SELECT * FROM UserInfo"; + + // OleDbCommand cmd2 = new OleDbCommand(sql2, con); + // OleDbDataReader userinformation = cmd2.ExecuteReader(); + + // //下移游标,读取一行,如果没有数据了则返回false + // while (userinformation.Read()) + // { + // Account.Items.Add(Convert.ToString(userinformation["账户"])); + // } + + + // userinformation.Close(); + // con.Close(); + // } + //} + //catch (Exception ex) + //{ + // MessageBox.Show(ex.Message); + //} + Password.Focus(); + } + + private void Log_Click(object sender, EventArgs e) + { + try + { + + if (Password.Text == "linglong29529959" || Password.Text == "29529959" || Password.Text == "qwe") + { + + Timer1.Stop(); + + //Form1.f1.网络设置ToolStripMenuItem.Enabled = true; + //Form1.f1.pLC控制ToolStripMenuItem.Enabled = true; + //Form1.f1.串口配置ToolStripMenuItem.Enabled = true; + //Form1.f1.测试参数ToolStripMenuItem.Enabled = true; + //Form1.f1.基本设置ToolStripMenuItem.Enabled = true; + //Form1.f1.存储设置ToolStripMenuItem.Enabled = true; + //Form1.f1.用户管理ToolStripMenuItem.Enabled = true; + //Form1.f1. + //ToolStripMenuItem.Enabled = true; + + Form1.f1.lb_User.Text = "厂商"; + Form1.f1.User = "厂商"; + //Form1.f1.DayTime.Start(); + + this.Close(); + //Form1.f1.Show(); + + } + else + { + //string filepath = System.Environment.CurrentDirectory + "\\Config\\Users\\UsersInfo.mdb"; + + //if (File.Exists(filepath) == false)//判断所选路径是否有文件 + //{ + + // MessageBox.Show("请先新建用户!"); + + //} + //else if (String.IsNullOrEmpty(Account.Text)) + //{ + // MessageBox.Show("请先选择用户!"); + //} + //else + //{ + //string constr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + System.Environment.CurrentDirectory + "\\Config\\Users\\UsersInfo.mdb;"; + //OleDbConnection con = new OleDbConnection(constr); + //con.Open(); + + //string sql = "SELECT * FROM UserInfo WHERE 账户='" + Account.Text + "'"; + + //OleDbCommand cmd2 = new OleDbCommand(sql, con); + //OleDbDataReader userinformation = cmd2.ExecuteReader(); + + //string userpassword = null; + //string usercharacter = null; + + //while (userinformation.Read()) + //{ + // userpassword = Convert.ToString(userinformation["密码"]); + // usercharacter = Convert.ToString(userinformation["权限"]); + //} + + //userinformation.Close(); + //con.Close(); + string userpassword2 = DateTime.Now.ToString("yyMMHH"); + string userpassword = DateTime.Now.ToString("ddHHmm"); + string userpassword3 = "ghkj.2021"; + if (Password.Text == userpassword) + { + //Form1.f1.Admin.Text = Account.Text; + Form1.f1.lb_User.Text = "工程师"; + Form1.f1.User = "工程师"; + Timer1.Stop(); + //if (usercharacter == "操作员") + //{ + // Form1.f1.网络设置ToolStripMenuItem.Enabled = false; + // Form1.f1.pLC控制ToolStripMenuItem.Enabled = false; + // Form1.f1.串口配置ToolStripMenuItem.Enabled = false; + // Form1.f1.测试参数ToolStripMenuItem.Enabled = false; + // Form1.f1.基本设置ToolStripMenuItem.Enabled = false; + // Form1.f1.存储设置ToolStripMenuItem.Enabled = false; + // Form1.f1.用户管理ToolStripMenuItem.Enabled = false; + // Form1.f1.复位ToolStripMenuItem.Enabled = false; + //} + //else + //{ + // Form1.f1.网络设置ToolStripMenuItem.Enabled = true; + // Form1.f1.pLC控制ToolStripMenuItem.Enabled = true; + // Form1.f1.串口配置ToolStripMenuItem.Enabled = true; + // Form1.f1.测试参数ToolStripMenuItem.Enabled = true; + // Form1.f1.基本设置ToolStripMenuItem.Enabled = true; + // Form1.f1.存储设置ToolStripMenuItem.Enabled = true; + // Form1.f1.用户管理ToolStripMenuItem.Enabled = true; + // Form1.f1.复位ToolStripMenuItem.Enabled = true; + //} + //Form1.f1.DayTime.Start(); + //string logintime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + ////写入登录记录 + //record_con.Open(); + //string sql2 = " INSERT INTO Login(账户, 登录时间) VALUES('" + Account.Text + "', '" + logintime + "')"; + //OleDbCommand record_cmd = new OleDbCommand(sql2, record_con); + //record_cmd.ExecuteNonQuery(); + //record_con.Close(); + //Form1.f1.Show(); + + //Machine mac = new Machine(usercharacter); + //mac.ShowDialog(); + this.Close(); + } + + else if (Password.Text== userpassword2) + { + Form1.f1.lb_User.Text = "管理员"; + Form1.f1.User = "管理员"; + Timer1.Stop(); + this.Close(); + } + else if (Password.Text == userpassword3|| Password.Text == "123456") + { + Form1.f1.lb_User.Text = "超级管理员"; + Form1.f1.User = "超级管理员"; + Timer1.Stop(); + this.Close(); + } + else + { + MessageBox.Show("密码错误!"); + Password.ResetText(); + Password.Focus(); + } + //} + + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + + private void Password_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == System.Windows.Forms.Keys.Enter) + { + Log.PerformClick(); //执行单击button的动作 + } + } + + private void LogOn_FormClosing(object sender, FormClosingEventArgs e) + { + //if (String.IsNullOrEmpty(Form1.f1.Admin.Text)) + //{ + // System.Environment.Exit(0); + //} + } + + private void Timer1_Tick(object sender, EventArgs e) + { + Logtime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + } + + private void Account_KeyDown(object sender, KeyEventArgs e) + { + e.Handled = true; + } + + private void timer2_Tick(object sender, EventArgs e) + { + Form1.f1.lb_User.Text = "操作员"; + Form1.f1.User = "操作员"; + } + } +} diff --git a/SLC1-N/Form_LogOn.resx b/SLC1-N/Form_LogOn.resx new file mode 100644 index 0000000..4e0324b --- /dev/null +++ b/SLC1-N/Form_LogOn.resx @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 107, 17 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAACq + qnqHeoqqgAAAAAAAAAAAAAAAAAAACqiAAAAAAAAAeqgAAAAAAAAAAAAAAAAKqAAAAAAAAAAAAAqoAAAA + AAAAAAAAAAegAAAAAAAAAAAAAAAIoAAAAAAAAAAAAKcAAAAAAAAAAAAAAAAACqAAAAAAAAAACgAIenqq + qqqqqqqqqqAAAIoAAAAAAAAAoAAAAKqqqqqqqqqqqqgAAAigAAAAAAAKAAAAiqqqqqqqqqqqqqoAAACK + AAAAAAB3AAAAeHiqqqqqqqqqqqoAAAAKAAAAAACgAAAAAAqqqqqqqqqqqqoAAAAAoAAAAAqAAAAAAKqq + qqqqoAAAAAAAAAAAgAAAAAoAAAAAAAAIqqqqpwAAAAAAAAAACgAAAAoAAAAAAAAKqqqqqgAAAAAAAAAA + CgAAAAgAAAAAAAiqqqqqqqAAAAAAAAAABwAAAAoAAAAAAAAACKqqqqAAAAAAAAAACgAAAAgAAAAAAAAA + qqqqqqgAAAAAAAAACgAAAAoAAAAAAAAKqqqqqqoAAAAAAAAACgAAAAoAAAAAAAAAAAqqqqpwAAAAAAAA + CgAAAAoAAAAAAAAAAKqqqqqgAAAAAAAAiAAAAACAAAAAAAAAB6iqqqqoAAAAAAAAoAAAAACgAAAAAAAA + AACKqqqqAAAAAAAIoAAAAAAKAAAAAAAAAAqqqqqqgAAAAAAKAAAAAAAAoAAAAAAAAIqKiqqqoAAAAACg + AAAAAAAAigAAAAAAAAAAqqqqqAAAAAoAAAAAAAAACKAAAAAAAAAKqqqqqgAAAKAAAAAAAAAAAAqAAAAA + AAAAAAAAAAAAqgAAAAAAAAAAAACqgAAAAAAAAAAAAAB6gAAAAAAAAAAAAAAAeqAAAAAAAAAAAKqAAAAA + AAAAAAAAAAAAAAenoAAAAAB6qAAAAAAAAAAAAAAAAAAAAAAAinqqqqhwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////P///AAD//8AAf/8AAP/+H/8P/wAA//j//+P/ + AAD/5///+f8AAP/P///+fwAA/7gAAB8/AAD/fwAAD58AAP78AAAPzwAA/PwAAA/vAAD9/4AAD/cAAPn/ + AB//9wAA+//gD//7AAD7/+AP//sAAPv/gAf/+wAA+//4B//7AAD7//AD//sAAPv/4AP/+wAA+//+Af/7 + AAD7//wB//MAAP3/+AD/9wAA/f//AP/nAAD+//4Af+8AAP9//AB/3wAA/z//wD+/AAD/n/+AP38AAP/n + ///8/wAA//H///H/AAD//H//x/8AAP//h/w//wAA///wAf//AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAACKqAAAenAAAAAAAAAAAACoAAAAAAAAegAAAAAAAAB3AAAAAAAAAACKAAAAAA + AKAAqqqqqqqqoAAIAAAAAAoAAIqqqqqqqqoAAKAAAACAAAinqqqqqqqqAAAIAAAAoAAACqqqqqeqigAA + CgAACAAAAAiKqqoAAAAAAAAAAAoAAAAAqqqqoAAAAAAAgAAKAAAAAACqqqAAAAAAAKAACAAAAAAIqqqq + AAAAAABwAAoAAAAAAAqqqgAAAAAAcAAAAAAAAACqqqqgAAAAAAAAAHAAAAAAAKqqoAAAAAoAAAAIAAAA + AAqqqqgAAACAAAAACgAAAAAACKqqAAAIAAAAAACHAAAAAKqqqqAAoAAAAAAAAKAAAAAAAAAACAAAAAAA + AAAAdwAAAAAAigAAAAAAAAAAAAAHqKeooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////+Hj//+f/n/+f/+f/cAB7/vAAPf3gAD79+AA++/g + P//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/Ad//f/+//8/8///4B/////////////// + //////////////////8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqoAAAAAAKqoAAAAAAAAiqoA + AAAAAAAKqgAAAAAAAAiqgAAAAAAAAHqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAP//AAD//wAA//8AAP//AAD4DwAA/D8AAPw/AAD+PwAA/h8AAP8fAAD//wAA//8AAP// + AAD//wAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAAP4AAAX+ + BQAJ/wkADf4NABH/EQAW/hYAGf8ZAB3+HQAh/iEAJv4mACr+KgAt/i0AMf4xADX+NQA5/jkAPf49AEH+ + QQBF/kUAS/9LAE3+TQBR/lEAVf5VAFn+WQBe/14AYf5hAGX+ZQBp/mkAbv9uAHD/cAB1/nUAef55AH7+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFggIDhMXFxsXFxIOBgobAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFgwSIAAAAAAAAAAAAAAAAAAdEQwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMHQAA + AAAAAAAAAAAAAAAAAAAAAAAbDBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAbCAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAB0IAAAAAAAAAAAAAAAAAAAAAAAAAAwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREA + AAAAAAAAAAAAAAAAAAAACgAAACAbFgwBAQEBAQEBAQEBAQEBAQEBAQEAAAAAABsOAAAAAAAAAAAAAAAA + AAAKAAAAAAAAAAwBAQEBAQEBAQEBAQEBAQEBAQEbAAAAAAAgDgAAAAAAAAAAAAAAAA4AAAAAAAAdBAEB + AQEBAQEBAQEBAQEBAQEBAQEOAAAAAAAAGxIAAAAAAAAAAAAAGxYAAAAAAAAgICAgCgEBAQEBAQEBAQEB + AQEBAQEBAAAAAAAAAA4AAAAAAAAAAAAADAAAAAAAAAAAAAAWAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAA + AAAKAAAAAAAAAAAWHQAAAAAAAAAAAAwBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAK + AAAAAAAAAAAAAAAAACAGAQEBAQEBFgAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAOAAAAAAAAAAAAAAAA + AAgBAQEBAQEBBAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAATAAAAAAAAAAAAAAAXAQEBAQEBAQEBARYA + AAAAAAAAAAAAAAAAAAAADAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAFwEBAQEBAQYAAAAAAAAAAAAAAAAA + AAAADAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAWAQEBAQEBAQEXAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAS + AAAAAAAAAAAAAAAAAAoBBAQBAQEBAQEEAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAA + AAAAAAAOAQEBAQEBGwAAAAAAAAAAAAAAAAAAEQAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAYBAQEBAQEB + BAAAAAAAAAAAAAAAAAAbFwAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAEQwODAQBAQEBAR0AAAAAAAAAAAAA + AAAKAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAIAQBAQEBAQgAAAAAAAAAAAAAAB0WAAAAAAAAAAAA + AAoAAAAAAAAAAAAAAAAAAAARAQEBAQEBAQEdAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAMAAAAAAAAAAAA + AAAAABsbFxsRAQEBAQEKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAbEQAAAAAAAAAAAAAAAAAAAAAMAQEB + AQEBIAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAGw4AAAAAAAAAAAAAAAAAAAYBAQEBAQEBCAAAAAAAAAoA + AAAAAAAAAAAAAAAAAAAAAAAIGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCgAAAAAAAAAAAAAAAAAA + AAAAAAAAFwgdAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXDBMA + AAAAAAAAAAAAAAAAAAAAABIMGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODhIXAAAAAAAAAAAA + FxEMEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEw4IBAQECA4WIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///z///wAA///AAH//AAD//h//D/8AAP/4///j/wAA/+f///n/ + AAD/z////n8AAP+4AAAfPwAA/38AAA+fAAD+/AAAD88AAPz8AAAP7wAA/f+AAA/3AAD5/wAf//cAAPv/ + 4A//+wAA+//gD//7AAD7/4AH//sAAPv/+Af/+wAA+//wA//7AAD7/+AD//sAAPv//gH/+wAA+//8Af/z + AAD9//gA//cAAP3//wD/5wAA/v/+AH/vAAD/f/wAf98AAP8//8A/vwAA/5//gD9/AAD/5////P8AAP/x + ///x/wAA//x//8f/AAD//4f8P/8AAP//8AH//wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA/gAABf4FAAn+CQAP/g8AHv4eACv+KwAs/ywAM/8zADT/ + NAA+/j4AQv5CAEX+RQBJ/kkATP5MAFD+UABV/lUAWf9ZAF7+XgBh/mEAZf5lAGj+aABt/m0Acv5yAHX+ + dQB5/nkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkODhcAAAAAFg4O + AAAAAAAAAAAAAAAAAAAAAAAAAA8WAAAAAAAAAAAAAAAAExEAAAAAAAAAAAAAAAAAABMWAAAAAAAAAAAA + AAAAAAAAABEXAAAAAAAAAAAAAAANAAAADQQEAgQCBAIEAgQCBAAAAAAPAAAAAAAAAAAADQAAAAARAgIC + AgICAgICAgICCgAAAAAPAAAAAAAAABMAAAAAGREPBAICAgICAgICAgICAAAAAAAZAAAAAAAAFgAAAAAA + ABECAgICAgIGBwgICAgAAAAAAA8AAAAAABMAAAAAAAAAFxYFAgICAgAAAAAAAAAAAAAAAAAAAAAADgAA + AAAAAAAADwICAgICBwAAAAAAAAAAAAAADwAAAAANAAAAAAAAAAAAAAcCAgICAAAAAAAAAAAAAAANAAAA + AA0AAAAAAAAAAAAOAgICAgIHAAAAAAAAAAAAAA0AAAAADgAAAAAAAAAAAAAACgICAgIAAAAAAAAAAAAA + EwAAAAAAAAAAAAAAAAAAAA0CAgICAggAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAgICAgAAAAAA + AAAADQAAAAAAAAAXAAAAAAAAAAAADQICAgICCgAAAAAAABEAAAAAAAAAABcAAAAAAAAAAAAAABMCAgIC + AAAAAAAXAAAAAAAAAAAAABkTAAAAAAAAAAAOBAICAgQOAAAADwAAAAAAAAAAAAAAAAAOAAAAAAAAAAAA + AAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAADhMAAAAAAAAAAAAAEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAT + Dg0KCg0OEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////+Hj//+f + /n/+f/+f/cAB7/vAAPf3gAD79+AA++/gP//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/ + Ad//f/+//8/8///4B/////////////////////////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAB + AAAAAAAAAAAAAAABAAAAAQAAAAAAAAD+AAAE/wQAC/4LAAz/DAAR/hEAFf8VACP/IwA6/zoAQ/5DAFL/ + UgBb/1sAb/5vAHb+dgB5/3kAfv9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgICAgIFAAAAAAAA + AAAAAAcCAg4AAAAAAAAAAAAAAAALAwIMAAAAAAAAAAAAAAAAAAgCAwAAAAAAAAAAAAAAAAANBQIOAAAA + AAAAAAAAAAAAAAoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAPgP + AAD8PwAA/D8AAP4/AAD+HwAA/x8AAP//AAD//wAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/AEUA/wBjAP8AdgD+AIMA/wCGAP8AfAD/AHIA/wBeAP8AQAD+ + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/AAIA/wAnAP4AZgD/AKkA/wDiAP8A5QD/AMkA/wC0AP8ApQD+AJ4A/wCZAP8AnwD/ + AKgA/wC4AP8AzAD+AOkA/wDaAP8AmwD/AFwA/wAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAQAP8ATgD/AKwA/wDRAP4AuwD/AIAA/wBCAP8AIgD/ABUA/wAMAP8ABQD+ + AAIAAAAAAP8AAwD/AAYA/wANAP8AFwD+ACQA/wBMAP8AjQD/AMAA/wDTAP8AnAD+AD8A/wAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ACAD+AEQA/gC5AP4A0QD+AIcA/gA3AP4ACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABEA/gA+AP4AmwD+ + ANQA/gCmAP4AOAD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAZAP4AlgD/AOcA/wB2AP8AGQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+ACcA/wCQAP8A5gD/AH4A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD8A/wDTAP4AqwD/ACEA/wAGAP8AMAD/ + AF8A/wByAP4AcgD/AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+ + AHIA/wByAP8AcgD/AHIA/wByAP8ACwAAAAAAAAAAAP8AMQD/AMYA/wDBAP8AKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wACAP8ATAD/ANsA/wB3AP4AHwD/ + AEsA/wCHAP8AnAD/AKoA/wDSAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8ATAAAAAAAAAAAAAAAAAD/ABMA/wCYAP8AywD+ + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wA/AP8A3AD/ + AGMA/wAGAAAAAAAAAAAAAAAAAP8ACAD/AFQA/wDVAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AlAD+AAMAAAAAAAAAAAAA + AAAA/wAMAP8AhgD+AMwA/wAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ACIA/wDKAP8AfAD/AAIAAAAAAAAAAAAAAAAA/wARAP8AjgD/APIA/wD/AP4A/gD/AP8A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AzgD+ + ABQAAAAAAAAAAAAAAAAAAAAAAP8ADAD+AJkA/wC8AP8ACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD+AJ8A/gCpAP4AAwAAAAAAAAAAAAAAAAAAAAAA/gBPAP4AgAD+AIAA/gCAAP4AhAD+ + AN0A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4A+wD+ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABAA/gDJAP4AdQD+AAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ASAD/ANEA/wAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAiAP4AqwD/APkA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBCAP8A3AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AqAD/AI4A/wACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABgD/AFAA/wDRAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AHQA/wAyAP8AMgD+ADIA/wAyAP8AMgD/ADIA/wAyAP8AMgD+AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP8AuAD/AHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAWAP4A3wD/ADsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AEQA/wBTAP4AUwD/AFYA/wCDAP8A7gD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AK0A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AYAD/AL4A/wANAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBIAP4AxwD/ + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAQD/AGIA/wDkAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/APIA/wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ALwD/AMwA/wAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wBoAP4AsAD/AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAcAP4ApgD/ + APoA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wCuAP8ABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADgD/ANAA/wBDAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wB1AP4AqAD/AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAKAP4AJQD/ACYA/wAmAP8ANwD/AKEA/wD9AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wDsAP8AQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAgD/ + ANIA/wBMAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBvAP4AqwD+AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAEA/gAtAP4ArgD+APoA/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4ApQD+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABwD+ANEA/gBIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBYAP4AuwD/ABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AFMA/wDXAP8A+QD/APkA/wD5AP8A/QD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A8QD+AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AHgD/AM0A/wA4AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wApAP4A2AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wA8AP8AzQD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/gD+AJ0A/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ARwD/AMYA/wAaAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP4AzAD/AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ADQD/AHMA/wDuAP8A/gD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+APMA/wAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AkAD/AKAA/wACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AbwD/AL8A/wASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAMAP8AdgD/AMUA/wDLAP8AywD+ANIA/wD3AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wCPAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAbAP8A3wD/ + AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AGwD/AMgA/wBrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AIQA/wDxAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wDkAP8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAUA/wCOAP8ArgD/AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AFEA/gDeAP4AMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAzAP4AwwD+ + AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4AigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+AE4A/gDoAP4AKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AAYA/wB9AP8A1AD/ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ABsA/wCPAP8AngD+AJ4A/wCfAP8AvgD/APsA/wD/AP8A/wD+AP4A/wD/AP8A3wD/ACkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AQgD+ANgA/wBdAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAOAP8AmAD/AMMA/wAyAP4AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAUA/wBHAP8A1QD/AP0A/wD/AP8A/wD+AP4A/wD/AP8A/QD/ + AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wBMAP8AzgD+AHwA/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADQD/AJYA/wDNAP4AUgD/AAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AH4A/wDtAP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AN8A/wAcAAAAAAAAAAAAAAAAAP8ACwD/AGoA/wDYAP8AdQD+AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAQA/wBqAP4A4QD/ + AJwA/wAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ANQD+AHAA/wBxAP8AcQD/ + AHEA/wBxAP8AcQD+AHEA/wBxAP8AcQD/AG4A/wAmAAAAAAAAAAAA/wAqAP8ArAD/AN0A/wBMAP8AAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4AJAD/AKEA/wDnAP8AhwD/AC0A/wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wABAP8APQD+AJ4A/wDjAP8AkgD/ + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAgA/gBCAP4AqQD+ANMA/gCzAP4AXQD+AC0A/gANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gASAP4ANAD+AGsA/gC+AP4A0QD+ + AJcA/gA0AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/ADUA/wB7AP4AyAD/ + AMwA/wC/AP8AoAD/AHQA/wBVAP8APgD+ADMA/wArAP8ANAD/AEEA/wBaAP8AegD+AKcA/wDCAP8AzwD/ + AL4A/wBwAP8AKQD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD/AC8A/wBbAP8AhwD/AK8A/wDPAP8A5AD+APEA/wD1AP8A8AD/AOAA/wDJAP8AqgD+ + AIAA/wBTAP8AJQD/AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//+AB//8AAP/+AAAf/wAA//gAQAP/AAD/4D//gP8AAP/B///wfwAA/4AAAAw/AAD+AAAADh8AAPwc + AAAHDwAA/DgAAAeHAAD4eAAAB8MAAPj/AAAH4wAA+PwAAAfjAADx/AAH//EAAPH/gAf/8QAA8f8AA//x + AADx/wAD//EAAPH/wAH/8QAA8f/AAf/xAADx//wA//EAAPH/8AD/8QAA+P/gAH/jAAD4//4Af8MAAPx/ + /AB/xwAA/D/4AD+HAAD+D/8APg8AAP8H/gAcHwAA/4P+ABg/AAD/4H//wP8AAP/wD/4B/wAA//wAAAf/ + AAD//4AAP/8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA8A/gAzAP4ASwD/AFgA/gBVAP4ASQD+ + ADAA/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAEAP4ANwD+AIcA/wCzAP4AtAD+AI8A/gB1AP8AaQD+ + AGoA/gB4AP4AkgD/ALcA/gCvAP4AfwD+AC4A/wACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gADAP8ARAD+AK4A/gCWAP4AQQD/ABMA/gABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AAQD+ABYA/gBKAP4AnwD/AKYA/gA5AP4AAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD/AJsA/wCVAP8AHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AKgD/AKEA/wCMAP8ADAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ACMA/gC5AP4AUQD/AD8A/gB+AP4AuQD+ + APAA/wD2AP4A9gD+APYA/gD2AP8A9gD+APYA/gD2AP4A9gD/APYA/gD2AP4A9gD+AHkAAAAAAP4AAgD+ + AF0A/gCvAP8AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAXAP4AuAD+AC8AAAAAAAAAAAD+ + ABYA/gCfAP4A+gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+AP4A/gD+AP8A/wD+AP4A/gD+AP4AwQD/ + AAUAAAAAAAAAAAD+AEYA/wCvAP4ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD/AJwA/gBHAAAAAAAA + AAAA/wALAP4AhQD+AKoA/gCsAP8A8AD+AP4A/gD+AP4A/gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+ + AP4A/gD1AP8AHQAAAAAAAAAAAAAAAAD/AF0A/gCHAP4AAQAAAAAAAAAAAAAAAAAAAAAA/wBAAP8AlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AGgD/AKgA/wD8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDUAP8AywD/ + AMwA/wDLAP8AywD/AMsA/wBGAAAAAAAAAAAAAAAAAP8AAgD/AK0A/wAnAAAAAAAAAAAAAAAAAAAAAAD+ + AJcA/wA0AAAAAAAAAAAAAAAAAAAAAAD+AAcA/gBmAP4AjAD/AJIA/gDhAP4A/gD+AP4A/wD/AP4A/gD+ + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4ATgD+AHsAAAAAAAAAAAAA + AAAAAAAAAP4AtwD/AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP8ArQD+AP0A/gD+AP4A/gD/ + AP8A/gD+AP4A1AD+AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP4AqwAA + AAAAAAAAAAAAAAAAAAAA/gC9AP8AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD+AFAA/wBuAP4AdgD+ + ANQA/gD+AP8A/wD+AP4A/gD9AP4AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAMA/gC9AAAAAAAAAAAAAAAAAAAAAAD/ALsA/wAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AB4A/wCvAP8A/QD/AP8A/wD/AP8A/wD/AP8A/wDTAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ACAD/ALkAAAAAAAAAAAAAAAAAAAAAAP4ArwD/ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ANwD+AFAA/gBWAP4AwwD/AP8A/gD+AP4A/gD+AP0A/wBXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/gAoAP4AnAAAAAAAAAAAAAAAAAAAAAAA/gB6AP8AVgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AIwD+ALgA/gD9AP8A/wD+AP4A/gD+AP4A/gD/AMgA/gAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AHIA/gBcAAAAAAAAAAAAAAAAAAAAAAD+AB8A/wCzAP4ACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAcAP4AMgD+ADsA/wCrAP4A/gD+AP4A/gD+AP8A/QD+ + AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAQAP4AuwD+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AGUA/wCJAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAkAP8AvQD/AP4A/wD/AP8A/wD/ + AP8A/wD/AP8AwQD/AAUAAAAAAAAAAAAAAAAAAAAAAP8ABgD/AJ8A/wBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABQD+AIsA/gB2AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAkA/gAUAP8AIAD+ + AJcA/gD8AP4A/gD/AP8A/gD6AP4ARwAAAAAAAAAAAAAAAAD+AAkA/gCMAP8AdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ABQD+AIQA/gCaAP8AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + ACAA/wC0AP4A9QD+APUA/gD1AP8A9gD+APUA/gCyAAAAAAAAAAAA/gAeAP4AqgD+AG8A/wADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AEkA/wC5AP4AbgD+ABQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAbAP8AfQD+ALUA/gA3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAwA/wBkAP8AswD/ + AJgA/wBVAP8AJQD/ABEA/wAGAP8AAQD/AAIA/wAIAP8AEwD/ACgA/wBeAP8AngD/AK8A/wBVAP8ACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/gAFAP4AMAD/AHAA/gCgAP4AsAD+ALoA/wDAAP4AwAD+ALkA/gCvAP8AnAD+AGcA/gArAP4AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////+Af//4AAf/4D8B/8P/8P+AAAh/GA + AGPjAABx58AAceeAH/nn4A/558AP+efwB/nn8Af55/gD+eP4A/Hx/AHj8PwBx/h+AYf+H/4f/wAAP//A + AP////////////////////////////////8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/ACsA/wAeAP8AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD4A/gBlAP8AXgD+AEEA/wA1AP4AQgD/ + AF8A/gBmAP8AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/AG4A/wBcAP8AagD/AHsA/wB7AP8AewD/ + AHsA/wB7AP8AWwD/ADMA/wBpAP8ABgAAAAAAAAAAAAAAAAD/AGwA/gAMAP8AKQD+ALwA/wD7AP4A/gD/ + AP8A/gD+AP8A/wD+AO0A/wAIAP4AEQD/AGcAAAAAAAAAAAD/ADYA/wAzAAAAAAD/AAEA/wBtAP8A3AD/ + AP8A/wD/AP8AgQD/AGYA/wBlAP8AEQAAAAAA/wA/AP8AKAAAAAAA/gBdAP8ABAAAAAAAAAAAAP4AGwD/ + AKQA/gD0AP8A/wD+AJAAAAAAAAAAAAAAAAAAAAAAAP8ABwD+AFoAAAAAAP8AWgD/AAYAAAAAAAAAAAAA + AAAA/wBVAP8AxQD/AP8A/wDzAP8AFwAAAAAAAAAAAAAAAAD/AAwA/wBVAAAAAAD+ACYA/wBFAAAAAAAA + AAAAAAAAAP8ADwD+AIkA/wDqAP4A/gD/AIYAAAAAAAAAAAAAAAAA/wBPAP4AGwAAAAAAAAAAAP8AXwD/ + AB8AAAAAAAAAAAAAAAAA/wBAAP8ArQD/AP4A/wDuAP8AEwAAAAAA/wAnAP8AWAAAAAAAAAAAAAAAAAD/ + AAEA/gBaAP8ATwD+AAUAAAAAAP4ACAD/AGoA/gB6AP8AegD+ADMA/wBUAP4AVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/ABwA/wBgAP8AYgD/AGEA/wBhAP8AYQD/AGIA/wBfAP8AFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA/B8AAPAHAADAAQAAwAEAAJAEAACYPAAAnBwAAJwcAADOCQAAwgMAAPAH + AAD//wAA//8AAP//AAA= + + + \ No newline at end of file diff --git a/SLC1-N/Form_NetworkSet.Designer.cs b/SLC1-N/Form_NetworkSet.Designer.cs new file mode 100644 index 0000000..6a801e6 --- /dev/null +++ b/SLC1-N/Form_NetworkSet.Designer.cs @@ -0,0 +1,583 @@ +namespace SLC1_N +{ + partial class Form_NetworkSet + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form_NetworkSet)); + this.lb_CH1Communication_status = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.bt_CH1TCPReconnect = new System.Windows.Forms.Button(); + this.CH1TCPBreak = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.lb_CH1port = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.lb_CH1IP = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.lb_CH2port = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.lb_CH2IP = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.CH2TCPBreak = new System.Windows.Forms.Button(); + this.lb_CH2Communication_status = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.bt_CH2TCPReconnect = new System.Windows.Forms.Button(); + this.ReadConn = new System.Windows.Forms.Timer(this.components); + this.lb_ComputerIP = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.bt_UDPReadIP = new System.Windows.Forms.Button(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.lb_CH3port = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.lb_CH3IP = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.CH3TCPBreak = new System.Windows.Forms.Button(); + this.lb_CH3Communication_status = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.bt_CH3TCPReconnect = new System.Windows.Forms.Button(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.lb_CH4port = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.lb_CH4IP = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.CH4TCPBreak = new System.Windows.Forms.Button(); + this.lb_CH4Communication_status = new System.Windows.Forms.Label(); + this.label19 = new System.Windows.Forms.Label(); + this.bt_CH4TCPReconnect = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.SuspendLayout(); + // + // lb_CH1Communication_status + // + this.lb_CH1Communication_status.AutoSize = true; + this.lb_CH1Communication_status.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH1Communication_status.Location = new System.Drawing.Point(90, 33); + this.lb_CH1Communication_status.Name = "lb_CH1Communication_status"; + this.lb_CH1Communication_status.Size = new System.Drawing.Size(23, 16); + this.lb_CH1Communication_status.TabIndex = 347; + this.lb_CH1Communication_status.Text = "OK"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("宋体", 12F); + this.label5.Location = new System.Drawing.Point(6, 33); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(87, 16); + this.label5.TabIndex = 346; + this.label5.Text = "通讯状态:"; + // + // bt_CH1TCPReconnect + // + this.bt_CH1TCPReconnect.Font = new System.Drawing.Font("宋体", 12F); + this.bt_CH1TCPReconnect.Location = new System.Drawing.Point(191, 14); + this.bt_CH1TCPReconnect.Name = "bt_CH1TCPReconnect"; + this.bt_CH1TCPReconnect.Size = new System.Drawing.Size(93, 50); + this.bt_CH1TCPReconnect.TabIndex = 345; + this.bt_CH1TCPReconnect.Text = "TCP重连"; + this.bt_CH1TCPReconnect.UseVisualStyleBackColor = true; + this.bt_CH1TCPReconnect.Click += new System.EventHandler(this.CH1TCPReCon_Click); + // + // CH1TCPBreak + // + this.CH1TCPBreak.Font = new System.Drawing.Font("宋体", 12F); + this.CH1TCPBreak.Location = new System.Drawing.Point(191, 68); + this.CH1TCPBreak.Name = "CH1TCPBreak"; + this.CH1TCPBreak.Size = new System.Drawing.Size(93, 50); + this.CH1TCPBreak.TabIndex = 348; + this.CH1TCPBreak.Text = "TCP断开"; + this.CH1TCPBreak.UseVisualStyleBackColor = true; + this.CH1TCPBreak.Click += new System.EventHandler(this.CH1TCPBreak_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.lb_CH1port); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Controls.Add(this.lb_CH1IP); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.CH1TCPBreak); + this.groupBox1.Controls.Add(this.lb_CH1Communication_status); + this.groupBox1.Controls.Add(this.label5); + this.groupBox1.Controls.Add(this.bt_CH1TCPReconnect); + this.groupBox1.Location = new System.Drawing.Point(23, 49); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(313, 154); + this.groupBox1.TabIndex = 349; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "CH1左通道"; + // + // lb_CH1port + // + this.lb_CH1port.AutoSize = true; + this.lb_CH1port.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH1port.Location = new System.Drawing.Point(70, 106); + this.lb_CH1port.Name = "lb_CH1port"; + this.lb_CH1port.Size = new System.Drawing.Size(39, 16); + this.lb_CH1port.TabIndex = 352; + this.lb_CH1port.Text = "9999"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("宋体", 12F); + this.label4.Location = new System.Drawing.Point(6, 106); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(71, 16); + this.label4.TabIndex = 351; + this.label4.Text = "端口号:"; + // + // lb_CH1IP + // + this.lb_CH1IP.AutoSize = true; + this.lb_CH1IP.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH1IP.Location = new System.Drawing.Point(70, 67); + this.lb_CH1IP.Name = "lb_CH1IP"; + this.lb_CH1IP.Size = new System.Drawing.Size(103, 16); + this.lb_CH1IP.TabIndex = 350; + this.lb_CH1IP.Text = "192.168.1.59"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("宋体", 12F); + this.label2.Location = new System.Drawing.Point(6, 67); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(71, 16); + this.label2.TabIndex = 349; + this.label2.Text = "IP地址:"; + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.lb_CH2port); + this.groupBox3.Controls.Add(this.label13); + this.groupBox3.Controls.Add(this.lb_CH2IP); + this.groupBox3.Controls.Add(this.label15); + this.groupBox3.Controls.Add(this.CH2TCPBreak); + this.groupBox3.Controls.Add(this.lb_CH2Communication_status); + this.groupBox3.Controls.Add(this.label17); + this.groupBox3.Controls.Add(this.bt_CH2TCPReconnect); + this.groupBox3.Location = new System.Drawing.Point(363, 49); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(313, 154); + this.groupBox3.TabIndex = 351; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "CH2右通道"; + // + // lb_CH2port + // + this.lb_CH2port.AutoSize = true; + this.lb_CH2port.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH2port.Location = new System.Drawing.Point(70, 106); + this.lb_CH2port.Name = "lb_CH2port"; + this.lb_CH2port.Size = new System.Drawing.Size(39, 16); + this.lb_CH2port.TabIndex = 352; + this.lb_CH2port.Text = "9999"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Font = new System.Drawing.Font("宋体", 12F); + this.label13.Location = new System.Drawing.Point(6, 106); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(71, 16); + this.label13.TabIndex = 351; + this.label13.Text = "端口号:"; + // + // lb_CH2IP + // + this.lb_CH2IP.AutoSize = true; + this.lb_CH2IP.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH2IP.Location = new System.Drawing.Point(70, 67); + this.lb_CH2IP.Name = "lb_CH2IP"; + this.lb_CH2IP.Size = new System.Drawing.Size(103, 16); + this.lb_CH2IP.TabIndex = 350; + this.lb_CH2IP.Text = "192.168.1.59"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Font = new System.Drawing.Font("宋体", 12F); + this.label15.Location = new System.Drawing.Point(6, 67); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(71, 16); + this.label15.TabIndex = 349; + this.label15.Text = "IP地址:"; + // + // CH2TCPBreak + // + this.CH2TCPBreak.Font = new System.Drawing.Font("宋体", 12F); + this.CH2TCPBreak.Location = new System.Drawing.Point(191, 70); + this.CH2TCPBreak.Name = "CH2TCPBreak"; + this.CH2TCPBreak.Size = new System.Drawing.Size(93, 50); + this.CH2TCPBreak.TabIndex = 348; + this.CH2TCPBreak.Text = "TCP断开"; + this.CH2TCPBreak.UseVisualStyleBackColor = true; + this.CH2TCPBreak.Click += new System.EventHandler(this.CH2TCPBreak_Click); + // + // lb_CH2Communication_status + // + this.lb_CH2Communication_status.AutoSize = true; + this.lb_CH2Communication_status.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH2Communication_status.Location = new System.Drawing.Point(90, 33); + this.lb_CH2Communication_status.Name = "lb_CH2Communication_status"; + this.lb_CH2Communication_status.Size = new System.Drawing.Size(23, 16); + this.lb_CH2Communication_status.TabIndex = 347; + this.lb_CH2Communication_status.Text = "OK"; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Font = new System.Drawing.Font("宋体", 12F); + this.label17.Location = new System.Drawing.Point(6, 33); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(87, 16); + this.label17.TabIndex = 346; + this.label17.Text = "通讯状态:"; + // + // bt_CH2TCPReconnect + // + this.bt_CH2TCPReconnect.Font = new System.Drawing.Font("宋体", 12F); + this.bt_CH2TCPReconnect.Location = new System.Drawing.Point(191, 14); + this.bt_CH2TCPReconnect.Name = "bt_CH2TCPReconnect"; + this.bt_CH2TCPReconnect.Size = new System.Drawing.Size(93, 50); + this.bt_CH2TCPReconnect.TabIndex = 345; + this.bt_CH2TCPReconnect.Text = "TCP重连"; + this.bt_CH2TCPReconnect.UseVisualStyleBackColor = true; + this.bt_CH2TCPReconnect.Click += new System.EventHandler(this.CH2TCPReCon_Click); + // + // ReadConn + // + this.ReadConn.Tick += new System.EventHandler(this.ReadConn_Tick); + // + // lb_ComputerIP + // + this.lb_ComputerIP.AutoSize = true; + this.lb_ComputerIP.Font = new System.Drawing.Font("宋体", 12F); + this.lb_ComputerIP.Location = new System.Drawing.Point(117, 20); + this.lb_ComputerIP.Name = "lb_ComputerIP"; + this.lb_ComputerIP.Size = new System.Drawing.Size(103, 16); + this.lb_ComputerIP.TabIndex = 354; + this.lb_ComputerIP.Text = "192.168.1.59"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Font = new System.Drawing.Font("宋体", 12F); + this.label8.Location = new System.Drawing.Point(17, 20); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(103, 16); + this.label8.TabIndex = 353; + this.label8.Text = "本机IP地址:"; + // + // bt_UDPReadIP + // + this.bt_UDPReadIP.Font = new System.Drawing.Font("宋体", 12F); + this.bt_UDPReadIP.Location = new System.Drawing.Point(243, 7); + this.bt_UDPReadIP.Name = "bt_UDPReadIP"; + this.bt_UDPReadIP.Size = new System.Drawing.Size(93, 42); + this.bt_UDPReadIP.TabIndex = 355; + this.bt_UDPReadIP.Text = "搜索IP"; + this.bt_UDPReadIP.UseVisualStyleBackColor = true; + this.bt_UDPReadIP.Click += new System.EventHandler(this.UDPReadIP_Click); + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.lb_CH3port); + this.groupBox2.Controls.Add(this.label3); + this.groupBox2.Controls.Add(this.lb_CH3IP); + this.groupBox2.Controls.Add(this.label7); + this.groupBox2.Controls.Add(this.CH3TCPBreak); + this.groupBox2.Controls.Add(this.lb_CH3Communication_status); + this.groupBox2.Controls.Add(this.label10); + this.groupBox2.Controls.Add(this.bt_CH3TCPReconnect); + this.groupBox2.Location = new System.Drawing.Point(23, 218); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(313, 154); + this.groupBox2.TabIndex = 353; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "CH3右通道"; + // + // lb_CH3port + // + this.lb_CH3port.AutoSize = true; + this.lb_CH3port.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH3port.Location = new System.Drawing.Point(70, 106); + this.lb_CH3port.Name = "lb_CH3port"; + this.lb_CH3port.Size = new System.Drawing.Size(39, 16); + this.lb_CH3port.TabIndex = 352; + this.lb_CH3port.Text = "9999"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("宋体", 12F); + this.label3.Location = new System.Drawing.Point(6, 106); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(71, 16); + this.label3.TabIndex = 351; + this.label3.Text = "端口号:"; + // + // lb_CH3IP + // + this.lb_CH3IP.AutoSize = true; + this.lb_CH3IP.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH3IP.Location = new System.Drawing.Point(70, 67); + this.lb_CH3IP.Name = "lb_CH3IP"; + this.lb_CH3IP.Size = new System.Drawing.Size(103, 16); + this.lb_CH3IP.TabIndex = 350; + this.lb_CH3IP.Text = "192.168.1.59"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("宋体", 12F); + this.label7.Location = new System.Drawing.Point(6, 67); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(71, 16); + this.label7.TabIndex = 349; + this.label7.Text = "IP地址:"; + // + // CH3TCPBreak + // + this.CH3TCPBreak.Font = new System.Drawing.Font("宋体", 12F); + this.CH3TCPBreak.Location = new System.Drawing.Point(191, 70); + this.CH3TCPBreak.Name = "CH3TCPBreak"; + this.CH3TCPBreak.Size = new System.Drawing.Size(93, 50); + this.CH3TCPBreak.TabIndex = 348; + this.CH3TCPBreak.Text = "TCP断开"; + this.CH3TCPBreak.UseVisualStyleBackColor = true; + this.CH3TCPBreak.Click += new System.EventHandler(this.CH3TCPBreak_Click); + // + // lb_CH3Communication_status + // + this.lb_CH3Communication_status.AutoSize = true; + this.lb_CH3Communication_status.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH3Communication_status.Location = new System.Drawing.Point(90, 33); + this.lb_CH3Communication_status.Name = "lb_CH3Communication_status"; + this.lb_CH3Communication_status.Size = new System.Drawing.Size(23, 16); + this.lb_CH3Communication_status.TabIndex = 347; + this.lb_CH3Communication_status.Text = "OK"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Font = new System.Drawing.Font("宋体", 12F); + this.label10.Location = new System.Drawing.Point(6, 33); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(87, 16); + this.label10.TabIndex = 346; + this.label10.Text = "通讯状态:"; + // + // bt_CH3TCPReconnect + // + this.bt_CH3TCPReconnect.Font = new System.Drawing.Font("宋体", 12F); + this.bt_CH3TCPReconnect.Location = new System.Drawing.Point(191, 14); + this.bt_CH3TCPReconnect.Name = "bt_CH3TCPReconnect"; + this.bt_CH3TCPReconnect.Size = new System.Drawing.Size(93, 50); + this.bt_CH3TCPReconnect.TabIndex = 345; + this.bt_CH3TCPReconnect.Text = "TCP重连"; + this.bt_CH3TCPReconnect.UseVisualStyleBackColor = true; + this.bt_CH3TCPReconnect.Click += new System.EventHandler(this.bt_CH3TCPReconnect_Click); + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.lb_CH4port); + this.groupBox4.Controls.Add(this.label12); + this.groupBox4.Controls.Add(this.lb_CH4IP); + this.groupBox4.Controls.Add(this.label16); + this.groupBox4.Controls.Add(this.CH4TCPBreak); + this.groupBox4.Controls.Add(this.lb_CH4Communication_status); + this.groupBox4.Controls.Add(this.label19); + this.groupBox4.Controls.Add(this.bt_CH4TCPReconnect); + this.groupBox4.Location = new System.Drawing.Point(363, 218); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(313, 154); + this.groupBox4.TabIndex = 353; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "CH4右通道"; + // + // lb_CH4port + // + this.lb_CH4port.AutoSize = true; + this.lb_CH4port.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH4port.Location = new System.Drawing.Point(70, 106); + this.lb_CH4port.Name = "lb_CH4port"; + this.lb_CH4port.Size = new System.Drawing.Size(39, 16); + this.lb_CH4port.TabIndex = 352; + this.lb_CH4port.Text = "9999"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Font = new System.Drawing.Font("宋体", 12F); + this.label12.Location = new System.Drawing.Point(6, 106); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(71, 16); + this.label12.TabIndex = 351; + this.label12.Text = "端口号:"; + // + // lb_CH4IP + // + this.lb_CH4IP.AutoSize = true; + this.lb_CH4IP.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH4IP.Location = new System.Drawing.Point(70, 67); + this.lb_CH4IP.Name = "lb_CH4IP"; + this.lb_CH4IP.Size = new System.Drawing.Size(103, 16); + this.lb_CH4IP.TabIndex = 350; + this.lb_CH4IP.Text = "192.168.1.59"; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Font = new System.Drawing.Font("宋体", 12F); + this.label16.Location = new System.Drawing.Point(6, 67); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(71, 16); + this.label16.TabIndex = 349; + this.label16.Text = "IP地址:"; + // + // CH4TCPBreak + // + this.CH4TCPBreak.Font = new System.Drawing.Font("宋体", 12F); + this.CH4TCPBreak.Location = new System.Drawing.Point(191, 70); + this.CH4TCPBreak.Name = "CH4TCPBreak"; + this.CH4TCPBreak.Size = new System.Drawing.Size(93, 50); + this.CH4TCPBreak.TabIndex = 348; + this.CH4TCPBreak.Text = "TCP断开"; + this.CH4TCPBreak.UseVisualStyleBackColor = true; + this.CH4TCPBreak.Click += new System.EventHandler(this.CH4TCPBreak_Click); + // + // lb_CH4Communication_status + // + this.lb_CH4Communication_status.AutoSize = true; + this.lb_CH4Communication_status.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH4Communication_status.Location = new System.Drawing.Point(90, 33); + this.lb_CH4Communication_status.Name = "lb_CH4Communication_status"; + this.lb_CH4Communication_status.Size = new System.Drawing.Size(23, 16); + this.lb_CH4Communication_status.TabIndex = 347; + this.lb_CH4Communication_status.Text = "OK"; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Font = new System.Drawing.Font("宋体", 12F); + this.label19.Location = new System.Drawing.Point(6, 33); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(87, 16); + this.label19.TabIndex = 346; + this.label19.Text = "通讯状态:"; + // + // bt_CH4TCPReconnect + // + this.bt_CH4TCPReconnect.Font = new System.Drawing.Font("宋体", 12F); + this.bt_CH4TCPReconnect.Location = new System.Drawing.Point(191, 14); + this.bt_CH4TCPReconnect.Name = "bt_CH4TCPReconnect"; + this.bt_CH4TCPReconnect.Size = new System.Drawing.Size(93, 50); + this.bt_CH4TCPReconnect.TabIndex = 345; + this.bt_CH4TCPReconnect.Text = "TCP重连"; + this.bt_CH4TCPReconnect.UseVisualStyleBackColor = true; + this.bt_CH4TCPReconnect.Click += new System.EventHandler(this.bt_CH4TCPReconnect_Click); + // + // Form_NetworkSet + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(708, 403); + this.Controls.Add(this.groupBox4); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.bt_UDPReadIP); + this.Controls.Add(this.lb_ComputerIP); + this.Controls.Add(this.label8); + this.Controls.Add(this.groupBox3); + this.Controls.Add(this.groupBox1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Form_NetworkSet"; + this.Text = "仪器网络设置"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ConfigTCP_FormClosing); + this.Load += new System.EventHandler(this.ConfigTCP_Load); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox4.ResumeLayout(false); + this.groupBox4.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label lb_CH1Communication_status; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Button bt_CH1TCPReconnect; + private System.Windows.Forms.Button CH1TCPBreak; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label lb_CH1port; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label lb_CH1IP; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.Label lb_CH2port; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label lb_CH2IP; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Button CH2TCPBreak; + private System.Windows.Forms.Label lb_CH2Communication_status; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Button bt_CH2TCPReconnect; + private System.Windows.Forms.Timer ReadConn; + private System.Windows.Forms.Label lb_ComputerIP; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Button bt_UDPReadIP; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Label lb_CH3port; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label lb_CH3IP; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Button CH3TCPBreak; + private System.Windows.Forms.Label lb_CH3Communication_status; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Button bt_CH3TCPReconnect; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.Label lb_CH4port; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label lb_CH4IP; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Button CH4TCPBreak; + private System.Windows.Forms.Label lb_CH4Communication_status; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Button bt_CH4TCPReconnect; + } +} \ No newline at end of file diff --git a/SLC1-N/Form_NetworkSet.cs b/SLC1-N/Form_NetworkSet.cs new file mode 100644 index 0000000..cef4783 --- /dev/null +++ b/SLC1-N/Form_NetworkSet.cs @@ -0,0 +1,420 @@ +using System; +using System.Drawing; +using System.Net.Sockets; +using System.Net; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using System.Linq; +using System.Diagnostics; +using Sunny.UI; + +namespace SLC1_N +{ + public partial class Form_NetworkSet : Form + { + public Form_NetworkSet() + { + InitializeComponent(); + } + + private void ConfigTCP_Load(object sender, EventArgs e) + { + + + ch1ipaddress = Form1.f1.LL28CH1client.IP; + ch2ipaddress = Form1.f1.LL28CH2client.IP; + + ReadConn.Interval = 500; // 连接状态定时器 + ReadConn.Start(); + } + + // 连接状态定时器 + private void ReadConn_Tick(object sender, EventArgs e) + { + // CH1 + if (Form1.f1.LL28CH1client != null && Form1.f1.LL28CH1client.isRunning) + { + lb_CH1Communication_status.Text = "OK"; + lb_CH1Communication_status.ForeColor = Color.Green; + } + else + { + lb_CH1Communication_status.Text = "NG"; + lb_CH1Communication_status.ForeColor = Color.Red; + } + lb_CH1IP.Text = ch1ipaddress; + + // CH2 + if (Form1.f1.LL28CH2client != null && Form1.f1.LL28CH2client.isRunning) + { + lb_CH2Communication_status.Text = "OK"; + lb_CH2Communication_status.ForeColor = Color.Green; + } + else + { + lb_CH2Communication_status.Text = "NG"; + lb_CH2Communication_status.ForeColor = Color.Red; + } + lb_CH2IP.Text = ch2ipaddress; + + // CH3 + if (Form1.f1.LL28CH3client != null && Form1.f1.LL28CH3client.isRunning) + { + lb_CH3Communication_status.Text = "OK"; + lb_CH3Communication_status.ForeColor = Color.Green; + } + else + { + lb_CH3Communication_status.Text = "NG"; + lb_CH3Communication_status.ForeColor = Color.Red; + } + lb_CH3IP.Text = ch3ipaddress; + + // CH4 + if (Form1.f1.LL28CH4client != null && Form1.f1.LL28CH4client.isRunning) + { + lb_CH4Communication_status.Text = "OK"; + lb_CH4Communication_status.ForeColor = Color.Green; + } + else + { + lb_CH4Communication_status.Text = "NG"; + lb_CH4Communication_status.ForeColor = Color.Red; + } + lb_CH4IP.Text = ch4ipaddress; + + lb_ComputerIP.Text = Form1.f1.localipaddress; + } + + // CH1重连按钮 + private void CH1TCPReCon_Click(object sender, EventArgs e) + { + bt_CH1TCPReconnect.Enabled = false; + Form1.f1.LL28CH1client?.Stop(); // 先停止线程(如果正在运行) + Form1.f1.LL28CH1client?.Disconnect(); // 断开旧连接 + Form1.f1.LL28CH1client?.Connect(lb_CH1IP.Text); // 连接新 IP + Form1.f1.LL28CH1client?.Start(); // 重新启动线程 + + // 本地保存 + var jsconfig = new JsonConfig("config.json"); + jsconfig.SetValue("ch1ipaddress", lb_CH1IP.Text); + bt_CH1TCPReconnect.Enabled = true; + + // 同步 + Form1.f1.ch1ipaddress = lb_CH1IP.Text; + } + + // CH1断开连接 + private void CH1TCPBreak_Click(object sender, EventArgs e) + { + Form1.f1.LL28CH1client?.Disconnect(); // 断开旧连接 + } + + // CH2重连按钮 + private void CH2TCPReCon_Click(object sender, EventArgs e) + { + Form1.f1.LL28CH2client?.Stop(); // 先停止线程(如果正在运行) + Form1.f1.LL28CH2client?.Disconnect(); // 断开旧连接 + Form1.f1.LL28CH2client?.Connect(lb_CH2IP.Text); // 连接新 IP + Form1.f1.LL28CH2client?.Start(); // 重新启动线程 + + // 本地保存 + var jsconfig = new JsonConfig("config.json"); + jsconfig.SetValue("ch2ipaddress", lb_CH2IP.Text); + + // 同步 + Form1.f1.ch2ipaddress = lb_CH2IP.Text; + } + + // CH2断开连接 + private void CH2TCPBreak_Click(object sender, EventArgs e) + { + Form1.f1.LL28CH2client?.Disconnect(); // 断开旧连接 + } + + // CH3重连按钮 + private void bt_CH3TCPReconnect_Click(object sender, EventArgs e) + { + Form1.f1.LL28CH3client?.Stop(); // 先停止线程(如果正在运行) + Form1.f1.LL28CH3client?.Disconnect(); // 断开旧连接 + Form1.f1.LL28CH3client?.Connect(lb_CH3IP.Text); // 连接新 IP + Form1.f1.LL28CH3client?.Start(); // 重新启动线程 + + // 本地保存 + var jsconfig = new JsonConfig("config.json"); + jsconfig.SetValue("ch3ipaddress", lb_CH3IP.Text); + + // 同步 + Form1.f1.ch3ipaddress = lb_CH3IP.Text; + } + + // CH3断开连接 + private void CH3TCPBreak_Click(object sender, EventArgs e) + { + Form1.f1.LL28CH3client?.Disconnect(); // 断开旧连接 + } + + // CH4重连按钮 + private void bt_CH4TCPReconnect_Click(object sender, EventArgs e) + { + Form1.f1.LL28CH4client?.Stop(); // 先停止线程(如果正在运行) + Form1.f1.LL28CH4client?.Disconnect(); // 断开旧连接 + Form1.f1.LL28CH4client?.Connect(lb_CH4IP.Text); // 连接新 IP + Form1.f1.LL28CH4client?.Start(); // 重新启动线程 + + // 本地保存 + var jsconfig = new JsonConfig("config.json"); + jsconfig.SetValue("ch4ipaddress", lb_CH4IP.Text); + + // 同步 + Form1.f1.ch4ipaddress = lb_CH4IP.Text; + } + + // CH4断开连接 + private void CH4TCPBreak_Click(object sender, EventArgs e) + { + Form1.f1.LL28CH4client?.Disconnect(); // 断开旧连接 + } + + // 搜索IP按钮 + private void UDPReadIP_Click(object sender, EventArgs e) + { + bt_UDPReadIP.Enabled = false; + try + { + UDPBroadcast(); + } + finally + { + bt_UDPReadIP.Enabled = true; + } + } + + string ch1ipaddress = null; // 通道1的IP地址 + string ch2ipaddress = null; // 通道2的IP地址 + string ch3ipaddress = null; // 通道1的IP地址 + string ch4ipaddress = null; // 通道2的IP地址 + string UDP_recvdata = ""; // 存储接收到的UDP数据 + Socket udpsock; // UDP套接字 + Thread UDPlisten; + + private bool isUDPRunning = false; // UDP运行标志位 + + // 执行UDP广播搜索IP地址 + private void UDPBroadcast() + { + try + { + if (isUDPRunning && udpsock != null) + { + Console.WriteLine("UDP广播已在运行中,直接发送广播消息..."); + + // 发送广播消息 + byte[] sdata = Encoding.ASCII.GetBytes("hello,udp server"); + + string localIP = GetLocalIP(); + if (localIP.Length > 1) + { + int lastIndex = localIP.LastIndexOf("."); + string broadcastip = localIP.Remove(lastIndex + 1) + "255"; + IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(broadcastip), 9999); + + udpsock.SendTo(sdata, ipEndPoint); + } + return; + } + + isUDPRunning = true; + ch1ipaddress = null; + ch2ipaddress = null; + ch3ipaddress = null; + ch4ipaddress = null; + + UDP_recvdata = ""; + + if (udpsock != null) // 关闭旧的 + { + udpsock.Close(); + udpsock = null; + } + + string PrefixIP = GetLocalIP(); // 获取本机IP + if (PrefixIP.Length <= 1) return; + + // 设置广播地址 + int lastDotIndex = PrefixIP.LastIndexOf("."); + string broadcastIP = PrefixIP.Remove(lastDotIndex + 1) + "255"; + + // 初始化UDP套接字 + udpsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); + + udpsock.Bind(new IPEndPoint(IPAddress.Any, 0)); // 0 表示由系统分配空闲端口 + + IPEndPoint broadcastEndPoint = new IPEndPoint(IPAddress.Parse(broadcastIP), 9999); + udpsock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); // 启用套接字的广播功能 + + UDPlisten = new Thread(Thread_UDPListen); // 启动监听线程 + UDPlisten.IsBackground = true; + UDPlisten.Start(); + + // 发送广播消息 + byte[] data = Encoding.ASCII.GetBytes("hello,udp server"); + udpsock.SendTo(data, broadcastEndPoint); + } + catch (Exception ex) + { + Console.WriteLine($"UDPBroadcast()异常: {ex.Message}"); + mxlLog.Instance.Error($"UDPBroadcast()异常,行号{ex.StackTrace} ", ex); + } + } + + // 获取本机IP地址前缀(192.168.1.x) + public string GetLocalIP() + { + IPAddress[] ipArray = Dns.GetHostAddresses(Dns.GetHostName()); + + foreach (var ip in ipArray) + { + if (IsIPInRange(ip.ToString(), "192.168.1.0", "192.168.1.255")) + { + return ip.ToString(); + } + } + + // 如果没有找到192.168.1.x的IP,返回第一个IPv4地址 + return ipArray.First(ip => ip.AddressFamily == AddressFamily.InterNetwork).ToString(); + } + + // 检查IP地址是否在指定范围内 + public bool IsIPInRange(string input, string rangeStart, string rangeEnd) + { + uint ipValue = IPToUInt(input); + return ipValue >= IPToUInt(rangeStart) && ipValue <= IPToUInt(rangeEnd); + } + + // 将IP地址转换为无符号整数用于比较 + private uint IPToUInt(string ipAddress) + { + if (!IPAddress.TryParse(ipAddress, out var ip)) + { + return 0; + } + + byte[] bytes = ip.GetAddressBytes(); + if (BitConverter.IsLittleEndian) + { + Array.Reverse(bytes); + } + + return BitConverter.ToUInt32(bytes, 0); + } + + // UDP监听线程:持续接收响应数据 + private void Thread_UDPListen() + { + try + { + // 设置接收超时 + udpsock.ReceiveTimeout = 1000; // 1秒超时 + + while (isUDPRunning && udpsock != null && udpsock.IsBound) + { + try + { + byte[] data = new byte[1024]; + int rbytes = udpsock.Receive(data); // 244 + string rdata = Encoding.ASCII.GetString(data, 0, rbytes); + Console.WriteLine($"UDP监听线程rdata: {rdata}"); + + UDP_recvdata += rdata + "\n"; + ParseUDPdata(); // 解析接收到的数据 + } + catch (SocketException ex) when (ex.SocketErrorCode == SocketError.TimedOut) + { + continue; // 超时是正常滴,继续循环 + } + catch (SocketException ex) when (ex.SocketErrorCode == SocketError.Interrupted) + { + Console.WriteLine("UDP接收被正常中断"); + break; + } + } + } + catch (Exception ex) + { + mxlLog.Instance.Error($"UDP监听线程异常,行号{ex.StackTrace} ", ex); + } + finally + { + isUDPRunning = false; + } + } + + /* 解析UDP响应数据,提取通道、IP地址 + * 数据格式示例: + * 1:192.168.1.10 \n + * 2:192.168.1.11 + */ + public void ParseUDPdata() + { + try + { + if (string.IsNullOrEmpty(UDP_recvdata)) return; + + Console.WriteLine($"UDP_recvdata: {UDP_recvdata}"); + ch1ipaddress = null; + ch2ipaddress = null; + ch3ipaddress = null; + ch4ipaddress = null; + + string[] iparr = UDP_recvdata.Split('\n'); + + foreach (string ipdata in iparr) + { + if (string.IsNullOrEmpty(ipdata)) continue; + + string[] chorip = ipdata.Split(':'); + if (chorip.Length != 2) continue; + + int ch = Convert.ToInt32(chorip[0]); + string ip = chorip[1]; + + switch (ch) + { + case 1: ch1ipaddress = ip; break; + case 2: ch2ipaddress = ip; break; + case 3: ch3ipaddress = ip; break; + case 4: ch4ipaddress = ip; break; + } + } + } + catch (Exception ex) + { + // 错误处理代码... + mxlLog.Instance.Error($"ParseUDPdata()异常,行号{ex.StackTrace} ", ex); + } + } + + // 窗口关闭 + private void ConfigTCP_FormClosing(object sender, FormClosingEventArgs e) + { + StopUDP(); + //UDPlisten?.Join(500); + } + + // 停止UDP + public void StopUDP() + { + isUDPRunning = false; + if (udpsock != null) + { + udpsock.Close(); + udpsock = null; + } + } + + + /**/ + } +} diff --git a/SLC1-N/Form_NetworkSet.resx b/SLC1-N/Form_NetworkSet.resx new file mode 100644 index 0000000..3dd1148 --- /dev/null +++ b/SLC1-N/Form_NetworkSet.resx @@ -0,0 +1,549 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAACq + qnqHeoqqgAAAAAAAAAAAAAAAAAAACqiAAAAAAAAAeqgAAAAAAAAAAAAAAAAKqAAAAAAAAAAAAAqoAAAA + AAAAAAAAAAegAAAAAAAAAAAAAAAIoAAAAAAAAAAAAKcAAAAAAAAAAAAAAAAACqAAAAAAAAAACgAIenqq + qqqqqqqqqqAAAIoAAAAAAAAAoAAAAKqqqqqqqqqqqqgAAAigAAAAAAAKAAAAiqqqqqqqqqqqqqoAAACK + AAAAAAB3AAAAeHiqqqqqqqqqqqoAAAAKAAAAAACgAAAAAAqqqqqqqqqqqqoAAAAAoAAAAAqAAAAAAKqq + qqqqoAAAAAAAAAAAgAAAAAoAAAAAAAAIqqqqpwAAAAAAAAAACgAAAAoAAAAAAAAKqqqqqgAAAAAAAAAA + CgAAAAgAAAAAAAiqqqqqqqAAAAAAAAAABwAAAAoAAAAAAAAACKqqqqAAAAAAAAAACgAAAAgAAAAAAAAA + qqqqqqgAAAAAAAAACgAAAAoAAAAAAAAKqqqqqqoAAAAAAAAACgAAAAoAAAAAAAAAAAqqqqpwAAAAAAAA + CgAAAAoAAAAAAAAAAKqqqqqgAAAAAAAAiAAAAACAAAAAAAAAB6iqqqqoAAAAAAAAoAAAAACgAAAAAAAA + AACKqqqqAAAAAAAIoAAAAAAKAAAAAAAAAAqqqqqqgAAAAAAKAAAAAAAAoAAAAAAAAIqKiqqqoAAAAACg + AAAAAAAAigAAAAAAAAAAqqqqqAAAAAoAAAAAAAAACKAAAAAAAAAKqqqqqgAAAKAAAAAAAAAAAAqAAAAA + AAAAAAAAAAAAqgAAAAAAAAAAAACqgAAAAAAAAAAAAAB6gAAAAAAAAAAAAAAAeqAAAAAAAAAAAKqAAAAA + AAAAAAAAAAAAAAenoAAAAAB6qAAAAAAAAAAAAAAAAAAAAAAAinqqqqhwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////P///AAD//8AAf/8AAP/+H/8P/wAA//j//+P/ + AAD/5///+f8AAP/P///+fwAA/7gAAB8/AAD/fwAAD58AAP78AAAPzwAA/PwAAA/vAAD9/4AAD/cAAPn/ + AB//9wAA+//gD//7AAD7/+AP//sAAPv/gAf/+wAA+//4B//7AAD7//AD//sAAPv/4AP/+wAA+//+Af/7 + AAD7//wB//MAAP3/+AD/9wAA/f//AP/nAAD+//4Af+8AAP9//AB/3wAA/z//wD+/AAD/n/+AP38AAP/n + ///8/wAA//H///H/AAD//H//x/8AAP//h/w//wAA///wAf//AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAACKqAAAenAAAAAAAAAAAACoAAAAAAAAegAAAAAAAAB3AAAAAAAAAACKAAAAAA + AKAAqqqqqqqqoAAIAAAAAAoAAIqqqqqqqqoAAKAAAACAAAinqqqqqqqqAAAIAAAAoAAACqqqqqeqigAA + CgAACAAAAAiKqqoAAAAAAAAAAAoAAAAAqqqqoAAAAAAAgAAKAAAAAACqqqAAAAAAAKAACAAAAAAIqqqq + AAAAAABwAAoAAAAAAAqqqgAAAAAAcAAAAAAAAACqqqqgAAAAAAAAAHAAAAAAAKqqoAAAAAoAAAAIAAAA + AAqqqqgAAACAAAAACgAAAAAACKqqAAAIAAAAAACHAAAAAKqqqqAAoAAAAAAAAKAAAAAAAAAACAAAAAAA + AAAAdwAAAAAAigAAAAAAAAAAAAAHqKeooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////+Hj//+f/n/+f/+f/cAB7/vAAPf3gAD79+AA++/g + P//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/Ad//f/+//8/8///4B/////////////// + //////////////////8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqoAAAAAAKqoAAAAAAAAiqoA + AAAAAAAKqgAAAAAAAAiqgAAAAAAAAHqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAP//AAD//wAA//8AAP//AAD4DwAA/D8AAPw/AAD+PwAA/h8AAP8fAAD//wAA//8AAP// + AAD//wAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAAP4AAAX+ + BQAJ/wkADf4NABH/EQAW/hYAGf8ZAB3+HQAh/iEAJv4mACr+KgAt/i0AMf4xADX+NQA5/jkAPf49AEH+ + QQBF/kUAS/9LAE3+TQBR/lEAVf5VAFn+WQBe/14AYf5hAGX+ZQBp/mkAbv9uAHD/cAB1/nUAef55AH7+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFggIDhMXFxsXFxIOBgobAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFgwSIAAAAAAAAAAAAAAAAAAdEQwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMHQAA + AAAAAAAAAAAAAAAAAAAAAAAbDBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAbCAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAB0IAAAAAAAAAAAAAAAAAAAAAAAAAAwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREA + AAAAAAAAAAAAAAAAAAAACgAAACAbFgwBAQEBAQEBAQEBAQEBAQEBAQEAAAAAABsOAAAAAAAAAAAAAAAA + AAAKAAAAAAAAAAwBAQEBAQEBAQEBAQEBAQEBAQEbAAAAAAAgDgAAAAAAAAAAAAAAAA4AAAAAAAAdBAEB + AQEBAQEBAQEBAQEBAQEBAQEOAAAAAAAAGxIAAAAAAAAAAAAAGxYAAAAAAAAgICAgCgEBAQEBAQEBAQEB + AQEBAQEBAAAAAAAAAA4AAAAAAAAAAAAADAAAAAAAAAAAAAAWAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAA + AAAKAAAAAAAAAAAWHQAAAAAAAAAAAAwBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAK + AAAAAAAAAAAAAAAAACAGAQEBAQEBFgAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAOAAAAAAAAAAAAAAAA + AAgBAQEBAQEBBAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAATAAAAAAAAAAAAAAAXAQEBAQEBAQEBARYA + AAAAAAAAAAAAAAAAAAAADAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAFwEBAQEBAQYAAAAAAAAAAAAAAAAA + AAAADAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAWAQEBAQEBAQEXAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAS + AAAAAAAAAAAAAAAAAAoBBAQBAQEBAQEEAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAA + AAAAAAAOAQEBAQEBGwAAAAAAAAAAAAAAAAAAEQAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAYBAQEBAQEB + BAAAAAAAAAAAAAAAAAAbFwAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAEQwODAQBAQEBAR0AAAAAAAAAAAAA + AAAKAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAIAQBAQEBAQgAAAAAAAAAAAAAAB0WAAAAAAAAAAAA + AAoAAAAAAAAAAAAAAAAAAAARAQEBAQEBAQEdAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAMAAAAAAAAAAAA + AAAAABsbFxsRAQEBAQEKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAbEQAAAAAAAAAAAAAAAAAAAAAMAQEB + AQEBIAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAGw4AAAAAAAAAAAAAAAAAAAYBAQEBAQEBCAAAAAAAAAoA + AAAAAAAAAAAAAAAAAAAAAAAIGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCgAAAAAAAAAAAAAAAAAA + AAAAAAAAFwgdAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXDBMA + AAAAAAAAAAAAAAAAAAAAABIMGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODhIXAAAAAAAAAAAA + FxEMEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEw4IBAQECA4WIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///z///wAA///AAH//AAD//h//D/8AAP/4///j/wAA/+f///n/ + AAD/z////n8AAP+4AAAfPwAA/38AAA+fAAD+/AAAD88AAPz8AAAP7wAA/f+AAA/3AAD5/wAf//cAAPv/ + 4A//+wAA+//gD//7AAD7/4AH//sAAPv/+Af/+wAA+//wA//7AAD7/+AD//sAAPv//gH/+wAA+//8Af/z + AAD9//gA//cAAP3//wD/5wAA/v/+AH/vAAD/f/wAf98AAP8//8A/vwAA/5//gD9/AAD/5////P8AAP/x + ///x/wAA//x//8f/AAD//4f8P/8AAP//8AH//wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA/gAABf4FAAn+CQAP/g8AHv4eACv+KwAs/ywAM/8zADT/ + NAA+/j4AQv5CAEX+RQBJ/kkATP5MAFD+UABV/lUAWf9ZAF7+XgBh/mEAZf5lAGj+aABt/m0Acv5yAHX+ + dQB5/nkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkODhcAAAAAFg4O + AAAAAAAAAAAAAAAAAAAAAAAAAA8WAAAAAAAAAAAAAAAAExEAAAAAAAAAAAAAAAAAABMWAAAAAAAAAAAA + AAAAAAAAABEXAAAAAAAAAAAAAAANAAAADQQEAgQCBAIEAgQCBAAAAAAPAAAAAAAAAAAADQAAAAARAgIC + AgICAgICAgICCgAAAAAPAAAAAAAAABMAAAAAGREPBAICAgICAgICAgICAAAAAAAZAAAAAAAAFgAAAAAA + ABECAgICAgIGBwgICAgAAAAAAA8AAAAAABMAAAAAAAAAFxYFAgICAgAAAAAAAAAAAAAAAAAAAAAADgAA + AAAAAAAADwICAgICBwAAAAAAAAAAAAAADwAAAAANAAAAAAAAAAAAAAcCAgICAAAAAAAAAAAAAAANAAAA + AA0AAAAAAAAAAAAOAgICAgIHAAAAAAAAAAAAAA0AAAAADgAAAAAAAAAAAAAACgICAgIAAAAAAAAAAAAA + EwAAAAAAAAAAAAAAAAAAAA0CAgICAggAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAgICAgAAAAAA + AAAADQAAAAAAAAAXAAAAAAAAAAAADQICAgICCgAAAAAAABEAAAAAAAAAABcAAAAAAAAAAAAAABMCAgIC + AAAAAAAXAAAAAAAAAAAAABkTAAAAAAAAAAAOBAICAgQOAAAADwAAAAAAAAAAAAAAAAAOAAAAAAAAAAAA + AAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAADhMAAAAAAAAAAAAAEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAT + Dg0KCg0OEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////+Hj//+f + /n/+f/+f/cAB7/vAAPf3gAD79+AA++/gP//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/ + Ad//f/+//8/8///4B/////////////////////////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAB + AAAAAAAAAAAAAAABAAAAAQAAAAAAAAD+AAAE/wQAC/4LAAz/DAAR/hEAFf8VACP/IwA6/zoAQ/5DAFL/ + UgBb/1sAb/5vAHb+dgB5/3kAfv9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgICAgIFAAAAAAAA + AAAAAAcCAg4AAAAAAAAAAAAAAAALAwIMAAAAAAAAAAAAAAAAAAgCAwAAAAAAAAAAAAAAAAANBQIOAAAA + AAAAAAAAAAAAAAoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAPgP + AAD8PwAA/D8AAP4/AAD+HwAA/x8AAP//AAD//wAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/AEUA/wBjAP8AdgD+AIMA/wCGAP8AfAD/AHIA/wBeAP8AQAD+ + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/AAIA/wAnAP4AZgD/AKkA/wDiAP8A5QD/AMkA/wC0AP8ApQD+AJ4A/wCZAP8AnwD/ + AKgA/wC4AP8AzAD+AOkA/wDaAP8AmwD/AFwA/wAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAQAP8ATgD/AKwA/wDRAP4AuwD/AIAA/wBCAP8AIgD/ABUA/wAMAP8ABQD+ + AAIAAAAAAP8AAwD/AAYA/wANAP8AFwD+ACQA/wBMAP8AjQD/AMAA/wDTAP8AnAD+AD8A/wAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ACAD+AEQA/gC5AP4A0QD+AIcA/gA3AP4ACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABEA/gA+AP4AmwD+ + ANQA/gCmAP4AOAD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAZAP4AlgD/AOcA/wB2AP8AGQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+ACcA/wCQAP8A5gD/AH4A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD8A/wDTAP4AqwD/ACEA/wAGAP8AMAD/ + AF8A/wByAP4AcgD/AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+ + AHIA/wByAP8AcgD/AHIA/wByAP8ACwAAAAAAAAAAAP8AMQD/AMYA/wDBAP8AKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wACAP8ATAD/ANsA/wB3AP4AHwD/ + AEsA/wCHAP8AnAD/AKoA/wDSAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8ATAAAAAAAAAAAAAAAAAD/ABMA/wCYAP8AywD+ + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wA/AP8A3AD/ + AGMA/wAGAAAAAAAAAAAAAAAAAP8ACAD/AFQA/wDVAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AlAD+AAMAAAAAAAAAAAAA + AAAA/wAMAP8AhgD+AMwA/wAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ACIA/wDKAP8AfAD/AAIAAAAAAAAAAAAAAAAA/wARAP8AjgD/APIA/wD/AP4A/gD/AP8A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AzgD+ + ABQAAAAAAAAAAAAAAAAAAAAAAP8ADAD+AJkA/wC8AP8ACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD+AJ8A/gCpAP4AAwAAAAAAAAAAAAAAAAAAAAAA/gBPAP4AgAD+AIAA/gCAAP4AhAD+ + AN0A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4A+wD+ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABAA/gDJAP4AdQD+AAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ASAD/ANEA/wAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAiAP4AqwD/APkA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBCAP8A3AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AqAD/AI4A/wACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABgD/AFAA/wDRAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AHQA/wAyAP8AMgD+ADIA/wAyAP8AMgD/ADIA/wAyAP8AMgD+AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP8AuAD/AHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAWAP4A3wD/ADsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AEQA/wBTAP4AUwD/AFYA/wCDAP8A7gD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AK0A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AYAD/AL4A/wANAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBIAP4AxwD/ + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAQD/AGIA/wDkAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/APIA/wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ALwD/AMwA/wAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wBoAP4AsAD/AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAcAP4ApgD/ + APoA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wCuAP8ABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADgD/ANAA/wBDAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wB1AP4AqAD/AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAKAP4AJQD/ACYA/wAmAP8ANwD/AKEA/wD9AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wDsAP8AQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAgD/ + ANIA/wBMAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBvAP4AqwD+AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAEA/gAtAP4ArgD+APoA/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4ApQD+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABwD+ANEA/gBIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBYAP4AuwD/ABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AFMA/wDXAP8A+QD/APkA/wD5AP8A/QD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A8QD+AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AHgD/AM0A/wA4AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wApAP4A2AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wA8AP8AzQD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/gD+AJ0A/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ARwD/AMYA/wAaAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP4AzAD/AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ADQD/AHMA/wDuAP8A/gD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+APMA/wAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AkAD/AKAA/wACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AbwD/AL8A/wASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAMAP8AdgD/AMUA/wDLAP8AywD+ANIA/wD3AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wCPAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAbAP8A3wD/ + AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AGwD/AMgA/wBrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AIQA/wDxAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wDkAP8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAUA/wCOAP8ArgD/AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AFEA/gDeAP4AMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAzAP4AwwD+ + AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4AigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+AE4A/gDoAP4AKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AAYA/wB9AP8A1AD/ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ABsA/wCPAP8AngD+AJ4A/wCfAP8AvgD/APsA/wD/AP8A/wD+AP4A/wD/AP8A3wD/ACkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AQgD+ANgA/wBdAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAOAP8AmAD/AMMA/wAyAP4AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAUA/wBHAP8A1QD/AP0A/wD/AP8A/wD+AP4A/wD/AP8A/QD/ + AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wBMAP8AzgD+AHwA/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADQD/AJYA/wDNAP4AUgD/AAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AH4A/wDtAP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AN8A/wAcAAAAAAAAAAAAAAAAAP8ACwD/AGoA/wDYAP8AdQD+AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAQA/wBqAP4A4QD/ + AJwA/wAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ANQD+AHAA/wBxAP8AcQD/ + AHEA/wBxAP8AcQD+AHEA/wBxAP8AcQD/AG4A/wAmAAAAAAAAAAAA/wAqAP8ArAD/AN0A/wBMAP8AAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4AJAD/AKEA/wDnAP8AhwD/AC0A/wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wABAP8APQD+AJ4A/wDjAP8AkgD/ + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAgA/gBCAP4AqQD+ANMA/gCzAP4AXQD+AC0A/gANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gASAP4ANAD+AGsA/gC+AP4A0QD+ + AJcA/gA0AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/ADUA/wB7AP4AyAD/ + AMwA/wC/AP8AoAD/AHQA/wBVAP8APgD+ADMA/wArAP8ANAD/AEEA/wBaAP8AegD+AKcA/wDCAP8AzwD/ + AL4A/wBwAP8AKQD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD/AC8A/wBbAP8AhwD/AK8A/wDPAP8A5AD+APEA/wD1AP8A8AD/AOAA/wDJAP8AqgD+ + AIAA/wBTAP8AJQD/AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//+AB//8AAP/+AAAf/wAA//gAQAP/AAD/4D//gP8AAP/B///wfwAA/4AAAAw/AAD+AAAADh8AAPwc + AAAHDwAA/DgAAAeHAAD4eAAAB8MAAPj/AAAH4wAA+PwAAAfjAADx/AAH//EAAPH/gAf/8QAA8f8AA//x + AADx/wAD//EAAPH/wAH/8QAA8f/AAf/xAADx//wA//EAAPH/8AD/8QAA+P/gAH/jAAD4//4Af8MAAPx/ + /AB/xwAA/D/4AD+HAAD+D/8APg8AAP8H/gAcHwAA/4P+ABg/AAD/4H//wP8AAP/wD/4B/wAA//wAAAf/ + AAD//4AAP/8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA8A/gAzAP4ASwD/AFgA/gBVAP4ASQD+ + ADAA/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAEAP4ANwD+AIcA/wCzAP4AtAD+AI8A/gB1AP8AaQD+ + AGoA/gB4AP4AkgD/ALcA/gCvAP4AfwD+AC4A/wACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gADAP8ARAD+AK4A/gCWAP4AQQD/ABMA/gABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AAQD+ABYA/gBKAP4AnwD/AKYA/gA5AP4AAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD/AJsA/wCVAP8AHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AKgD/AKEA/wCMAP8ADAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ACMA/gC5AP4AUQD/AD8A/gB+AP4AuQD+ + APAA/wD2AP4A9gD+APYA/gD2AP8A9gD+APYA/gD2AP4A9gD/APYA/gD2AP4A9gD+AHkAAAAAAP4AAgD+ + AF0A/gCvAP8AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAXAP4AuAD+AC8AAAAAAAAAAAD+ + ABYA/gCfAP4A+gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+AP4A/gD+AP8A/wD+AP4A/gD+AP4AwQD/ + AAUAAAAAAAAAAAD+AEYA/wCvAP4ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD/AJwA/gBHAAAAAAAA + AAAA/wALAP4AhQD+AKoA/gCsAP8A8AD+AP4A/gD+AP4A/gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+ + AP4A/gD1AP8AHQAAAAAAAAAAAAAAAAD/AF0A/gCHAP4AAQAAAAAAAAAAAAAAAAAAAAAA/wBAAP8AlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AGgD/AKgA/wD8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDUAP8AywD/ + AMwA/wDLAP8AywD/AMsA/wBGAAAAAAAAAAAAAAAAAP8AAgD/AK0A/wAnAAAAAAAAAAAAAAAAAAAAAAD+ + AJcA/wA0AAAAAAAAAAAAAAAAAAAAAAD+AAcA/gBmAP4AjAD/AJIA/gDhAP4A/gD+AP4A/wD/AP4A/gD+ + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4ATgD+AHsAAAAAAAAAAAAA + AAAAAAAAAP4AtwD/AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP8ArQD+AP0A/gD+AP4A/gD/ + AP8A/gD+AP4A1AD+AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP4AqwAA + AAAAAAAAAAAAAAAAAAAA/gC9AP8AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD+AFAA/wBuAP4AdgD+ + ANQA/gD+AP8A/wD+AP4A/gD9AP4AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAMA/gC9AAAAAAAAAAAAAAAAAAAAAAD/ALsA/wAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AB4A/wCvAP8A/QD/AP8A/wD/AP8A/wD/AP8A/wDTAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ACAD/ALkAAAAAAAAAAAAAAAAAAAAAAP4ArwD/ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ANwD+AFAA/gBWAP4AwwD/AP8A/gD+AP4A/gD+AP0A/wBXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/gAoAP4AnAAAAAAAAAAAAAAAAAAAAAAA/gB6AP8AVgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AIwD+ALgA/gD9AP8A/wD+AP4A/gD+AP4A/gD/AMgA/gAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AHIA/gBcAAAAAAAAAAAAAAAAAAAAAAD+AB8A/wCzAP4ACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAcAP4AMgD+ADsA/wCrAP4A/gD+AP4A/gD+AP8A/QD+ + AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAQAP4AuwD+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AGUA/wCJAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAkAP8AvQD/AP4A/wD/AP8A/wD/ + AP8A/wD/AP8AwQD/AAUAAAAAAAAAAAAAAAAAAAAAAP8ABgD/AJ8A/wBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABQD+AIsA/gB2AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAkA/gAUAP8AIAD+ + AJcA/gD8AP4A/gD/AP8A/gD6AP4ARwAAAAAAAAAAAAAAAAD+AAkA/gCMAP8AdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ABQD+AIQA/gCaAP8AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + ACAA/wC0AP4A9QD+APUA/gD1AP8A9gD+APUA/gCyAAAAAAAAAAAA/gAeAP4AqgD+AG8A/wADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AEkA/wC5AP4AbgD+ABQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAbAP8AfQD+ALUA/gA3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAwA/wBkAP8AswD/ + AJgA/wBVAP8AJQD/ABEA/wAGAP8AAQD/AAIA/wAIAP8AEwD/ACgA/wBeAP8AngD/AK8A/wBVAP8ACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/gAFAP4AMAD/AHAA/gCgAP4AsAD+ALoA/wDAAP4AwAD+ALkA/gCvAP8AnAD+AGcA/gArAP4AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////+Af//4AAf/4D8B/8P/8P+AAAh/GA + AGPjAABx58AAceeAH/nn4A/558AP+efwB/nn8Af55/gD+eP4A/Hx/AHj8PwBx/h+AYf+H/4f/wAAP//A + AP////////////////////////////////8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/ACsA/wAeAP8AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD4A/gBlAP8AXgD+AEEA/wA1AP4AQgD/ + AF8A/gBmAP8AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/AG4A/wBcAP8AagD/AHsA/wB7AP8AewD/ + AHsA/wB7AP8AWwD/ADMA/wBpAP8ABgAAAAAAAAAAAAAAAAD/AGwA/gAMAP8AKQD+ALwA/wD7AP4A/gD/ + AP8A/gD+AP8A/wD+AO0A/wAIAP4AEQD/AGcAAAAAAAAAAAD/ADYA/wAzAAAAAAD/AAEA/wBtAP8A3AD/ + AP8A/wD/AP8AgQD/AGYA/wBlAP8AEQAAAAAA/wA/AP8AKAAAAAAA/gBdAP8ABAAAAAAAAAAAAP4AGwD/ + AKQA/gD0AP8A/wD+AJAAAAAAAAAAAAAAAAAAAAAAAP8ABwD+AFoAAAAAAP8AWgD/AAYAAAAAAAAAAAAA + AAAA/wBVAP8AxQD/AP8A/wDzAP8AFwAAAAAAAAAAAAAAAAD/AAwA/wBVAAAAAAD+ACYA/wBFAAAAAAAA + AAAAAAAAAP8ADwD+AIkA/wDqAP4A/gD/AIYAAAAAAAAAAAAAAAAA/wBPAP4AGwAAAAAAAAAAAP8AXwD/ + AB8AAAAAAAAAAAAAAAAA/wBAAP8ArQD/AP4A/wDuAP8AEwAAAAAA/wAnAP8AWAAAAAAAAAAAAAAAAAD/ + AAEA/gBaAP8ATwD+AAUAAAAAAP4ACAD/AGoA/gB6AP8AegD+ADMA/wBUAP4AVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/ABwA/wBgAP8AYgD/AGEA/wBhAP8AYQD/AGIA/wBfAP8AFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA/B8AAPAHAADAAQAAwAEAAJAEAACYPAAAnBwAAJwcAADOCQAAwgMAAPAH + AAD//wAA//8AAP//AAA= + + + \ No newline at end of file diff --git a/SLC1-N/Form_PLC_Serialport.Designer.cs b/SLC1-N/Form_PLC_Serialport.Designer.cs new file mode 100644 index 0000000..c403dec --- /dev/null +++ b/SLC1-N/Form_PLC_Serialport.Designer.cs @@ -0,0 +1,196 @@ +namespace SLC1_N +{ + partial class Form_PLC_Serialport + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form_PLC_Serialport)); + this.uiGroupBox9 = new Sunny.UI.UIGroupBox(); + this.label7 = new System.Windows.Forms.Label(); + this.cb_PLCPortName = new System.Windows.Forms.ComboBox(); + this.label11 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.cb_PLCBaudRate = new System.Windows.Forms.ComboBox(); + this.lb_PLCCom_status = new System.Windows.Forms.Label(); + this.bt_PLCConnect = new System.Windows.Forms.Button(); + this.bt_PLCBreak = new System.Windows.Forms.Button(); + this.bt_PLCRefresh = new System.Windows.Forms.Button(); + this.uiGroupBox9.SuspendLayout(); + this.SuspendLayout(); + // + // uiGroupBox9 + // + this.uiGroupBox9.Controls.Add(this.label7); + this.uiGroupBox9.Controls.Add(this.cb_PLCPortName); + this.uiGroupBox9.Controls.Add(this.label11); + this.uiGroupBox9.Controls.Add(this.label15); + this.uiGroupBox9.Controls.Add(this.cb_PLCBaudRate); + this.uiGroupBox9.Controls.Add(this.lb_PLCCom_status); + this.uiGroupBox9.Controls.Add(this.bt_PLCConnect); + this.uiGroupBox9.Controls.Add(this.bt_PLCBreak); + this.uiGroupBox9.Controls.Add(this.bt_PLCRefresh); + this.uiGroupBox9.FillColor = System.Drawing.Color.Transparent; + this.uiGroupBox9.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox9.Location = new System.Drawing.Point(38, 13); + this.uiGroupBox9.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox9.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox9.Name = "uiGroupBox9"; + this.uiGroupBox9.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox9.Size = new System.Drawing.Size(221, 490); + this.uiGroupBox9.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox9.TabIndex = 3; + this.uiGroupBox9.Text = "PLC串口设置"; + this.uiGroupBox9.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("宋体", 12F); + this.label7.Location = new System.Drawing.Point(52, 208); + this.label7.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(87, 16); + this.label7.TabIndex = 70; + this.label7.Text = "串口状态:"; + // + // cb_PLCPortName + // + this.cb_PLCPortName.FormattingEnabled = true; + this.cb_PLCPortName.Location = new System.Drawing.Point(43, 89); + this.cb_PLCPortName.Margin = new System.Windows.Forms.Padding(4); + this.cb_PLCPortName.Name = "cb_PLCPortName"; + this.cb_PLCPortName.Size = new System.Drawing.Size(137, 24); + this.cb_PLCPortName.TabIndex = 67; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(40, 66); + this.label11.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(55, 16); + this.label11.TabIndex = 65; + this.label11.Text = "端口号"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(40, 132); + this.label15.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(55, 16); + this.label15.TabIndex = 66; + this.label15.Text = "波特率"; + // + // cb_PLCBaudRate + // + this.cb_PLCBaudRate.FormattingEnabled = true; + this.cb_PLCBaudRate.Items.AddRange(new object[] { + "115200", + "9600"}); + this.cb_PLCBaudRate.Location = new System.Drawing.Point(43, 156); + this.cb_PLCBaudRate.Margin = new System.Windows.Forms.Padding(4); + this.cb_PLCBaudRate.Name = "cb_PLCBaudRate"; + this.cb_PLCBaudRate.Size = new System.Drawing.Size(137, 24); + this.cb_PLCBaudRate.TabIndex = 68; + // + // lb_PLCCom_status + // + this.lb_PLCCom_status.AutoSize = true; + this.lb_PLCCom_status.Font = new System.Drawing.Font("宋体", 12F); + this.lb_PLCCom_status.Location = new System.Drawing.Point(70, 237); + this.lb_PLCCom_status.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lb_PLCCom_status.Name = "lb_PLCCom_status"; + this.lb_PLCCom_status.Size = new System.Drawing.Size(23, 16); + this.lb_PLCCom_status.TabIndex = 69; + this.lb_PLCCom_status.Text = "##"; + // + // bt_PLCConnect + // + this.bt_PLCConnect.Location = new System.Drawing.Point(48, 275); + this.bt_PLCConnect.Margin = new System.Windows.Forms.Padding(4); + this.bt_PLCConnect.Name = "bt_PLCConnect"; + this.bt_PLCConnect.Size = new System.Drawing.Size(125, 45); + this.bt_PLCConnect.TabIndex = 62; + this.bt_PLCConnect.TabStop = false; + this.bt_PLCConnect.Text = "连接串口"; + this.bt_PLCConnect.UseVisualStyleBackColor = true; + this.bt_PLCConnect.Click += new System.EventHandler(this.bt_PLCConnect_Click); + // + // bt_PLCBreak + // + this.bt_PLCBreak.Location = new System.Drawing.Point(48, 379); + this.bt_PLCBreak.Margin = new System.Windows.Forms.Padding(4); + this.bt_PLCBreak.Name = "bt_PLCBreak"; + this.bt_PLCBreak.Size = new System.Drawing.Size(125, 45); + this.bt_PLCBreak.TabIndex = 63; + this.bt_PLCBreak.Text = "断开连接"; + this.bt_PLCBreak.UseVisualStyleBackColor = true; + this.bt_PLCBreak.Click += new System.EventHandler(this.bt_PLCBreak_Click); + // + // bt_PLCRefresh + // + this.bt_PLCRefresh.Location = new System.Drawing.Point(48, 327); + this.bt_PLCRefresh.Margin = new System.Windows.Forms.Padding(4); + this.bt_PLCRefresh.Name = "bt_PLCRefresh"; + this.bt_PLCRefresh.Size = new System.Drawing.Size(125, 45); + this.bt_PLCRefresh.TabIndex = 64; + this.bt_PLCRefresh.Text = "刷新串口"; + this.bt_PLCRefresh.UseVisualStyleBackColor = true; + this.bt_PLCRefresh.Click += new System.EventHandler(this.bt_PLCRefresh_Click); + // + // Form_PLCconnect + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.LightBlue; + this.ClientSize = new System.Drawing.Size(305, 517); + this.Controls.Add(this.uiGroupBox9); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Form_PLCconnect"; + this.Text = "PLC通讯配置"; + this.Load += new System.EventHandler(this.Form_PLCconnect_Load); + this.uiGroupBox9.ResumeLayout(false); + this.uiGroupBox9.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private Sunny.UI.UIGroupBox uiGroupBox9; + private System.Windows.Forms.Label label7; + public System.Windows.Forms.ComboBox cb_PLCPortName; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.ComboBox cb_PLCBaudRate; + public System.Windows.Forms.Label lb_PLCCom_status; + private System.Windows.Forms.Button bt_PLCConnect; + private System.Windows.Forms.Button bt_PLCBreak; + private System.Windows.Forms.Button bt_PLCRefresh; + } +} \ No newline at end of file diff --git a/SLC1-N/Form_PLC_Serialport.cs b/SLC1-N/Form_PLC_Serialport.cs new file mode 100644 index 0000000..138aaa4 --- /dev/null +++ b/SLC1-N/Form_PLC_Serialport.cs @@ -0,0 +1,105 @@ +using Microsoft.VisualBasic.Devices; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class Form_PLC_Serialport : Form + { + public Form_PLC_Serialport() + { + InitializeComponent(); + } + + private void Form_PLCconnect_Load(object sender, EventArgs e) + { + // PLC + cb_PLCPortName.Text = Form1.f1.HCPLC_client.SerialPort; + cb_PLCBaudRate.Text = Form1.f1.HCPLC_client.Baudrate.ToString(); + if (Form1.f1.HCPLC_client.Connected) + { + lb_PLCCom_status.Text = "已连接"; + lb_PLCCom_status.ForeColor = Color.Green; + bt_PLCConnect.Enabled = false; + cb_PLCPortName.Enabled = false; + cb_PLCBaudRate.Enabled = false; + } + else + { + lb_PLCCom_status.Text = "未连接"; + lb_PLCCom_status.ForeColor = Color.Red; + bt_PLCConnect.Enabled = true; + cb_PLCPortName.Enabled = true; + cb_PLCBaudRate.Enabled = true; + } + } + + // 连接 + private void bt_PLCConnect_Click(object sender, EventArgs e) + { + try + { + if (Form1.f1.HCPLC_client != null && Form1.f1.HCPLC_client.Connected) + { + lock (Form1.f1.plcLock) // 加锁 + Form1.f1.HCPLC_client.Disconnect(); + } + + Form1.f1.HCPLC_client.SerialPort = cb_PLCPortName.Text; + Form1.f1.HCPLC_client.Baudrate = Convert.ToInt32(cb_PLCBaudRate.Text); // 波特率 + Form1.f1.HCPLC_client.Parity = System.IO.Ports.Parity.None; // 无校验 + Form1.f1.HCPLC_client.StopBits = System.IO.Ports.StopBits.Two; // 停止位 + + lock (Form1.f1.plcLock) // 加锁 + Form1.f1.HCPLC_client.Connect(); + + // Form1.f1.PLC_client.Open(); + if (Form1.f1.HCPLC_client != null && Form1.f1.HCPLC_client.Connected) + { + lb_PLCCom_status.Text = "已连接"; + lb_PLCCom_status.ForeColor = Color.Green; + cb_PLCPortName.Enabled = false; + cb_PLCBaudRate.Enabled = false; + bt_PLCConnect.Enabled = false; + + var jsconfig = new JsonConfig("config.json"); + + jsconfig.SetValue("PLC_PortName", cb_PLCPortName.Text); + jsconfig.SetValue("PLC_BaudRate", cb_PLCBaudRate.Text); + } + } + catch (Exception ex) + { + Console.WriteLine($"PLC连接异常: {ex.Message}"); + } + } + // 刷新 + private void bt_PLCRefresh_Click(object sender, EventArgs e) + { + cb_PLCPortName.Items.Clear(); + string[] ports = System.IO.Ports.SerialPort.GetPortNames(); + cb_PLCPortName.Items.AddRange(ports); + } + // 断开 + private void bt_PLCBreak_Click(object sender, EventArgs e) + { + if (Form1.f1.HCPLC_client.Connected) + { + lock (Form1.f1.plcLock) // 加锁 + Form1.f1.HCPLC_client.Disconnect(); + } + lb_PLCCom_status.Text = "未连接"; + lb_PLCCom_status.ForeColor = Color.Red; + cb_PLCPortName.Enabled = true; + cb_PLCBaudRate.Enabled = true; + bt_PLCConnect.Enabled = true; + } + } +} diff --git a/SLC1-N/Form_PLC_Serialport.resx b/SLC1-N/Form_PLC_Serialport.resx new file mode 100644 index 0000000..8951e3d --- /dev/null +++ b/SLC1-N/Form_PLC_Serialport.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAACq + qnqHeoqqgAAAAAAAAAAAAAAAAAAACqiAAAAAAAAAeqgAAAAAAAAAAAAAAAAKqAAAAAAAAAAAAAqoAAAA + AAAAAAAAAAegAAAAAAAAAAAAAAAIoAAAAAAAAAAAAKcAAAAAAAAAAAAAAAAACqAAAAAAAAAACgAIenqq + qqqqqqqqqqAAAIoAAAAAAAAAoAAAAKqqqqqqqqqqqqgAAAigAAAAAAAKAAAAiqqqqqqqqqqqqqoAAACK + AAAAAAB3AAAAeHiqqqqqqqqqqqoAAAAKAAAAAACgAAAAAAqqqqqqqqqqqqoAAAAAoAAAAAqAAAAAAKqq + qqqqoAAAAAAAAAAAgAAAAAoAAAAAAAAIqqqqpwAAAAAAAAAACgAAAAoAAAAAAAAKqqqqqgAAAAAAAAAA + CgAAAAgAAAAAAAiqqqqqqqAAAAAAAAAABwAAAAoAAAAAAAAACKqqqqAAAAAAAAAACgAAAAgAAAAAAAAA + qqqqqqgAAAAAAAAACgAAAAoAAAAAAAAKqqqqqqoAAAAAAAAACgAAAAoAAAAAAAAAAAqqqqpwAAAAAAAA + CgAAAAoAAAAAAAAAAKqqqqqgAAAAAAAAiAAAAACAAAAAAAAAB6iqqqqoAAAAAAAAoAAAAACgAAAAAAAA + AACKqqqqAAAAAAAIoAAAAAAKAAAAAAAAAAqqqqqqgAAAAAAKAAAAAAAAoAAAAAAAAIqKiqqqoAAAAACg + AAAAAAAAigAAAAAAAAAAqqqqqAAAAAoAAAAAAAAACKAAAAAAAAAKqqqqqgAAAKAAAAAAAAAAAAqAAAAA + AAAAAAAAAAAAqgAAAAAAAAAAAACqgAAAAAAAAAAAAAB6gAAAAAAAAAAAAAAAeqAAAAAAAAAAAKqAAAAA + AAAAAAAAAAAAAAenoAAAAAB6qAAAAAAAAAAAAAAAAAAAAAAAinqqqqhwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////P///AAD//8AAf/8AAP/+H/8P/wAA//j//+P/ + AAD/5///+f8AAP/P///+fwAA/7gAAB8/AAD/fwAAD58AAP78AAAPzwAA/PwAAA/vAAD9/4AAD/cAAPn/ + AB//9wAA+//gD//7AAD7/+AP//sAAPv/gAf/+wAA+//4B//7AAD7//AD//sAAPv/4AP/+wAA+//+Af/7 + AAD7//wB//MAAP3/+AD/9wAA/f//AP/nAAD+//4Af+8AAP9//AB/3wAA/z//wD+/AAD/n/+AP38AAP/n + ///8/wAA//H///H/AAD//H//x/8AAP//h/w//wAA///wAf//AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAACKqAAAenAAAAAAAAAAAACoAAAAAAAAegAAAAAAAAB3AAAAAAAAAACKAAAAAA + AKAAqqqqqqqqoAAIAAAAAAoAAIqqqqqqqqoAAKAAAACAAAinqqqqqqqqAAAIAAAAoAAACqqqqqeqigAA + CgAACAAAAAiKqqoAAAAAAAAAAAoAAAAAqqqqoAAAAAAAgAAKAAAAAACqqqAAAAAAAKAACAAAAAAIqqqq + AAAAAABwAAoAAAAAAAqqqgAAAAAAcAAAAAAAAACqqqqgAAAAAAAAAHAAAAAAAKqqoAAAAAoAAAAIAAAA + AAqqqqgAAACAAAAACgAAAAAACKqqAAAIAAAAAACHAAAAAKqqqqAAoAAAAAAAAKAAAAAAAAAACAAAAAAA + AAAAdwAAAAAAigAAAAAAAAAAAAAHqKeooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////+Hj//+f/n/+f/+f/cAB7/vAAPf3gAD79+AA++/g + P//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/Ad//f/+//8/8///4B/////////////// + //////////////////8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqoAAAAAAKqoAAAAAAAAiqoA + AAAAAAAKqgAAAAAAAAiqgAAAAAAAAHqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAP//AAD//wAA//8AAP//AAD4DwAA/D8AAPw/AAD+PwAA/h8AAP8fAAD//wAA//8AAP// + AAD//wAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAAP4AAAX+ + BQAJ/wkADf4NABH/EQAW/hYAGf8ZAB3+HQAh/iEAJv4mACr+KgAt/i0AMf4xADX+NQA5/jkAPf49AEH+ + QQBF/kUAS/9LAE3+TQBR/lEAVf5VAFn+WQBe/14AYf5hAGX+ZQBp/mkAbv9uAHD/cAB1/nUAef55AH7+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFggIDhMXFxsXFxIOBgobAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFgwSIAAAAAAAAAAAAAAAAAAdEQwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMHQAA + AAAAAAAAAAAAAAAAAAAAAAAbDBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAbCAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAB0IAAAAAAAAAAAAAAAAAAAAAAAAAAwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREA + AAAAAAAAAAAAAAAAAAAACgAAACAbFgwBAQEBAQEBAQEBAQEBAQEBAQEAAAAAABsOAAAAAAAAAAAAAAAA + AAAKAAAAAAAAAAwBAQEBAQEBAQEBAQEBAQEBAQEbAAAAAAAgDgAAAAAAAAAAAAAAAA4AAAAAAAAdBAEB + AQEBAQEBAQEBAQEBAQEBAQEOAAAAAAAAGxIAAAAAAAAAAAAAGxYAAAAAAAAgICAgCgEBAQEBAQEBAQEB + AQEBAQEBAAAAAAAAAA4AAAAAAAAAAAAADAAAAAAAAAAAAAAWAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAA + AAAKAAAAAAAAAAAWHQAAAAAAAAAAAAwBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAK + AAAAAAAAAAAAAAAAACAGAQEBAQEBFgAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAOAAAAAAAAAAAAAAAA + AAgBAQEBAQEBBAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAATAAAAAAAAAAAAAAAXAQEBAQEBAQEBARYA + AAAAAAAAAAAAAAAAAAAADAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAFwEBAQEBAQYAAAAAAAAAAAAAAAAA + AAAADAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAWAQEBAQEBAQEXAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAS + AAAAAAAAAAAAAAAAAAoBBAQBAQEBAQEEAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAA + AAAAAAAOAQEBAQEBGwAAAAAAAAAAAAAAAAAAEQAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAYBAQEBAQEB + BAAAAAAAAAAAAAAAAAAbFwAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAEQwODAQBAQEBAR0AAAAAAAAAAAAA + AAAKAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAIAQBAQEBAQgAAAAAAAAAAAAAAB0WAAAAAAAAAAAA + AAoAAAAAAAAAAAAAAAAAAAARAQEBAQEBAQEdAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAMAAAAAAAAAAAA + AAAAABsbFxsRAQEBAQEKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAbEQAAAAAAAAAAAAAAAAAAAAAMAQEB + AQEBIAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAGw4AAAAAAAAAAAAAAAAAAAYBAQEBAQEBCAAAAAAAAAoA + AAAAAAAAAAAAAAAAAAAAAAAIGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCgAAAAAAAAAAAAAAAAAA + AAAAAAAAFwgdAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXDBMA + AAAAAAAAAAAAAAAAAAAAABIMGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODhIXAAAAAAAAAAAA + FxEMEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEw4IBAQECA4WIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///z///wAA///AAH//AAD//h//D/8AAP/4///j/wAA/+f///n/ + AAD/z////n8AAP+4AAAfPwAA/38AAA+fAAD+/AAAD88AAPz8AAAP7wAA/f+AAA/3AAD5/wAf//cAAPv/ + 4A//+wAA+//gD//7AAD7/4AH//sAAPv/+Af/+wAA+//wA//7AAD7/+AD//sAAPv//gH/+wAA+//8Af/z + AAD9//gA//cAAP3//wD/5wAA/v/+AH/vAAD/f/wAf98AAP8//8A/vwAA/5//gD9/AAD/5////P8AAP/x + ///x/wAA//x//8f/AAD//4f8P/8AAP//8AH//wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA/gAABf4FAAn+CQAP/g8AHv4eACv+KwAs/ywAM/8zADT/ + NAA+/j4AQv5CAEX+RQBJ/kkATP5MAFD+UABV/lUAWf9ZAF7+XgBh/mEAZf5lAGj+aABt/m0Acv5yAHX+ + dQB5/nkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkODhcAAAAAFg4O + AAAAAAAAAAAAAAAAAAAAAAAAAA8WAAAAAAAAAAAAAAAAExEAAAAAAAAAAAAAAAAAABMWAAAAAAAAAAAA + AAAAAAAAABEXAAAAAAAAAAAAAAANAAAADQQEAgQCBAIEAgQCBAAAAAAPAAAAAAAAAAAADQAAAAARAgIC + AgICAgICAgICCgAAAAAPAAAAAAAAABMAAAAAGREPBAICAgICAgICAgICAAAAAAAZAAAAAAAAFgAAAAAA + ABECAgICAgIGBwgICAgAAAAAAA8AAAAAABMAAAAAAAAAFxYFAgICAgAAAAAAAAAAAAAAAAAAAAAADgAA + AAAAAAAADwICAgICBwAAAAAAAAAAAAAADwAAAAANAAAAAAAAAAAAAAcCAgICAAAAAAAAAAAAAAANAAAA + AA0AAAAAAAAAAAAOAgICAgIHAAAAAAAAAAAAAA0AAAAADgAAAAAAAAAAAAAACgICAgIAAAAAAAAAAAAA + EwAAAAAAAAAAAAAAAAAAAA0CAgICAggAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAgICAgAAAAAA + AAAADQAAAAAAAAAXAAAAAAAAAAAADQICAgICCgAAAAAAABEAAAAAAAAAABcAAAAAAAAAAAAAABMCAgIC + AAAAAAAXAAAAAAAAAAAAABkTAAAAAAAAAAAOBAICAgQOAAAADwAAAAAAAAAAAAAAAAAOAAAAAAAAAAAA + AAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAADhMAAAAAAAAAAAAAEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAT + Dg0KCg0OEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////+Hj//+f + /n/+f/+f/cAB7/vAAPf3gAD79+AA++/gP//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/ + Ad//f/+//8/8///4B/////////////////////////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAB + AAAAAAAAAAAAAAABAAAAAQAAAAAAAAD+AAAE/wQAC/4LAAz/DAAR/hEAFf8VACP/IwA6/zoAQ/5DAFL/ + UgBb/1sAb/5vAHb+dgB5/3kAfv9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgICAgIFAAAAAAAA + AAAAAAcCAg4AAAAAAAAAAAAAAAALAwIMAAAAAAAAAAAAAAAAAAgCAwAAAAAAAAAAAAAAAAANBQIOAAAA + AAAAAAAAAAAAAAoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAPgP + AAD8PwAA/D8AAP4/AAD+HwAA/x8AAP//AAD//wAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/AEUA/wBjAP8AdgD+AIMA/wCGAP8AfAD/AHIA/wBeAP8AQAD+ + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/AAIA/wAnAP4AZgD/AKkA/wDiAP8A5QD/AMkA/wC0AP8ApQD+AJ4A/wCZAP8AnwD/ + AKgA/wC4AP8AzAD+AOkA/wDaAP8AmwD/AFwA/wAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAQAP8ATgD/AKwA/wDRAP4AuwD/AIAA/wBCAP8AIgD/ABUA/wAMAP8ABQD+ + AAIAAAAAAP8AAwD/AAYA/wANAP8AFwD+ACQA/wBMAP8AjQD/AMAA/wDTAP8AnAD+AD8A/wAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ACAD+AEQA/gC5AP4A0QD+AIcA/gA3AP4ACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABEA/gA+AP4AmwD+ + ANQA/gCmAP4AOAD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAZAP4AlgD/AOcA/wB2AP8AGQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+ACcA/wCQAP8A5gD/AH4A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD8A/wDTAP4AqwD/ACEA/wAGAP8AMAD/ + AF8A/wByAP4AcgD/AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+ + AHIA/wByAP8AcgD/AHIA/wByAP8ACwAAAAAAAAAAAP8AMQD/AMYA/wDBAP8AKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wACAP8ATAD/ANsA/wB3AP4AHwD/ + AEsA/wCHAP8AnAD/AKoA/wDSAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8ATAAAAAAAAAAAAAAAAAD/ABMA/wCYAP8AywD+ + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wA/AP8A3AD/ + AGMA/wAGAAAAAAAAAAAAAAAAAP8ACAD/AFQA/wDVAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AlAD+AAMAAAAAAAAAAAAA + AAAA/wAMAP8AhgD+AMwA/wAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ACIA/wDKAP8AfAD/AAIAAAAAAAAAAAAAAAAA/wARAP8AjgD/APIA/wD/AP4A/gD/AP8A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AzgD+ + ABQAAAAAAAAAAAAAAAAAAAAAAP8ADAD+AJkA/wC8AP8ACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD+AJ8A/gCpAP4AAwAAAAAAAAAAAAAAAAAAAAAA/gBPAP4AgAD+AIAA/gCAAP4AhAD+ + AN0A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4A+wD+ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABAA/gDJAP4AdQD+AAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ASAD/ANEA/wAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAiAP4AqwD/APkA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBCAP8A3AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AqAD/AI4A/wACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABgD/AFAA/wDRAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AHQA/wAyAP8AMgD+ADIA/wAyAP8AMgD/ADIA/wAyAP8AMgD+AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP8AuAD/AHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAWAP4A3wD/ADsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AEQA/wBTAP4AUwD/AFYA/wCDAP8A7gD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AK0A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AYAD/AL4A/wANAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBIAP4AxwD/ + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAQD/AGIA/wDkAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/APIA/wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ALwD/AMwA/wAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wBoAP4AsAD/AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAcAP4ApgD/ + APoA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wCuAP8ABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADgD/ANAA/wBDAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wB1AP4AqAD/AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAKAP4AJQD/ACYA/wAmAP8ANwD/AKEA/wD9AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wDsAP8AQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAgD/ + ANIA/wBMAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBvAP4AqwD+AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAEA/gAtAP4ArgD+APoA/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4ApQD+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABwD+ANEA/gBIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBYAP4AuwD/ABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AFMA/wDXAP8A+QD/APkA/wD5AP8A/QD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A8QD+AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AHgD/AM0A/wA4AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wApAP4A2AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wA8AP8AzQD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/gD+AJ0A/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ARwD/AMYA/wAaAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP4AzAD/AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ADQD/AHMA/wDuAP8A/gD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+APMA/wAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AkAD/AKAA/wACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AbwD/AL8A/wASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAMAP8AdgD/AMUA/wDLAP8AywD+ANIA/wD3AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wCPAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAbAP8A3wD/ + AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AGwD/AMgA/wBrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AIQA/wDxAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wDkAP8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAUA/wCOAP8ArgD/AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AFEA/gDeAP4AMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAzAP4AwwD+ + AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4AigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+AE4A/gDoAP4AKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AAYA/wB9AP8A1AD/ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ABsA/wCPAP8AngD+AJ4A/wCfAP8AvgD/APsA/wD/AP8A/wD+AP4A/wD/AP8A3wD/ACkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AQgD+ANgA/wBdAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAOAP8AmAD/AMMA/wAyAP4AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAUA/wBHAP8A1QD/AP0A/wD/AP8A/wD+AP4A/wD/AP8A/QD/ + AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wBMAP8AzgD+AHwA/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADQD/AJYA/wDNAP4AUgD/AAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AH4A/wDtAP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AN8A/wAcAAAAAAAAAAAAAAAAAP8ACwD/AGoA/wDYAP8AdQD+AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAQA/wBqAP4A4QD/ + AJwA/wAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ANQD+AHAA/wBxAP8AcQD/ + AHEA/wBxAP8AcQD+AHEA/wBxAP8AcQD/AG4A/wAmAAAAAAAAAAAA/wAqAP8ArAD/AN0A/wBMAP8AAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4AJAD/AKEA/wDnAP8AhwD/AC0A/wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wABAP8APQD+AJ4A/wDjAP8AkgD/ + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAgA/gBCAP4AqQD+ANMA/gCzAP4AXQD+AC0A/gANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gASAP4ANAD+AGsA/gC+AP4A0QD+ + AJcA/gA0AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/ADUA/wB7AP4AyAD/ + AMwA/wC/AP8AoAD/AHQA/wBVAP8APgD+ADMA/wArAP8ANAD/AEEA/wBaAP8AegD+AKcA/wDCAP8AzwD/ + AL4A/wBwAP8AKQD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD/AC8A/wBbAP8AhwD/AK8A/wDPAP8A5AD+APEA/wD1AP8A8AD/AOAA/wDJAP8AqgD+ + AIAA/wBTAP8AJQD/AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//+AB//8AAP/+AAAf/wAA//gAQAP/AAD/4D//gP8AAP/B///wfwAA/4AAAAw/AAD+AAAADh8AAPwc + AAAHDwAA/DgAAAeHAAD4eAAAB8MAAPj/AAAH4wAA+PwAAAfjAADx/AAH//EAAPH/gAf/8QAA8f8AA//x + AADx/wAD//EAAPH/wAH/8QAA8f/AAf/xAADx//wA//EAAPH/8AD/8QAA+P/gAH/jAAD4//4Af8MAAPx/ + /AB/xwAA/D/4AD+HAAD+D/8APg8AAP8H/gAcHwAA/4P+ABg/AAD/4H//wP8AAP/wD/4B/wAA//wAAAf/ + AAD//4AAP/8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA8A/gAzAP4ASwD/AFgA/gBVAP4ASQD+ + ADAA/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAEAP4ANwD+AIcA/wCzAP4AtAD+AI8A/gB1AP8AaQD+ + AGoA/gB4AP4AkgD/ALcA/gCvAP4AfwD+AC4A/wACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gADAP8ARAD+AK4A/gCWAP4AQQD/ABMA/gABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AAQD+ABYA/gBKAP4AnwD/AKYA/gA5AP4AAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD/AJsA/wCVAP8AHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AKgD/AKEA/wCMAP8ADAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ACMA/gC5AP4AUQD/AD8A/gB+AP4AuQD+ + APAA/wD2AP4A9gD+APYA/gD2AP8A9gD+APYA/gD2AP4A9gD/APYA/gD2AP4A9gD+AHkAAAAAAP4AAgD+ + AF0A/gCvAP8AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAXAP4AuAD+AC8AAAAAAAAAAAD+ + ABYA/gCfAP4A+gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+AP4A/gD+AP8A/wD+AP4A/gD+AP4AwQD/ + AAUAAAAAAAAAAAD+AEYA/wCvAP4ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD/AJwA/gBHAAAAAAAA + AAAA/wALAP4AhQD+AKoA/gCsAP8A8AD+AP4A/gD+AP4A/gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+ + AP4A/gD1AP8AHQAAAAAAAAAAAAAAAAD/AF0A/gCHAP4AAQAAAAAAAAAAAAAAAAAAAAAA/wBAAP8AlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AGgD/AKgA/wD8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDUAP8AywD/ + AMwA/wDLAP8AywD/AMsA/wBGAAAAAAAAAAAAAAAAAP8AAgD/AK0A/wAnAAAAAAAAAAAAAAAAAAAAAAD+ + AJcA/wA0AAAAAAAAAAAAAAAAAAAAAAD+AAcA/gBmAP4AjAD/AJIA/gDhAP4A/gD+AP4A/wD/AP4A/gD+ + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4ATgD+AHsAAAAAAAAAAAAA + AAAAAAAAAP4AtwD/AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP8ArQD+AP0A/gD+AP4A/gD/ + AP8A/gD+AP4A1AD+AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP4AqwAA + AAAAAAAAAAAAAAAAAAAA/gC9AP8AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD+AFAA/wBuAP4AdgD+ + ANQA/gD+AP8A/wD+AP4A/gD9AP4AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAMA/gC9AAAAAAAAAAAAAAAAAAAAAAD/ALsA/wAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AB4A/wCvAP8A/QD/AP8A/wD/AP8A/wD/AP8A/wDTAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ACAD/ALkAAAAAAAAAAAAAAAAAAAAAAP4ArwD/ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ANwD+AFAA/gBWAP4AwwD/AP8A/gD+AP4A/gD+AP0A/wBXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/gAoAP4AnAAAAAAAAAAAAAAAAAAAAAAA/gB6AP8AVgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AIwD+ALgA/gD9AP8A/wD+AP4A/gD+AP4A/gD/AMgA/gAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AHIA/gBcAAAAAAAAAAAAAAAAAAAAAAD+AB8A/wCzAP4ACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAcAP4AMgD+ADsA/wCrAP4A/gD+AP4A/gD+AP8A/QD+ + AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAQAP4AuwD+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AGUA/wCJAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAkAP8AvQD/AP4A/wD/AP8A/wD/ + AP8A/wD/AP8AwQD/AAUAAAAAAAAAAAAAAAAAAAAAAP8ABgD/AJ8A/wBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABQD+AIsA/gB2AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAkA/gAUAP8AIAD+ + AJcA/gD8AP4A/gD/AP8A/gD6AP4ARwAAAAAAAAAAAAAAAAD+AAkA/gCMAP8AdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ABQD+AIQA/gCaAP8AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + ACAA/wC0AP4A9QD+APUA/gD1AP8A9gD+APUA/gCyAAAAAAAAAAAA/gAeAP4AqgD+AG8A/wADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AEkA/wC5AP4AbgD+ABQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAbAP8AfQD+ALUA/gA3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAwA/wBkAP8AswD/ + AJgA/wBVAP8AJQD/ABEA/wAGAP8AAQD/AAIA/wAIAP8AEwD/ACgA/wBeAP8AngD/AK8A/wBVAP8ACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/gAFAP4AMAD/AHAA/gCgAP4AsAD+ALoA/wDAAP4AwAD+ALkA/gCvAP8AnAD+AGcA/gArAP4AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////+Af//4AAf/4D8B/8P/8P+AAAh/GA + AGPjAABx58AAceeAH/nn4A/558AP+efwB/nn8Af55/gD+eP4A/Hx/AHj8PwBx/h+AYf+H/4f/wAAP//A + AP////////////////////////////////8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/ACsA/wAeAP8AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD4A/gBlAP8AXgD+AEEA/wA1AP4AQgD/ + AF8A/gBmAP8AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/AG4A/wBcAP8AagD/AHsA/wB7AP8AewD/ + AHsA/wB7AP8AWwD/ADMA/wBpAP8ABgAAAAAAAAAAAAAAAAD/AGwA/gAMAP8AKQD+ALwA/wD7AP4A/gD/ + AP8A/gD+AP8A/wD+AO0A/wAIAP4AEQD/AGcAAAAAAAAAAAD/ADYA/wAzAAAAAAD/AAEA/wBtAP8A3AD/ + AP8A/wD/AP8AgQD/AGYA/wBlAP8AEQAAAAAA/wA/AP8AKAAAAAAA/gBdAP8ABAAAAAAAAAAAAP4AGwD/ + AKQA/gD0AP8A/wD+AJAAAAAAAAAAAAAAAAAAAAAAAP8ABwD+AFoAAAAAAP8AWgD/AAYAAAAAAAAAAAAA + AAAA/wBVAP8AxQD/AP8A/wDzAP8AFwAAAAAAAAAAAAAAAAD/AAwA/wBVAAAAAAD+ACYA/wBFAAAAAAAA + AAAAAAAAAP8ADwD+AIkA/wDqAP4A/gD/AIYAAAAAAAAAAAAAAAAA/wBPAP4AGwAAAAAAAAAAAP8AXwD/ + AB8AAAAAAAAAAAAAAAAA/wBAAP8ArQD/AP4A/wDuAP8AEwAAAAAA/wAnAP8AWAAAAAAAAAAAAAAAAAD/ + AAEA/gBaAP8ATwD+AAUAAAAAAP4ACAD/AGoA/gB6AP8AegD+ADMA/wBUAP4AVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/ABwA/wBgAP8AYgD/AGEA/wBhAP8AYQD/AGIA/wBfAP8AFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA/B8AAPAHAADAAQAAwAEAAJAEAACYPAAAnBwAAJwcAADOCQAAwgMAAPAH + AAD//wAA//8AAP//AAA= + + + \ No newline at end of file diff --git a/SLC1-N/Form_PLC_TCP.Designer.cs b/SLC1-N/Form_PLC_TCP.Designer.cs new file mode 100644 index 0000000..c652b4c --- /dev/null +++ b/SLC1-N/Form_PLC_TCP.Designer.cs @@ -0,0 +1,123 @@ +namespace SLC1_N +{ + partial class Form_PLC_TCP + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tb_PLC_IP = new System.Windows.Forms.TextBox(); + this.tb_PLC_Port = new System.Windows.Forms.TextBox(); + this.bt_PLC_Connect = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.bt_PLC_disconnect = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // tb_PLC_IP + // + this.tb_PLC_IP.Font = new System.Drawing.Font("宋体", 15F); + this.tb_PLC_IP.Location = new System.Drawing.Point(124, 52); + this.tb_PLC_IP.Name = "tb_PLC_IP"; + this.tb_PLC_IP.Size = new System.Drawing.Size(212, 30); + this.tb_PLC_IP.TabIndex = 0; + // + // tb_PLC_Port + // + this.tb_PLC_Port.Font = new System.Drawing.Font("宋体", 15F); + this.tb_PLC_Port.Location = new System.Drawing.Point(124, 96); + this.tb_PLC_Port.Name = "tb_PLC_Port"; + this.tb_PLC_Port.Size = new System.Drawing.Size(212, 30); + this.tb_PLC_Port.TabIndex = 0; + // + // bt_PLC_Connect + // + this.bt_PLC_Connect.Location = new System.Drawing.Point(135, 170); + this.bt_PLC_Connect.Name = "bt_PLC_Connect"; + this.bt_PLC_Connect.Size = new System.Drawing.Size(152, 57); + this.bt_PLC_Connect.TabIndex = 1; + this.bt_PLC_Connect.Text = "连接"; + this.bt_PLC_Connect.UseVisualStyleBackColor = true; + this.bt_PLC_Connect.Click += new System.EventHandler(this.bt_PLC_Connect_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("宋体", 15F); + this.label1.Location = new System.Drawing.Point(64, 58); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(49, 20); + this.label1.TabIndex = 2; + this.label1.Text = "IP:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("宋体", 15F); + this.label2.Location = new System.Drawing.Point(44, 101); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(69, 20); + this.label2.TabIndex = 3; + this.label2.Text = "端口:"; + // + // bt_PLC_disconnect + // + this.bt_PLC_disconnect.Location = new System.Drawing.Point(135, 251); + this.bt_PLC_disconnect.Name = "bt_PLC_disconnect"; + this.bt_PLC_disconnect.Size = new System.Drawing.Size(152, 57); + this.bt_PLC_disconnect.TabIndex = 4; + this.bt_PLC_disconnect.Text = "断开连接"; + this.bt_PLC_disconnect.UseVisualStyleBackColor = true; + this.bt_PLC_disconnect.Click += new System.EventHandler(this.bt_PLC_disconnect_Click); + // + // Form_PLC_TCP + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(417, 369); + this.Controls.Add(this.bt_PLC_disconnect); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.bt_PLC_Connect); + this.Controls.Add(this.tb_PLC_Port); + this.Controls.Add(this.tb_PLC_IP); + this.Name = "Form_PLC_TCP"; + this.Text = "PLC网口配置"; + this.Load += new System.EventHandler(this.Form_PLC_TCP_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox tb_PLC_IP; + private System.Windows.Forms.TextBox tb_PLC_Port; + private System.Windows.Forms.Button bt_PLC_Connect; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button bt_PLC_disconnect; + } +} \ No newline at end of file diff --git a/SLC1-N/Form_PLC_TCP.cs b/SLC1-N/Form_PLC_TCP.cs new file mode 100644 index 0000000..edb58cf --- /dev/null +++ b/SLC1-N/Form_PLC_TCP.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class Form_PLC_TCP : Form + { + public Form_PLC_TCP() + { + InitializeComponent(); + } + + private void Form_PLC_TCP_Load(object sender, EventArgs e) + { + tb_PLC_IP.Text = Form1.f1.HCPLC_client.IPAddress; + tb_PLC_Port.Text = Form1.f1.HCPLC_client.Port.ToString(); + + if (Form1.f1.HCPLC_client.Connected) + bt_PLC_Connect.Enabled = false; + } + + private void bt_PLC_Connect_Click(object sender, EventArgs e) + { + try + { + if (Form1.f1.HCPLC_client.Connected) + Form1.f1.HCPLC_client.Disconnect(); + + Form1.f1.HCPLC_client.Connect(tb_PLC_IP.Text, Convert.ToInt32(tb_PLC_Port.Text)); + + //Form1.f1.HCPLC_client.Connect(); + + if (Form1.f1.HCPLC_client.Connected) + { + Form1.f1.HCPLC_client.IPAddress = tb_PLC_IP.Text; + Form1.f1.HCPLC_client.Port = Convert.ToInt32(tb_PLC_Port.Text); + + var jsconfig = new JsonConfig("config.json"); + + jsconfig.SetValue("PLC_IP", tb_PLC_IP.Text); + jsconfig.SetValue("PLC_Port", Convert.ToInt32(tb_PLC_Port.Text)); + + bt_PLC_Connect.Enabled = false; + MessageBox.Show("连接成功!"); + } + } + catch(Exception ex) + { + MessageBox.Show(ex.Message); + } + } + + private void bt_PLC_disconnect_Click(object sender, EventArgs e) + { + if (Form1.f1.HCPLC_client.Connected) + Form1.f1.HCPLC_client.Disconnect(); + bt_PLC_Connect.Enabled = true; + } + } +} diff --git a/SLC1-N/Form_PLC_TCP.resx b/SLC1-N/Form_PLC_TCP.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SLC1-N/Form_PLC_TCP.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SLC1-N/Form_PLCcontrol.Designer.cs b/SLC1-N/Form_PLCcontrol.Designer.cs new file mode 100644 index 0000000..4709ccd --- /dev/null +++ b/SLC1-N/Form_PLCcontrol.Designer.cs @@ -0,0 +1,298 @@ +namespace SLC1_N +{ + partial class Form_PLCcontrol + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form_PLCcontrol)); + this.bt_M1020 = new System.Windows.Forms.Button(); + this.bt_M1021 = new System.Windows.Forms.Button(); + this.bt_M1022_down = new System.Windows.Forms.Button(); + this.bt_M1022_up = new System.Windows.Forms.Button(); + this.bt_M1025_up = new System.Windows.Forms.Button(); + this.bt_M1025_down = new System.Windows.Forms.Button(); + this.bt_M1024 = new System.Windows.Forms.Button(); + this.bt_M1023 = new System.Windows.Forms.Button(); + this.bt_M1028_up = new System.Windows.Forms.Button(); + this.bt_M1028_down = new System.Windows.Forms.Button(); + this.bt_M1027 = new System.Windows.Forms.Button(); + this.bt_M1026 = new System.Windows.Forms.Button(); + this.bt_M1031_up = new System.Windows.Forms.Button(); + this.bt_M1031_down = new System.Windows.Forms.Button(); + this.bt_M1030 = new System.Windows.Forms.Button(); + this.bt_M1029 = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // bt_M1020 + // + this.bt_M1020.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1020.Location = new System.Drawing.Point(16, 19); + this.bt_M1020.Name = "bt_M1020"; + this.bt_M1020.Size = new System.Drawing.Size(127, 57); + this.bt_M1020.TabIndex = 0; + this.bt_M1020.Text = "CH1 滑轨伸出"; + this.bt_M1020.UseVisualStyleBackColor = true; + this.bt_M1020.MouseDown += new System.Windows.Forms.MouseEventHandler(this.bt_M1020_MouseDown); + this.bt_M1020.MouseUp += new System.Windows.Forms.MouseEventHandler(this.bt_M1020_MouseUp); + // + // bt_M1021 + // + this.bt_M1021.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1021.Location = new System.Drawing.Point(167, 20); + this.bt_M1021.Name = "bt_M1021"; + this.bt_M1021.Size = new System.Drawing.Size(127, 57); + this.bt_M1021.TabIndex = 1; + this.bt_M1021.Text = "CH1 滑轨缩回"; + this.bt_M1021.UseVisualStyleBackColor = true; + this.bt_M1021.MouseDown += new System.Windows.Forms.MouseEventHandler(this.bt_M1021_MouseDown); + this.bt_M1021.MouseUp += new System.Windows.Forms.MouseEventHandler(this.bt_M1021_MouseUp); + // + // bt_M1022_down + // + this.bt_M1022_down.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1022_down.Location = new System.Drawing.Point(403, 32); + this.bt_M1022_down.Name = "bt_M1022_down"; + this.bt_M1022_down.Size = new System.Drawing.Size(127, 57); + this.bt_M1022_down.TabIndex = 2; + this.bt_M1022_down.Text = "CH1 气缸下压"; + this.bt_M1022_down.UseVisualStyleBackColor = true; + this.bt_M1022_down.Click += new System.EventHandler(this.bt_M1022_down_Click); + // + // bt_M1022_up + // + this.bt_M1022_up.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1022_up.Location = new System.Drawing.Point(551, 32); + this.bt_M1022_up.Name = "bt_M1022_up"; + this.bt_M1022_up.Size = new System.Drawing.Size(127, 57); + this.bt_M1022_up.TabIndex = 9; + this.bt_M1022_up.Text = "CH1 气缸上升"; + this.bt_M1022_up.UseVisualStyleBackColor = true; + this.bt_M1022_up.Click += new System.EventHandler(this.bt_M1022_up_Click); + // + // bt_M1025_up + // + this.bt_M1025_up.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1025_up.Location = new System.Drawing.Point(551, 133); + this.bt_M1025_up.Name = "bt_M1025_up"; + this.bt_M1025_up.Size = new System.Drawing.Size(127, 57); + this.bt_M1025_up.TabIndex = 13; + this.bt_M1025_up.Text = "CH2 气缸上升"; + this.bt_M1025_up.UseVisualStyleBackColor = true; + this.bt_M1025_up.Click += new System.EventHandler(this.bt_M1025_up_Click); + // + // bt_M1025_down + // + this.bt_M1025_down.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1025_down.Location = new System.Drawing.Point(403, 133); + this.bt_M1025_down.Name = "bt_M1025_down"; + this.bt_M1025_down.Size = new System.Drawing.Size(127, 57); + this.bt_M1025_down.TabIndex = 12; + this.bt_M1025_down.Text = "CH2 气缸下压"; + this.bt_M1025_down.UseVisualStyleBackColor = true; + this.bt_M1025_down.Click += new System.EventHandler(this.bt_M1025_down_Click); + // + // bt_M1024 + // + this.bt_M1024.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1024.Location = new System.Drawing.Point(167, 121); + this.bt_M1024.Name = "bt_M1024"; + this.bt_M1024.Size = new System.Drawing.Size(127, 57); + this.bt_M1024.TabIndex = 11; + this.bt_M1024.Text = "CH2 滑轨缩回"; + this.bt_M1024.UseVisualStyleBackColor = true; + this.bt_M1024.MouseDown += new System.Windows.Forms.MouseEventHandler(this.bt_M1024_MouseDown); + this.bt_M1024.MouseUp += new System.Windows.Forms.MouseEventHandler(this.bt_M1024_MouseUp); + // + // bt_M1023 + // + this.bt_M1023.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1023.Location = new System.Drawing.Point(17, 121); + this.bt_M1023.Name = "bt_M1023"; + this.bt_M1023.Size = new System.Drawing.Size(127, 57); + this.bt_M1023.TabIndex = 10; + this.bt_M1023.Text = "CH2 滑轨伸出"; + this.bt_M1023.UseVisualStyleBackColor = true; + this.bt_M1023.MouseDown += new System.Windows.Forms.MouseEventHandler(this.bt_M1023_MouseDown); + this.bt_M1023.MouseUp += new System.Windows.Forms.MouseEventHandler(this.bt_M1023_MouseUp); + // + // bt_M1028_up + // + this.bt_M1028_up.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1028_up.Location = new System.Drawing.Point(551, 234); + this.bt_M1028_up.Name = "bt_M1028_up"; + this.bt_M1028_up.Size = new System.Drawing.Size(127, 57); + this.bt_M1028_up.TabIndex = 17; + this.bt_M1028_up.Text = "CH3 气缸上升"; + this.bt_M1028_up.UseVisualStyleBackColor = true; + this.bt_M1028_up.Click += new System.EventHandler(this.bt_M1028_up_Click); + // + // bt_M1028_down + // + this.bt_M1028_down.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1028_down.Location = new System.Drawing.Point(403, 234); + this.bt_M1028_down.Name = "bt_M1028_down"; + this.bt_M1028_down.Size = new System.Drawing.Size(127, 57); + this.bt_M1028_down.TabIndex = 16; + this.bt_M1028_down.Text = "CH3 气缸下压"; + this.bt_M1028_down.UseVisualStyleBackColor = true; + this.bt_M1028_down.Click += new System.EventHandler(this.bt_M1028_down_Click); + // + // bt_M1027 + // + this.bt_M1027.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1027.Location = new System.Drawing.Point(167, 222); + this.bt_M1027.Name = "bt_M1027"; + this.bt_M1027.Size = new System.Drawing.Size(127, 57); + this.bt_M1027.TabIndex = 15; + this.bt_M1027.Text = "CH3 滑轨缩回"; + this.bt_M1027.UseVisualStyleBackColor = true; + this.bt_M1027.MouseDown += new System.Windows.Forms.MouseEventHandler(this.bt_M1027_MouseDown); + this.bt_M1027.MouseUp += new System.Windows.Forms.MouseEventHandler(this.bt_M1027_MouseUp); + // + // bt_M1026 + // + this.bt_M1026.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1026.Location = new System.Drawing.Point(17, 222); + this.bt_M1026.Name = "bt_M1026"; + this.bt_M1026.Size = new System.Drawing.Size(127, 57); + this.bt_M1026.TabIndex = 14; + this.bt_M1026.Text = "CH3 滑轨伸出"; + this.bt_M1026.UseVisualStyleBackColor = true; + this.bt_M1026.MouseDown += new System.Windows.Forms.MouseEventHandler(this.bt_M1026_MouseDown); + this.bt_M1026.MouseUp += new System.Windows.Forms.MouseEventHandler(this.bt_M1026_MouseUp); + // + // bt_M1031_up + // + this.bt_M1031_up.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1031_up.Location = new System.Drawing.Point(551, 335); + this.bt_M1031_up.Name = "bt_M1031_up"; + this.bt_M1031_up.Size = new System.Drawing.Size(127, 57); + this.bt_M1031_up.TabIndex = 21; + this.bt_M1031_up.Text = "CH4 气缸上升"; + this.bt_M1031_up.UseVisualStyleBackColor = true; + this.bt_M1031_up.Click += new System.EventHandler(this.bt_M1031_up_Click); + // + // bt_M1031_down + // + this.bt_M1031_down.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1031_down.Location = new System.Drawing.Point(403, 335); + this.bt_M1031_down.Name = "bt_M1031_down"; + this.bt_M1031_down.Size = new System.Drawing.Size(127, 57); + this.bt_M1031_down.TabIndex = 20; + this.bt_M1031_down.Text = "CH4 气缸下压"; + this.bt_M1031_down.UseVisualStyleBackColor = true; + this.bt_M1031_down.Click += new System.EventHandler(this.bt_M1031_down_Click); + // + // bt_M1030 + // + this.bt_M1030.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1030.Location = new System.Drawing.Point(167, 323); + this.bt_M1030.Name = "bt_M1030"; + this.bt_M1030.Size = new System.Drawing.Size(127, 57); + this.bt_M1030.TabIndex = 19; + this.bt_M1030.Text = "CH4 滑轨缩回"; + this.bt_M1030.UseVisualStyleBackColor = true; + this.bt_M1030.MouseDown += new System.Windows.Forms.MouseEventHandler(this.bt_M1030_MouseDown); + this.bt_M1030.MouseUp += new System.Windows.Forms.MouseEventHandler(this.bt_M1030_MouseUp); + // + // bt_M1029 + // + this.bt_M1029.Font = new System.Drawing.Font("宋体", 12F); + this.bt_M1029.Location = new System.Drawing.Point(17, 323); + this.bt_M1029.Name = "bt_M1029"; + this.bt_M1029.Size = new System.Drawing.Size(127, 57); + this.bt_M1029.TabIndex = 18; + this.bt_M1029.Text = "CH4 滑轨伸出"; + this.bt_M1029.UseVisualStyleBackColor = true; + this.bt_M1029.MouseDown += new System.Windows.Forms.MouseEventHandler(this.bt_M1029_MouseDown); + this.bt_M1029.MouseUp += new System.Windows.Forms.MouseEventHandler(this.bt_M1029_MouseUp); + // + // groupBox1 + // + this.groupBox1.BackColor = System.Drawing.SystemColors.ButtonFace; + this.groupBox1.Controls.Add(this.bt_M1021); + this.groupBox1.Controls.Add(this.bt_M1020); + this.groupBox1.Controls.Add(this.bt_M1023); + this.groupBox1.Controls.Add(this.bt_M1030); + this.groupBox1.Controls.Add(this.bt_M1024); + this.groupBox1.Controls.Add(this.bt_M1029); + this.groupBox1.Controls.Add(this.bt_M1026); + this.groupBox1.Controls.Add(this.bt_M1027); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(313, 394); + this.groupBox1.TabIndex = 22; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "点动式"; + // + // Form_PLCcontrol + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(704, 418); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.bt_M1031_up); + this.Controls.Add(this.bt_M1031_down); + this.Controls.Add(this.bt_M1028_up); + this.Controls.Add(this.bt_M1028_down); + this.Controls.Add(this.bt_M1025_up); + this.Controls.Add(this.bt_M1025_down); + this.Controls.Add(this.bt_M1022_up); + this.Controls.Add(this.bt_M1022_down); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Form_PLCcontrol"; + this.Text = "PLC控制"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form_PLCcontrol_FormClosing); + this.Load += new System.EventHandler(this.Form_PLCcontrol_Load); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button bt_M1020; + private System.Windows.Forms.Button bt_M1021; + private System.Windows.Forms.Button bt_M1022_down; + private System.Windows.Forms.Button bt_M1022_up; + private System.Windows.Forms.Button bt_M1025_up; + private System.Windows.Forms.Button bt_M1025_down; + private System.Windows.Forms.Button bt_M1024; + private System.Windows.Forms.Button bt_M1023; + private System.Windows.Forms.Button bt_M1028_up; + private System.Windows.Forms.Button bt_M1028_down; + private System.Windows.Forms.Button bt_M1027; + private System.Windows.Forms.Button bt_M1026; + private System.Windows.Forms.Button bt_M1031_up; + private System.Windows.Forms.Button bt_M1031_down; + private System.Windows.Forms.Button bt_M1030; + private System.Windows.Forms.Button bt_M1029; + private System.Windows.Forms.GroupBox groupBox1; + } +} \ No newline at end of file diff --git a/SLC1-N/Form_PLCcontrol.cs b/SLC1-N/Form_PLCcontrol.cs new file mode 100644 index 0000000..0f1cd36 --- /dev/null +++ b/SLC1-N/Form_PLCcontrol.cs @@ -0,0 +1,178 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class Form_PLCcontrol : Form + { + public delegate void MySignalHandler(int msg, bool mode); // 声明信号 + public event MySignalHandler Signal_PLC_WriteCoil; + + public Form_PLCcontrol() + { + InitializeComponent(); + } + + private void Form_PLCcontrol_Load(object sender, EventArgs e) + { + + } + + // CH1 滑轨伸出 + private void bt_M1020_MouseDown(object sender, MouseEventArgs e) + { + bt_M1020.BackColor = Color.DodgerBlue; + bt_M1020.ForeColor = Color.White; + Signal_PLC_WriteCoil?.Invoke(1020, true); + } + private void bt_M1020_MouseUp(object sender, MouseEventArgs e) + { + bt_M1020.BackColor = Color.LightGray; + bt_M1020.ForeColor = Color.Black; + Signal_PLC_WriteCoil?.Invoke(1020, false); + } + // CH1 滑轨缩回 + private void bt_M1021_MouseDown(object sender, MouseEventArgs e) + { + bt_M1021.BackColor = Color.DodgerBlue; + bt_M1021.ForeColor = Color.White; + Signal_PLC_WriteCoil?.Invoke(1021, true); + } + private void bt_M1021_MouseUp(object sender, MouseEventArgs e) + { + bt_M1021.BackColor = Color.LightGray; + bt_M1021.ForeColor = Color.Black; + Signal_PLC_WriteCoil?.Invoke(1021, false); + } + // CH1 气缸下压/上升 + private void bt_M1022_down_Click(object sender, EventArgs e) + { + Signal_PLC_WriteCoil?.Invoke(1022, true); + } + private void bt_M1022_up_Click(object sender, EventArgs e) + { + Signal_PLC_WriteCoil?.Invoke(1022, false); + } + + // CH2 滑轨伸出 + private void bt_M1023_MouseDown(object sender, MouseEventArgs e) + { + bt_M1023.BackColor = Color.DodgerBlue; + bt_M1023.ForeColor = Color.White; + Signal_PLC_WriteCoil?.Invoke(1023, true); + } + private void bt_M1023_MouseUp(object sender, MouseEventArgs e) + { + bt_M1023.BackColor = Color.LightGray; + bt_M1023.ForeColor = Color.Black; + Signal_PLC_WriteCoil?.Invoke(1023, false); + } + // CH2 滑轨缩回 + private void bt_M1024_MouseDown(object sender, MouseEventArgs e) + { + bt_M1024.BackColor = Color.DodgerBlue; + bt_M1024.ForeColor = Color.White; + Signal_PLC_WriteCoil?.Invoke(1024, true); + } + private void bt_M1024_MouseUp(object sender, MouseEventArgs e) + { + bt_M1024.BackColor = Color.LightGray; + bt_M1024.ForeColor = Color.Black; + Signal_PLC_WriteCoil?.Invoke(1024, false); + } + // CH2 气缸下压/上升 + private void bt_M1025_down_Click(object sender, EventArgs e) + { + Signal_PLC_WriteCoil?.Invoke(1025, true); + } + private void bt_M1025_up_Click(object sender, EventArgs e) + { + Signal_PLC_WriteCoil?.Invoke(1025, false); + } + + // CH3 滑轨伸出 + private void bt_M1026_MouseDown(object sender, MouseEventArgs e) + { + bt_M1026.BackColor = Color.DodgerBlue; + bt_M1026.ForeColor = Color.White; + Signal_PLC_WriteCoil?.Invoke(1026, true); + } + private void bt_M1026_MouseUp(object sender, MouseEventArgs e) + { + bt_M1026.BackColor = Color.LightGray; + bt_M1026.ForeColor = Color.Black; + Signal_PLC_WriteCoil?.Invoke(1026, false); + } + // CH3 滑轨缩回 + private void bt_M1027_MouseDown(object sender, MouseEventArgs e) + { + bt_M1027.BackColor = Color.DodgerBlue; + bt_M1027.ForeColor = Color.White; + Signal_PLC_WriteCoil?.Invoke(1027, true); + } + private void bt_M1027_MouseUp(object sender, MouseEventArgs e) + { + bt_M1027.BackColor = Color.LightGray; + bt_M1027.ForeColor = Color.Black; + Signal_PLC_WriteCoil?.Invoke(1027, false); + } + // CH3 气缸下压/上升 + private void bt_M1028_down_Click(object sender, EventArgs e) + { + Signal_PLC_WriteCoil?.Invoke(1028, true); + } + private void bt_M1028_up_Click(object sender, EventArgs e) + { + Signal_PLC_WriteCoil?.Invoke(1028, false); + } + + // CH4 滑轨伸出 + private void bt_M1029_MouseDown(object sender, MouseEventArgs e) + { + bt_M1029.BackColor = Color.DodgerBlue; + bt_M1029.ForeColor = Color.White; + Signal_PLC_WriteCoil?.Invoke(1029, true); + } + private void bt_M1029_MouseUp(object sender, MouseEventArgs e) + { + bt_M1029.BackColor = Color.LightGray; + bt_M1029.ForeColor = Color.Black; + Signal_PLC_WriteCoil?.Invoke(1029, false); + } + // CH4 滑轨缩回 + private void bt_M1030_MouseDown(object sender, MouseEventArgs e) + { + bt_M1030.BackColor = Color.DodgerBlue; + bt_M1030.ForeColor = Color.White; + Signal_PLC_WriteCoil?.Invoke(1030, true); + } + private void bt_M1030_MouseUp(object sender, MouseEventArgs e) + { + bt_M1030.BackColor = Color.LightGray; + bt_M1030.ForeColor = Color.Black; + Signal_PLC_WriteCoil?.Invoke(1030, false); + } + // CH4 气缸下压/上升 + private void bt_M1031_down_Click(object sender, EventArgs e) + { + Signal_PLC_WriteCoil?.Invoke(1031, true); + } + private void bt_M1031_up_Click(object sender, EventArgs e) + { + Signal_PLC_WriteCoil?.Invoke(1031, false); + } + + // 窗口关闭 + private void Form_PLCcontrol_FormClosing(object sender, FormClosingEventArgs e) + { + Signal_PLC_WriteCoil = null; + } + } +} diff --git a/SLC1-N/Form_PLCcontrol.resx b/SLC1-N/Form_PLCcontrol.resx new file mode 100644 index 0000000..8951e3d --- /dev/null +++ b/SLC1-N/Form_PLCcontrol.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAACq + qnqHeoqqgAAAAAAAAAAAAAAAAAAACqiAAAAAAAAAeqgAAAAAAAAAAAAAAAAKqAAAAAAAAAAAAAqoAAAA + AAAAAAAAAAegAAAAAAAAAAAAAAAIoAAAAAAAAAAAAKcAAAAAAAAAAAAAAAAACqAAAAAAAAAACgAIenqq + qqqqqqqqqqAAAIoAAAAAAAAAoAAAAKqqqqqqqqqqqqgAAAigAAAAAAAKAAAAiqqqqqqqqqqqqqoAAACK + AAAAAAB3AAAAeHiqqqqqqqqqqqoAAAAKAAAAAACgAAAAAAqqqqqqqqqqqqoAAAAAoAAAAAqAAAAAAKqq + qqqqoAAAAAAAAAAAgAAAAAoAAAAAAAAIqqqqpwAAAAAAAAAACgAAAAoAAAAAAAAKqqqqqgAAAAAAAAAA + CgAAAAgAAAAAAAiqqqqqqqAAAAAAAAAABwAAAAoAAAAAAAAACKqqqqAAAAAAAAAACgAAAAgAAAAAAAAA + qqqqqqgAAAAAAAAACgAAAAoAAAAAAAAKqqqqqqoAAAAAAAAACgAAAAoAAAAAAAAAAAqqqqpwAAAAAAAA + CgAAAAoAAAAAAAAAAKqqqqqgAAAAAAAAiAAAAACAAAAAAAAAB6iqqqqoAAAAAAAAoAAAAACgAAAAAAAA + AACKqqqqAAAAAAAIoAAAAAAKAAAAAAAAAAqqqqqqgAAAAAAKAAAAAAAAoAAAAAAAAIqKiqqqoAAAAACg + AAAAAAAAigAAAAAAAAAAqqqqqAAAAAoAAAAAAAAACKAAAAAAAAAKqqqqqgAAAKAAAAAAAAAAAAqAAAAA + AAAAAAAAAAAAqgAAAAAAAAAAAACqgAAAAAAAAAAAAAB6gAAAAAAAAAAAAAAAeqAAAAAAAAAAAKqAAAAA + AAAAAAAAAAAAAAenoAAAAAB6qAAAAAAAAAAAAAAAAAAAAAAAinqqqqhwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////P///AAD//8AAf/8AAP/+H/8P/wAA//j//+P/ + AAD/5///+f8AAP/P///+fwAA/7gAAB8/AAD/fwAAD58AAP78AAAPzwAA/PwAAA/vAAD9/4AAD/cAAPn/ + AB//9wAA+//gD//7AAD7/+AP//sAAPv/gAf/+wAA+//4B//7AAD7//AD//sAAPv/4AP/+wAA+//+Af/7 + AAD7//wB//MAAP3/+AD/9wAA/f//AP/nAAD+//4Af+8AAP9//AB/3wAA/z//wD+/AAD/n/+AP38AAP/n + ///8/wAA//H///H/AAD//H//x/8AAP//h/w//wAA///wAf//AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAACKqAAAenAAAAAAAAAAAACoAAAAAAAAegAAAAAAAAB3AAAAAAAAAACKAAAAAA + AKAAqqqqqqqqoAAIAAAAAAoAAIqqqqqqqqoAAKAAAACAAAinqqqqqqqqAAAIAAAAoAAACqqqqqeqigAA + CgAACAAAAAiKqqoAAAAAAAAAAAoAAAAAqqqqoAAAAAAAgAAKAAAAAACqqqAAAAAAAKAACAAAAAAIqqqq + AAAAAABwAAoAAAAAAAqqqgAAAAAAcAAAAAAAAACqqqqgAAAAAAAAAHAAAAAAAKqqoAAAAAoAAAAIAAAA + AAqqqqgAAACAAAAACgAAAAAACKqqAAAIAAAAAACHAAAAAKqqqqAAoAAAAAAAAKAAAAAAAAAACAAAAAAA + AAAAdwAAAAAAigAAAAAAAAAAAAAHqKeooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////+Hj//+f/n/+f/+f/cAB7/vAAPf3gAD79+AA++/g + P//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/Ad//f/+//8/8///4B/////////////// + //////////////////8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqoAAAAAAKqoAAAAAAAAiqoA + AAAAAAAKqgAAAAAAAAiqgAAAAAAAAHqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAP//AAD//wAA//8AAP//AAD4DwAA/D8AAPw/AAD+PwAA/h8AAP8fAAD//wAA//8AAP// + AAD//wAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAAP4AAAX+ + BQAJ/wkADf4NABH/EQAW/hYAGf8ZAB3+HQAh/iEAJv4mACr+KgAt/i0AMf4xADX+NQA5/jkAPf49AEH+ + QQBF/kUAS/9LAE3+TQBR/lEAVf5VAFn+WQBe/14AYf5hAGX+ZQBp/mkAbv9uAHD/cAB1/nUAef55AH7+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFggIDhMXFxsXFxIOBgobAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFgwSIAAAAAAAAAAAAAAAAAAdEQwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMHQAA + AAAAAAAAAAAAAAAAAAAAAAAbDBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAbCAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAB0IAAAAAAAAAAAAAAAAAAAAAAAAAAwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREA + AAAAAAAAAAAAAAAAAAAACgAAACAbFgwBAQEBAQEBAQEBAQEBAQEBAQEAAAAAABsOAAAAAAAAAAAAAAAA + AAAKAAAAAAAAAAwBAQEBAQEBAQEBAQEBAQEBAQEbAAAAAAAgDgAAAAAAAAAAAAAAAA4AAAAAAAAdBAEB + AQEBAQEBAQEBAQEBAQEBAQEOAAAAAAAAGxIAAAAAAAAAAAAAGxYAAAAAAAAgICAgCgEBAQEBAQEBAQEB + AQEBAQEBAAAAAAAAAA4AAAAAAAAAAAAADAAAAAAAAAAAAAAWAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAA + AAAKAAAAAAAAAAAWHQAAAAAAAAAAAAwBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAK + AAAAAAAAAAAAAAAAACAGAQEBAQEBFgAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAOAAAAAAAAAAAAAAAA + AAgBAQEBAQEBBAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAATAAAAAAAAAAAAAAAXAQEBAQEBAQEBARYA + AAAAAAAAAAAAAAAAAAAADAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAFwEBAQEBAQYAAAAAAAAAAAAAAAAA + AAAADAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAWAQEBAQEBAQEXAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAS + AAAAAAAAAAAAAAAAAAoBBAQBAQEBAQEEAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAA + AAAAAAAOAQEBAQEBGwAAAAAAAAAAAAAAAAAAEQAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAYBAQEBAQEB + BAAAAAAAAAAAAAAAAAAbFwAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAEQwODAQBAQEBAR0AAAAAAAAAAAAA + AAAKAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAIAQBAQEBAQgAAAAAAAAAAAAAAB0WAAAAAAAAAAAA + AAoAAAAAAAAAAAAAAAAAAAARAQEBAQEBAQEdAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAMAAAAAAAAAAAA + AAAAABsbFxsRAQEBAQEKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAbEQAAAAAAAAAAAAAAAAAAAAAMAQEB + AQEBIAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAGw4AAAAAAAAAAAAAAAAAAAYBAQEBAQEBCAAAAAAAAAoA + AAAAAAAAAAAAAAAAAAAAAAAIGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCgAAAAAAAAAAAAAAAAAA + AAAAAAAAFwgdAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXDBMA + AAAAAAAAAAAAAAAAAAAAABIMGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODhIXAAAAAAAAAAAA + FxEMEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEw4IBAQECA4WIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///z///wAA///AAH//AAD//h//D/8AAP/4///j/wAA/+f///n/ + AAD/z////n8AAP+4AAAfPwAA/38AAA+fAAD+/AAAD88AAPz8AAAP7wAA/f+AAA/3AAD5/wAf//cAAPv/ + 4A//+wAA+//gD//7AAD7/4AH//sAAPv/+Af/+wAA+//wA//7AAD7/+AD//sAAPv//gH/+wAA+//8Af/z + AAD9//gA//cAAP3//wD/5wAA/v/+AH/vAAD/f/wAf98AAP8//8A/vwAA/5//gD9/AAD/5////P8AAP/x + ///x/wAA//x//8f/AAD//4f8P/8AAP//8AH//wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA/gAABf4FAAn+CQAP/g8AHv4eACv+KwAs/ywAM/8zADT/ + NAA+/j4AQv5CAEX+RQBJ/kkATP5MAFD+UABV/lUAWf9ZAF7+XgBh/mEAZf5lAGj+aABt/m0Acv5yAHX+ + dQB5/nkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkODhcAAAAAFg4O + AAAAAAAAAAAAAAAAAAAAAAAAAA8WAAAAAAAAAAAAAAAAExEAAAAAAAAAAAAAAAAAABMWAAAAAAAAAAAA + AAAAAAAAABEXAAAAAAAAAAAAAAANAAAADQQEAgQCBAIEAgQCBAAAAAAPAAAAAAAAAAAADQAAAAARAgIC + AgICAgICAgICCgAAAAAPAAAAAAAAABMAAAAAGREPBAICAgICAgICAgICAAAAAAAZAAAAAAAAFgAAAAAA + ABECAgICAgIGBwgICAgAAAAAAA8AAAAAABMAAAAAAAAAFxYFAgICAgAAAAAAAAAAAAAAAAAAAAAADgAA + AAAAAAAADwICAgICBwAAAAAAAAAAAAAADwAAAAANAAAAAAAAAAAAAAcCAgICAAAAAAAAAAAAAAANAAAA + AA0AAAAAAAAAAAAOAgICAgIHAAAAAAAAAAAAAA0AAAAADgAAAAAAAAAAAAAACgICAgIAAAAAAAAAAAAA + EwAAAAAAAAAAAAAAAAAAAA0CAgICAggAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAgICAgAAAAAA + AAAADQAAAAAAAAAXAAAAAAAAAAAADQICAgICCgAAAAAAABEAAAAAAAAAABcAAAAAAAAAAAAAABMCAgIC + AAAAAAAXAAAAAAAAAAAAABkTAAAAAAAAAAAOBAICAgQOAAAADwAAAAAAAAAAAAAAAAAOAAAAAAAAAAAA + AAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAADhMAAAAAAAAAAAAAEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAT + Dg0KCg0OEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////+Hj//+f + /n/+f/+f/cAB7/vAAPf3gAD79+AA++/gP//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/ + Ad//f/+//8/8///4B/////////////////////////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAB + AAAAAAAAAAAAAAABAAAAAQAAAAAAAAD+AAAE/wQAC/4LAAz/DAAR/hEAFf8VACP/IwA6/zoAQ/5DAFL/ + UgBb/1sAb/5vAHb+dgB5/3kAfv9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgICAgIFAAAAAAAA + AAAAAAcCAg4AAAAAAAAAAAAAAAALAwIMAAAAAAAAAAAAAAAAAAgCAwAAAAAAAAAAAAAAAAANBQIOAAAA + AAAAAAAAAAAAAAoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAPgP + AAD8PwAA/D8AAP4/AAD+HwAA/x8AAP//AAD//wAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/AEUA/wBjAP8AdgD+AIMA/wCGAP8AfAD/AHIA/wBeAP8AQAD+ + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/AAIA/wAnAP4AZgD/AKkA/wDiAP8A5QD/AMkA/wC0AP8ApQD+AJ4A/wCZAP8AnwD/ + AKgA/wC4AP8AzAD+AOkA/wDaAP8AmwD/AFwA/wAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAQAP8ATgD/AKwA/wDRAP4AuwD/AIAA/wBCAP8AIgD/ABUA/wAMAP8ABQD+ + AAIAAAAAAP8AAwD/AAYA/wANAP8AFwD+ACQA/wBMAP8AjQD/AMAA/wDTAP8AnAD+AD8A/wAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ACAD+AEQA/gC5AP4A0QD+AIcA/gA3AP4ACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABEA/gA+AP4AmwD+ + ANQA/gCmAP4AOAD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAZAP4AlgD/AOcA/wB2AP8AGQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+ACcA/wCQAP8A5gD/AH4A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD8A/wDTAP4AqwD/ACEA/wAGAP8AMAD/ + AF8A/wByAP4AcgD/AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+ + AHIA/wByAP8AcgD/AHIA/wByAP8ACwAAAAAAAAAAAP8AMQD/AMYA/wDBAP8AKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wACAP8ATAD/ANsA/wB3AP4AHwD/ + AEsA/wCHAP8AnAD/AKoA/wDSAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8ATAAAAAAAAAAAAAAAAAD/ABMA/wCYAP8AywD+ + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wA/AP8A3AD/ + AGMA/wAGAAAAAAAAAAAAAAAAAP8ACAD/AFQA/wDVAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AlAD+AAMAAAAAAAAAAAAA + AAAA/wAMAP8AhgD+AMwA/wAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ACIA/wDKAP8AfAD/AAIAAAAAAAAAAAAAAAAA/wARAP8AjgD/APIA/wD/AP4A/gD/AP8A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AzgD+ + ABQAAAAAAAAAAAAAAAAAAAAAAP8ADAD+AJkA/wC8AP8ACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD+AJ8A/gCpAP4AAwAAAAAAAAAAAAAAAAAAAAAA/gBPAP4AgAD+AIAA/gCAAP4AhAD+ + AN0A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4A+wD+ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABAA/gDJAP4AdQD+AAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ASAD/ANEA/wAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAiAP4AqwD/APkA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBCAP8A3AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AqAD/AI4A/wACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABgD/AFAA/wDRAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AHQA/wAyAP8AMgD+ADIA/wAyAP8AMgD/ADIA/wAyAP8AMgD+AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP8AuAD/AHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAWAP4A3wD/ADsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AEQA/wBTAP4AUwD/AFYA/wCDAP8A7gD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AK0A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AYAD/AL4A/wANAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBIAP4AxwD/ + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAQD/AGIA/wDkAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/APIA/wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ALwD/AMwA/wAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wBoAP4AsAD/AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAcAP4ApgD/ + APoA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wCuAP8ABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADgD/ANAA/wBDAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wB1AP4AqAD/AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAKAP4AJQD/ACYA/wAmAP8ANwD/AKEA/wD9AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wDsAP8AQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAgD/ + ANIA/wBMAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBvAP4AqwD+AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAEA/gAtAP4ArgD+APoA/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4ApQD+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABwD+ANEA/gBIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBYAP4AuwD/ABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AFMA/wDXAP8A+QD/APkA/wD5AP8A/QD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A8QD+AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AHgD/AM0A/wA4AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wApAP4A2AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wA8AP8AzQD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/gD+AJ0A/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ARwD/AMYA/wAaAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP4AzAD/AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ADQD/AHMA/wDuAP8A/gD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+APMA/wAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AkAD/AKAA/wACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AbwD/AL8A/wASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAMAP8AdgD/AMUA/wDLAP8AywD+ANIA/wD3AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wCPAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAbAP8A3wD/ + AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AGwD/AMgA/wBrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AIQA/wDxAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wDkAP8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAUA/wCOAP8ArgD/AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AFEA/gDeAP4AMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAzAP4AwwD+ + AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4AigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+AE4A/gDoAP4AKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AAYA/wB9AP8A1AD/ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ABsA/wCPAP8AngD+AJ4A/wCfAP8AvgD/APsA/wD/AP8A/wD+AP4A/wD/AP8A3wD/ACkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AQgD+ANgA/wBdAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAOAP8AmAD/AMMA/wAyAP4AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAUA/wBHAP8A1QD/AP0A/wD/AP8A/wD+AP4A/wD/AP8A/QD/ + AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wBMAP8AzgD+AHwA/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADQD/AJYA/wDNAP4AUgD/AAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AH4A/wDtAP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AN8A/wAcAAAAAAAAAAAAAAAAAP8ACwD/AGoA/wDYAP8AdQD+AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAQA/wBqAP4A4QD/ + AJwA/wAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ANQD+AHAA/wBxAP8AcQD/ + AHEA/wBxAP8AcQD+AHEA/wBxAP8AcQD/AG4A/wAmAAAAAAAAAAAA/wAqAP8ArAD/AN0A/wBMAP8AAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4AJAD/AKEA/wDnAP8AhwD/AC0A/wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wABAP8APQD+AJ4A/wDjAP8AkgD/ + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAgA/gBCAP4AqQD+ANMA/gCzAP4AXQD+AC0A/gANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gASAP4ANAD+AGsA/gC+AP4A0QD+ + AJcA/gA0AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/ADUA/wB7AP4AyAD/ + AMwA/wC/AP8AoAD/AHQA/wBVAP8APgD+ADMA/wArAP8ANAD/AEEA/wBaAP8AegD+AKcA/wDCAP8AzwD/ + AL4A/wBwAP8AKQD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD/AC8A/wBbAP8AhwD/AK8A/wDPAP8A5AD+APEA/wD1AP8A8AD/AOAA/wDJAP8AqgD+ + AIAA/wBTAP8AJQD/AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//+AB//8AAP/+AAAf/wAA//gAQAP/AAD/4D//gP8AAP/B///wfwAA/4AAAAw/AAD+AAAADh8AAPwc + AAAHDwAA/DgAAAeHAAD4eAAAB8MAAPj/AAAH4wAA+PwAAAfjAADx/AAH//EAAPH/gAf/8QAA8f8AA//x + AADx/wAD//EAAPH/wAH/8QAA8f/AAf/xAADx//wA//EAAPH/8AD/8QAA+P/gAH/jAAD4//4Af8MAAPx/ + /AB/xwAA/D/4AD+HAAD+D/8APg8AAP8H/gAcHwAA/4P+ABg/AAD/4H//wP8AAP/wD/4B/wAA//wAAAf/ + AAD//4AAP/8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA8A/gAzAP4ASwD/AFgA/gBVAP4ASQD+ + ADAA/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAEAP4ANwD+AIcA/wCzAP4AtAD+AI8A/gB1AP8AaQD+ + AGoA/gB4AP4AkgD/ALcA/gCvAP4AfwD+AC4A/wACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gADAP8ARAD+AK4A/gCWAP4AQQD/ABMA/gABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AAQD+ABYA/gBKAP4AnwD/AKYA/gA5AP4AAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD/AJsA/wCVAP8AHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AKgD/AKEA/wCMAP8ADAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ACMA/gC5AP4AUQD/AD8A/gB+AP4AuQD+ + APAA/wD2AP4A9gD+APYA/gD2AP8A9gD+APYA/gD2AP4A9gD/APYA/gD2AP4A9gD+AHkAAAAAAP4AAgD+ + AF0A/gCvAP8AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAXAP4AuAD+AC8AAAAAAAAAAAD+ + ABYA/gCfAP4A+gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+AP4A/gD+AP8A/wD+AP4A/gD+AP4AwQD/ + AAUAAAAAAAAAAAD+AEYA/wCvAP4ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD/AJwA/gBHAAAAAAAA + AAAA/wALAP4AhQD+AKoA/gCsAP8A8AD+AP4A/gD+AP4A/gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+ + AP4A/gD1AP8AHQAAAAAAAAAAAAAAAAD/AF0A/gCHAP4AAQAAAAAAAAAAAAAAAAAAAAAA/wBAAP8AlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AGgD/AKgA/wD8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDUAP8AywD/ + AMwA/wDLAP8AywD/AMsA/wBGAAAAAAAAAAAAAAAAAP8AAgD/AK0A/wAnAAAAAAAAAAAAAAAAAAAAAAD+ + AJcA/wA0AAAAAAAAAAAAAAAAAAAAAAD+AAcA/gBmAP4AjAD/AJIA/gDhAP4A/gD+AP4A/wD/AP4A/gD+ + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4ATgD+AHsAAAAAAAAAAAAA + AAAAAAAAAP4AtwD/AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP8ArQD+AP0A/gD+AP4A/gD/ + AP8A/gD+AP4A1AD+AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP4AqwAA + AAAAAAAAAAAAAAAAAAAA/gC9AP8AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD+AFAA/wBuAP4AdgD+ + ANQA/gD+AP8A/wD+AP4A/gD9AP4AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAMA/gC9AAAAAAAAAAAAAAAAAAAAAAD/ALsA/wAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AB4A/wCvAP8A/QD/AP8A/wD/AP8A/wD/AP8A/wDTAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ACAD/ALkAAAAAAAAAAAAAAAAAAAAAAP4ArwD/ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ANwD+AFAA/gBWAP4AwwD/AP8A/gD+AP4A/gD+AP0A/wBXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/gAoAP4AnAAAAAAAAAAAAAAAAAAAAAAA/gB6AP8AVgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AIwD+ALgA/gD9AP8A/wD+AP4A/gD+AP4A/gD/AMgA/gAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AHIA/gBcAAAAAAAAAAAAAAAAAAAAAAD+AB8A/wCzAP4ACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAcAP4AMgD+ADsA/wCrAP4A/gD+AP4A/gD+AP8A/QD+ + AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAQAP4AuwD+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AGUA/wCJAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAkAP8AvQD/AP4A/wD/AP8A/wD/ + AP8A/wD/AP8AwQD/AAUAAAAAAAAAAAAAAAAAAAAAAP8ABgD/AJ8A/wBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABQD+AIsA/gB2AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAkA/gAUAP8AIAD+ + AJcA/gD8AP4A/gD/AP8A/gD6AP4ARwAAAAAAAAAAAAAAAAD+AAkA/gCMAP8AdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ABQD+AIQA/gCaAP8AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + ACAA/wC0AP4A9QD+APUA/gD1AP8A9gD+APUA/gCyAAAAAAAAAAAA/gAeAP4AqgD+AG8A/wADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AEkA/wC5AP4AbgD+ABQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAbAP8AfQD+ALUA/gA3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAwA/wBkAP8AswD/ + AJgA/wBVAP8AJQD/ABEA/wAGAP8AAQD/AAIA/wAIAP8AEwD/ACgA/wBeAP8AngD/AK8A/wBVAP8ACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/gAFAP4AMAD/AHAA/gCgAP4AsAD+ALoA/wDAAP4AwAD+ALkA/gCvAP8AnAD+AGcA/gArAP4AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////+Af//4AAf/4D8B/8P/8P+AAAh/GA + AGPjAABx58AAceeAH/nn4A/558AP+efwB/nn8Af55/gD+eP4A/Hx/AHj8PwBx/h+AYf+H/4f/wAAP//A + AP////////////////////////////////8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/ACsA/wAeAP8AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD4A/gBlAP8AXgD+AEEA/wA1AP4AQgD/ + AF8A/gBmAP8AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/AG4A/wBcAP8AagD/AHsA/wB7AP8AewD/ + AHsA/wB7AP8AWwD/ADMA/wBpAP8ABgAAAAAAAAAAAAAAAAD/AGwA/gAMAP8AKQD+ALwA/wD7AP4A/gD/ + AP8A/gD+AP8A/wD+AO0A/wAIAP4AEQD/AGcAAAAAAAAAAAD/ADYA/wAzAAAAAAD/AAEA/wBtAP8A3AD/ + AP8A/wD/AP8AgQD/AGYA/wBlAP8AEQAAAAAA/wA/AP8AKAAAAAAA/gBdAP8ABAAAAAAAAAAAAP4AGwD/ + AKQA/gD0AP8A/wD+AJAAAAAAAAAAAAAAAAAAAAAAAP8ABwD+AFoAAAAAAP8AWgD/AAYAAAAAAAAAAAAA + AAAA/wBVAP8AxQD/AP8A/wDzAP8AFwAAAAAAAAAAAAAAAAD/AAwA/wBVAAAAAAD+ACYA/wBFAAAAAAAA + AAAAAAAAAP8ADwD+AIkA/wDqAP4A/gD/AIYAAAAAAAAAAAAAAAAA/wBPAP4AGwAAAAAAAAAAAP8AXwD/ + AB8AAAAAAAAAAAAAAAAA/wBAAP8ArQD/AP4A/wDuAP8AEwAAAAAA/wAnAP8AWAAAAAAAAAAAAAAAAAD/ + AAEA/gBaAP8ATwD+AAUAAAAAAP4ACAD/AGoA/gB6AP8AegD+ADMA/wBUAP4AVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/ABwA/wBgAP8AYgD/AGEA/wBhAP8AYQD/AGIA/wBfAP8AFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA/B8AAPAHAADAAQAAwAEAAJAEAACYPAAAnBwAAJwcAADOCQAAwgMAAPAH + AAD//wAA//8AAP//AAA= + + + \ No newline at end of file diff --git a/SLC1-N/Form_RootSet.Designer.cs b/SLC1-N/Form_RootSet.Designer.cs new file mode 100644 index 0000000..5135b92 --- /dev/null +++ b/SLC1-N/Form_RootSet.Designer.cs @@ -0,0 +1,517 @@ +namespace SLC1_N +{ + partial class Form_RootSet + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form_RootSet)); + this.label3 = new System.Windows.Forms.Label(); + this.chk_ch1AutoConnect = new System.Windows.Forms.CheckBox(); + this.chk_ch2AutoConnect = new System.Windows.Forms.CheckBox(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.bt_CH4zhanhao = new System.Windows.Forms.Button(); + this.bt_CH3zhanhao = new System.Windows.Forms.Button(); + this.label7 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.tb_CH4zhanhao = new System.Windows.Forms.TextBox(); + this.tb_CH3zhanhao = new System.Windows.Forms.TextBox(); + this.bt_CH2zhanhao = new System.Windows.Forms.Button(); + this.bt_CH1zhanhao = new System.Windows.Forms.Button(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.tb_CH2zhanhao = new System.Windows.Forms.TextBox(); + this.tb_CH1zhanhao = new System.Windows.Forms.TextBox(); + this.chk_InfoEnabled = new System.Windows.Forms.CheckBox(); + this.chk_DebugEnabled = new System.Windows.Forms.CheckBox(); + this.chk_ErrorEnabled = new System.Windows.Forms.CheckBox(); + this.chk_WarningEnabled = new System.Windows.Forms.CheckBox(); + this.chk_XXXEnabled = new System.Windows.Forms.CheckBox(); + this.bt_logmode_save = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label6 = new System.Windows.Forms.Label(); + this.bt_ClearLog = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.tb_logday = new System.Windows.Forms.TextBox(); + this.rbt_SerialPort = new System.Windows.Forms.RadioButton(); + this.rbt_TCP = new System.Windows.Forms.RadioButton(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.bt_saomamode = new System.Windows.Forms.Button(); + this.chk_ch4AutoConnect = new System.Windows.Forms.CheckBox(); + this.chk_ch3AutoConnect = new System.Windows.Forms.CheckBox(); + this.groupBox2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.SuspendLayout(); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label3.Location = new System.Drawing.Point(19, 377); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(87, 16); + this.label3.TabIndex = 2; + this.label3.Text = "仪器重连:"; + // + // chk_ch1AutoConnect + // + this.chk_ch1AutoConnect.AutoSize = true; + this.chk_ch1AutoConnect.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chk_ch1AutoConnect.Location = new System.Drawing.Point(117, 377); + this.chk_ch1AutoConnect.Name = "chk_ch1AutoConnect"; + this.chk_ch1AutoConnect.Size = new System.Drawing.Size(114, 20); + this.chk_ch1AutoConnect.TabIndex = 354; + this.chk_ch1AutoConnect.Text = "CH1自动重连"; + this.chk_ch1AutoConnect.UseVisualStyleBackColor = true; + this.chk_ch1AutoConnect.CheckedChanged += new System.EventHandler(this.chk_ch1AutoConnect_CheckedChanged); + // + // chk_ch2AutoConnect + // + this.chk_ch2AutoConnect.AutoSize = true; + this.chk_ch2AutoConnect.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chk_ch2AutoConnect.Location = new System.Drawing.Point(239, 377); + this.chk_ch2AutoConnect.Name = "chk_ch2AutoConnect"; + this.chk_ch2AutoConnect.Size = new System.Drawing.Size(114, 20); + this.chk_ch2AutoConnect.TabIndex = 355; + this.chk_ch2AutoConnect.Text = "CH2自动重连"; + this.chk_ch2AutoConnect.UseVisualStyleBackColor = true; + this.chk_ch2AutoConnect.CheckedChanged += new System.EventHandler(this.chk_ch2AutoConnect_CheckedChanged); + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.bt_CH4zhanhao); + this.groupBox2.Controls.Add(this.bt_CH3zhanhao); + this.groupBox2.Controls.Add(this.label7); + this.groupBox2.Controls.Add(this.label8); + this.groupBox2.Controls.Add(this.tb_CH4zhanhao); + this.groupBox2.Controls.Add(this.tb_CH3zhanhao); + this.groupBox2.Controls.Add(this.bt_CH2zhanhao); + this.groupBox2.Controls.Add(this.bt_CH1zhanhao); + this.groupBox2.Controls.Add(this.label4); + this.groupBox2.Controls.Add(this.label5); + this.groupBox2.Controls.Add(this.tb_CH2zhanhao); + this.groupBox2.Controls.Add(this.tb_CH1zhanhao); + this.groupBox2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBox2.Location = new System.Drawing.Point(21, 444); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(332, 170); + this.groupBox2.TabIndex = 357; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "改站号"; + // + // bt_CH4zhanhao + // + this.bt_CH4zhanhao.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_CH4zhanhao.Location = new System.Drawing.Point(219, 133); + this.bt_CH4zhanhao.Name = "bt_CH4zhanhao"; + this.bt_CH4zhanhao.Size = new System.Drawing.Size(75, 23); + this.bt_CH4zhanhao.TabIndex = 364; + this.bt_CH4zhanhao.Text = "修改"; + this.bt_CH4zhanhao.UseVisualStyleBackColor = true; + this.bt_CH4zhanhao.Click += new System.EventHandler(this.bt_CH4zhanhao_Click); + // + // bt_CH3zhanhao + // + this.bt_CH3zhanhao.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_CH3zhanhao.Location = new System.Drawing.Point(219, 97); + this.bt_CH3zhanhao.Name = "bt_CH3zhanhao"; + this.bt_CH3zhanhao.Size = new System.Drawing.Size(75, 23); + this.bt_CH3zhanhao.TabIndex = 363; + this.bt_CH3zhanhao.Text = "修改"; + this.bt_CH3zhanhao.UseVisualStyleBackColor = true; + this.bt_CH3zhanhao.Click += new System.EventHandler(this.bt_CH3zhanhao_Click); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label7.Location = new System.Drawing.Point(57, 137); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(63, 16); + this.label7.TabIndex = 362; + this.label7.Text = "通道4:"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label8.Location = new System.Drawing.Point(57, 98); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(63, 16); + this.label8.TabIndex = 361; + this.label8.Text = "通道3:"; + // + // tb_CH4zhanhao + // + this.tb_CH4zhanhao.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_CH4zhanhao.Location = new System.Drawing.Point(125, 135); + this.tb_CH4zhanhao.Name = "tb_CH4zhanhao"; + this.tb_CH4zhanhao.Size = new System.Drawing.Size(52, 26); + this.tb_CH4zhanhao.TabIndex = 360; + // + // tb_CH3zhanhao + // + this.tb_CH3zhanhao.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_CH3zhanhao.Location = new System.Drawing.Point(125, 96); + this.tb_CH3zhanhao.Name = "tb_CH3zhanhao"; + this.tb_CH3zhanhao.Size = new System.Drawing.Size(52, 26); + this.tb_CH3zhanhao.TabIndex = 359; + // + // bt_CH2zhanhao + // + this.bt_CH2zhanhao.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_CH2zhanhao.Location = new System.Drawing.Point(218, 57); + this.bt_CH2zhanhao.Name = "bt_CH2zhanhao"; + this.bt_CH2zhanhao.Size = new System.Drawing.Size(75, 23); + this.bt_CH2zhanhao.TabIndex = 358; + this.bt_CH2zhanhao.Text = "修改"; + this.bt_CH2zhanhao.UseVisualStyleBackColor = true; + this.bt_CH2zhanhao.Click += new System.EventHandler(this.bt_CH2zhanhao_Click); + // + // bt_CH1zhanhao + // + this.bt_CH1zhanhao.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_CH1zhanhao.Location = new System.Drawing.Point(218, 21); + this.bt_CH1zhanhao.Name = "bt_CH1zhanhao"; + this.bt_CH1zhanhao.Size = new System.Drawing.Size(75, 23); + this.bt_CH1zhanhao.TabIndex = 357; + this.bt_CH1zhanhao.Text = "修改"; + this.bt_CH1zhanhao.UseVisualStyleBackColor = true; + this.bt_CH1zhanhao.Click += new System.EventHandler(this.bt_CH1zhanhao_Click); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label4.Location = new System.Drawing.Point(56, 61); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(63, 16); + this.label4.TabIndex = 356; + this.label4.Text = "通道2:"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label5.Location = new System.Drawing.Point(56, 22); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(63, 16); + this.label5.TabIndex = 355; + this.label5.Text = "通道1:"; + // + // tb_CH2zhanhao + // + this.tb_CH2zhanhao.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_CH2zhanhao.Location = new System.Drawing.Point(124, 59); + this.tb_CH2zhanhao.Name = "tb_CH2zhanhao"; + this.tb_CH2zhanhao.Size = new System.Drawing.Size(52, 26); + this.tb_CH2zhanhao.TabIndex = 1; + // + // tb_CH1zhanhao + // + this.tb_CH1zhanhao.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_CH1zhanhao.Location = new System.Drawing.Point(124, 20); + this.tb_CH1zhanhao.Name = "tb_CH1zhanhao"; + this.tb_CH1zhanhao.Size = new System.Drawing.Size(52, 26); + this.tb_CH1zhanhao.TabIndex = 0; + // + // chk_InfoEnabled + // + this.chk_InfoEnabled.AutoSize = true; + this.chk_InfoEnabled.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chk_InfoEnabled.Location = new System.Drawing.Point(29, 47); + this.chk_InfoEnabled.Name = "chk_InfoEnabled"; + this.chk_InfoEnabled.Size = new System.Drawing.Size(90, 20); + this.chk_InfoEnabled.TabIndex = 359; + this.chk_InfoEnabled.Text = "LOG_INFO"; + this.chk_InfoEnabled.UseVisualStyleBackColor = true; + // + // chk_DebugEnabled + // + this.chk_DebugEnabled.AutoSize = true; + this.chk_DebugEnabled.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chk_DebugEnabled.Location = new System.Drawing.Point(29, 25); + this.chk_DebugEnabled.Name = "chk_DebugEnabled"; + this.chk_DebugEnabled.Size = new System.Drawing.Size(98, 20); + this.chk_DebugEnabled.TabIndex = 358; + this.chk_DebugEnabled.Text = "LOG_DEBUG"; + this.chk_DebugEnabled.UseVisualStyleBackColor = true; + // + // chk_ErrorEnabled + // + this.chk_ErrorEnabled.AutoSize = true; + this.chk_ErrorEnabled.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chk_ErrorEnabled.Location = new System.Drawing.Point(29, 91); + this.chk_ErrorEnabled.Name = "chk_ErrorEnabled"; + this.chk_ErrorEnabled.Size = new System.Drawing.Size(98, 20); + this.chk_ErrorEnabled.TabIndex = 361; + this.chk_ErrorEnabled.Text = "LOG_ERROR"; + this.chk_ErrorEnabled.UseVisualStyleBackColor = true; + // + // chk_WarningEnabled + // + this.chk_WarningEnabled.AutoSize = true; + this.chk_WarningEnabled.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chk_WarningEnabled.Location = new System.Drawing.Point(29, 69); + this.chk_WarningEnabled.Name = "chk_WarningEnabled"; + this.chk_WarningEnabled.Size = new System.Drawing.Size(114, 20); + this.chk_WarningEnabled.TabIndex = 360; + this.chk_WarningEnabled.Text = "LOG_WARNING"; + this.chk_WarningEnabled.UseVisualStyleBackColor = true; + // + // chk_XXXEnabled + // + this.chk_XXXEnabled.AutoSize = true; + this.chk_XXXEnabled.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chk_XXXEnabled.Location = new System.Drawing.Point(29, 113); + this.chk_XXXEnabled.Name = "chk_XXXEnabled"; + this.chk_XXXEnabled.Size = new System.Drawing.Size(82, 20); + this.chk_XXXEnabled.TabIndex = 362; + this.chk_XXXEnabled.Text = "LOG_XXX"; + this.chk_XXXEnabled.UseVisualStyleBackColor = true; + // + // bt_logmode_save + // + this.bt_logmode_save.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_logmode_save.Location = new System.Drawing.Point(218, 91); + this.bt_logmode_save.Name = "bt_logmode_save"; + this.bt_logmode_save.Size = new System.Drawing.Size(75, 38); + this.bt_logmode_save.TabIndex = 359; + this.bt_logmode_save.Text = "保存"; + this.bt_logmode_save.UseVisualStyleBackColor = true; + this.bt_logmode_save.Click += new System.EventHandler(this.bt_logmode_save_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.bt_ClearLog); + this.groupBox1.Controls.Add(this.chk_InfoEnabled); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.bt_logmode_save); + this.groupBox1.Controls.Add(this.tb_logday); + this.groupBox1.Controls.Add(this.chk_XXXEnabled); + this.groupBox1.Controls.Add(this.chk_DebugEnabled); + this.groupBox1.Controls.Add(this.chk_ErrorEnabled); + this.groupBox1.Controls.Add(this.chk_WarningEnabled); + this.groupBox1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBox1.Location = new System.Drawing.Point(21, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(332, 204); + this.groupBox1.TabIndex = 363; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "日志"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label6.Location = new System.Drawing.Point(122, 157); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(55, 16); + this.label6.TabIndex = 363; + this.label6.Text = "天日志"; + // + // bt_ClearLog + // + this.bt_ClearLog.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_ClearLog.Location = new System.Drawing.Point(218, 148); + this.bt_ClearLog.Name = "bt_ClearLog"; + this.bt_ClearLog.Size = new System.Drawing.Size(75, 34); + this.bt_ClearLog.TabIndex = 361; + this.bt_ClearLog.Text = "清理"; + this.bt_ClearLog.UseVisualStyleBackColor = true; + this.bt_ClearLog.Click += new System.EventHandler(this.bt_ClearLog_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label2.Location = new System.Drawing.Point(27, 157); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(55, 16); + this.label2.TabIndex = 360; + this.label2.Text = "保留近"; + // + // tb_logday + // + this.tb_logday.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tb_logday.Location = new System.Drawing.Point(85, 152); + this.tb_logday.Name = "tb_logday"; + this.tb_logday.Size = new System.Drawing.Size(34, 26); + this.tb_logday.TabIndex = 359; + this.tb_logday.Text = "30"; + // + // rbt_SerialPort + // + this.rbt_SerialPort.AutoSize = true; + this.rbt_SerialPort.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.rbt_SerialPort.Location = new System.Drawing.Point(28, 32); + this.rbt_SerialPort.Name = "rbt_SerialPort"; + this.rbt_SerialPort.Size = new System.Drawing.Size(57, 20); + this.rbt_SerialPort.TabIndex = 364; + this.rbt_SerialPort.TabStop = true; + this.rbt_SerialPort.Text = "串口"; + this.rbt_SerialPort.UseVisualStyleBackColor = true; + // + // rbt_TCP + // + this.rbt_TCP.AutoSize = true; + this.rbt_TCP.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.rbt_TCP.Location = new System.Drawing.Point(28, 61); + this.rbt_TCP.Name = "rbt_TCP"; + this.rbt_TCP.Size = new System.Drawing.Size(57, 20); + this.rbt_TCP.TabIndex = 365; + this.rbt_TCP.TabStop = true; + this.rbt_TCP.Text = "网口"; + this.rbt_TCP.UseVisualStyleBackColor = true; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label1.Location = new System.Drawing.Point(6, 102); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(161, 12); + this.label1.TabIndex = 366; + this.label1.Text = "备注:更换扫码枪需重启软件"; + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.bt_saomamode); + this.groupBox3.Controls.Add(this.label1); + this.groupBox3.Controls.Add(this.rbt_SerialPort); + this.groupBox3.Controls.Add(this.rbt_TCP); + this.groupBox3.Enabled = false; + this.groupBox3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBox3.Location = new System.Drawing.Point(21, 222); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(332, 123); + this.groupBox3.TabIndex = 367; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "扫码枪选用"; + // + // bt_saomamode + // + this.bt_saomamode.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.bt_saomamode.Location = new System.Drawing.Point(218, 61); + this.bt_saomamode.Name = "bt_saomamode"; + this.bt_saomamode.Size = new System.Drawing.Size(75, 38); + this.bt_saomamode.TabIndex = 363; + this.bt_saomamode.Text = "保存"; + this.bt_saomamode.UseVisualStyleBackColor = true; + this.bt_saomamode.Click += new System.EventHandler(this.bt_saomamode_Click); + // + // chk_ch4AutoConnect + // + this.chk_ch4AutoConnect.AutoSize = true; + this.chk_ch4AutoConnect.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chk_ch4AutoConnect.Location = new System.Drawing.Point(239, 403); + this.chk_ch4AutoConnect.Name = "chk_ch4AutoConnect"; + this.chk_ch4AutoConnect.Size = new System.Drawing.Size(114, 20); + this.chk_ch4AutoConnect.TabIndex = 369; + this.chk_ch4AutoConnect.Text = "CH4自动重连"; + this.chk_ch4AutoConnect.UseVisualStyleBackColor = true; + this.chk_ch4AutoConnect.CheckedChanged += new System.EventHandler(this.chk_ch4AutoConnect_CheckedChanged); + // + // chk_ch3AutoConnect + // + this.chk_ch3AutoConnect.AutoSize = true; + this.chk_ch3AutoConnect.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chk_ch3AutoConnect.Location = new System.Drawing.Point(117, 403); + this.chk_ch3AutoConnect.Name = "chk_ch3AutoConnect"; + this.chk_ch3AutoConnect.Size = new System.Drawing.Size(114, 20); + this.chk_ch3AutoConnect.TabIndex = 368; + this.chk_ch3AutoConnect.Text = "CH3自动重连"; + this.chk_ch3AutoConnect.UseVisualStyleBackColor = true; + this.chk_ch3AutoConnect.CheckedChanged += new System.EventHandler(this.chk_ch3AutoConnect_CheckedChanged); + // + // Form_RootSet + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(380, 656); + this.Controls.Add(this.chk_ch4AutoConnect); + this.Controls.Add(this.chk_ch3AutoConnect); + this.Controls.Add(this.groupBox3); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.chk_ch2AutoConnect); + this.Controls.Add(this.chk_ch1AutoConnect); + this.Controls.Add(this.label3); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Form_RootSet"; + this.Text = "Root"; + this.Load += new System.EventHandler(this.Form_RootSet_Load); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.Label label3; + private System.Windows.Forms.CheckBox chk_ch1AutoConnect; + private System.Windows.Forms.CheckBox chk_ch2AutoConnect; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Button bt_CH2zhanhao; + private System.Windows.Forms.Button bt_CH1zhanhao; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox tb_CH2zhanhao; + private System.Windows.Forms.TextBox tb_CH1zhanhao; + private System.Windows.Forms.CheckBox chk_InfoEnabled; + private System.Windows.Forms.CheckBox chk_DebugEnabled; + private System.Windows.Forms.CheckBox chk_ErrorEnabled; + private System.Windows.Forms.CheckBox chk_WarningEnabled; + private System.Windows.Forms.CheckBox chk_XXXEnabled; + private System.Windows.Forms.Button bt_logmode_save; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton rbt_SerialPort; + private System.Windows.Forms.RadioButton rbt_TCP; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.Button bt_saomamode; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Button bt_ClearLog; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox tb_logday; + private System.Windows.Forms.Button bt_CH4zhanhao; + private System.Windows.Forms.Button bt_CH3zhanhao; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox tb_CH4zhanhao; + private System.Windows.Forms.TextBox tb_CH3zhanhao; + private System.Windows.Forms.CheckBox chk_ch4AutoConnect; + private System.Windows.Forms.CheckBox chk_ch3AutoConnect; + } +} \ No newline at end of file diff --git a/SLC1-N/Form_RootSet.cs b/SLC1-N/Form_RootSet.cs new file mode 100644 index 0000000..9a6d5b6 --- /dev/null +++ b/SLC1-N/Form_RootSet.cs @@ -0,0 +1,154 @@ +using Sunny.UI; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class Form_RootSet : Form + { + public Form_RootSet() + { + InitializeComponent(); + } + + private void Form_RootSet_Load(object sender, EventArgs e) + { + chk_ch1AutoConnect.Checked = Form1.f1.ch1AutoConnect; + chk_ch2AutoConnect.Checked = Form1.f1.ch2AutoConnect; + chk_ch3AutoConnect.Checked = Form1.f1.ch3AutoConnect; + chk_ch4AutoConnect.Checked = Form1.f1.ch4AutoConnect; + + var jsconfig = new JsonConfig("config.json"); + + // 日志使能 + chk_DebugEnabled.Checked = jsconfig.GetValue("IsDebugEnabled", false); + chk_ErrorEnabled.Checked = jsconfig.GetValue("IsErrorEnabled", false); + chk_InfoEnabled.Checked = jsconfig.GetValue("IsInfoEnabled", false); + chk_WarningEnabled.Checked = jsconfig.GetValue("IsWarningEnabled", false); + chk_XXXEnabled.Checked = jsconfig.GetValue("IsXXXEnabled", false); + + string saoma = jsconfig.GetValue("CodeScanner", "SerialPort"); + if (saoma == "SerialPort") + { + rbt_SerialPort.Checked = true; + } + else if (saoma == "TCP") + { + rbt_TCP.Checked = true; + } + } + + // 仪器自动连接 + private void chk_ch1AutoConnect_CheckedChanged(object sender, EventArgs e) + { + var jsconfig = new JsonConfig("config.json"); + jsconfig.SetValue("ch1AutoConnect", chk_ch1AutoConnect.Checked); + Form1.f1.ch1AutoConnect = chk_ch1AutoConnect.Checked; + } + // 仪器自动连接 + private void chk_ch2AutoConnect_CheckedChanged(object sender, EventArgs e) + { + var jsconfig = new JsonConfig("config.json"); + jsconfig.SetValue("ch2AutoConnect", chk_ch2AutoConnect.Checked); + Form1.f1.ch2AutoConnect = chk_ch2AutoConnect.Checked; + } + // 仪器自动连接 + private void chk_ch3AutoConnect_CheckedChanged(object sender, EventArgs e) + { + var jsconfig = new JsonConfig("config.json"); + jsconfig.SetValue("ch3AutoConnect", chk_ch3AutoConnect.Checked); + Form1.f1.ch3AutoConnect = chk_ch3AutoConnect.Checked; + } + // 仪器自动连接 + private void chk_ch4AutoConnect_CheckedChanged(object sender, EventArgs e) + { + var jsconfig = new JsonConfig("config.json"); + jsconfig.SetValue("ch4AutoConnect", chk_ch4AutoConnect.Checked); + Form1.f1.ch4AutoConnect = chk_ch4AutoConnect.Checked; + } + + // 改站号 + private void bt_CH1zhanhao_Click(object sender, EventArgs e) + { + if (tb_CH1zhanhao.Text.IsNullOrEmpty()) + return; + int zhanhao = Convert.ToUInt16(tb_CH1zhanhao.Text); + Form1.f1.LL28CH1client?.writeRegister(1076, zhanhao); + } + // 改站号 + private void bt_CH2zhanhao_Click(object sender, EventArgs e) + { + if (tb_CH2zhanhao.Text.IsNullOrEmpty()) + return; + int zhanhao = Convert.ToUInt16(tb_CH2zhanhao.Text); + Form1.f1.LL28CH2client?.writeRegister(1076, zhanhao); + } + // 改站号 + private void bt_CH3zhanhao_Click(object sender, EventArgs e) + { + if (tb_CH3zhanhao.Text.IsNullOrEmpty()) + return; + int zhanhao = Convert.ToUInt16(tb_CH3zhanhao.Text); + Form1.f1.LL28CH3client?.writeRegister(1076, zhanhao); + } + // 改站号 + private void bt_CH4zhanhao_Click(object sender, EventArgs e) + { + if (tb_CH4zhanhao.Text.IsNullOrEmpty()) + return; + int zhanhao = Convert.ToUInt16(tb_CH4zhanhao.Text); + Form1.f1.LL28CH4client?.writeRegister(1076, zhanhao); + } + + // 日志模式保存 + private void bt_logmode_save_Click(object sender, EventArgs e) + { + var jsconfig = new JsonConfig("config.json"); + + jsconfig.SetValue("IsDebugEnabled", chk_DebugEnabled.Checked); + jsconfig.SetValue("IsErrorEnabled", chk_ErrorEnabled.Checked); + jsconfig.SetValue("IsInfoEnabled", chk_InfoEnabled.Checked); + jsconfig.SetValue("IsWarningEnabled", chk_WarningEnabled.Checked); + jsconfig.SetValue("IsXXXEnabled", chk_XXXEnabled.Checked); + + mxlLog.Instance.IsDebugEnabled = chk_DebugEnabled.Checked; + mxlLog.Instance.IsErrorEnabled = chk_ErrorEnabled.Checked; + mxlLog.Instance.IsInfoEnabled = chk_InfoEnabled.Checked; + mxlLog.Instance.IsWarningEnabled = chk_WarningEnabled.Checked; + mxlLog.Instance.IsXXXEnabled = chk_XXXEnabled.Checked; + } + + // 扫码枪选用 + private void bt_saomamode_Click(object sender, EventArgs e) + { + var jsconfig = new JsonConfig("config.json"); + if (rbt_SerialPort.Checked) + { + jsconfig.SetValue("CodeScanner", "SerialPort"); + } + else if (rbt_TCP.Checked) + { + jsconfig.SetValue("CodeScanner", "TCP"); + } + } + + // 清理日志 + private void bt_ClearLog_Click(object sender, EventArgs e) + { + if (tb_logday.Text.IsNullOrEmpty()) + return; + + bt_ClearLog.Enabled = false; + mxlLog.Instance.ClearOldLogs(Convert.ToInt32(tb_logday.Text.Trim())); + bt_ClearLog.Enabled = true; + } + + } +} diff --git a/SLC1-N/Form_RootSet.resx b/SLC1-N/Form_RootSet.resx new file mode 100644 index 0000000..8951e3d --- /dev/null +++ b/SLC1-N/Form_RootSet.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAACq + qnqHeoqqgAAAAAAAAAAAAAAAAAAACqiAAAAAAAAAeqgAAAAAAAAAAAAAAAAKqAAAAAAAAAAAAAqoAAAA + AAAAAAAAAAegAAAAAAAAAAAAAAAIoAAAAAAAAAAAAKcAAAAAAAAAAAAAAAAACqAAAAAAAAAACgAIenqq + qqqqqqqqqqAAAIoAAAAAAAAAoAAAAKqqqqqqqqqqqqgAAAigAAAAAAAKAAAAiqqqqqqqqqqqqqoAAACK + AAAAAAB3AAAAeHiqqqqqqqqqqqoAAAAKAAAAAACgAAAAAAqqqqqqqqqqqqoAAAAAoAAAAAqAAAAAAKqq + qqqqoAAAAAAAAAAAgAAAAAoAAAAAAAAIqqqqpwAAAAAAAAAACgAAAAoAAAAAAAAKqqqqqgAAAAAAAAAA + CgAAAAgAAAAAAAiqqqqqqqAAAAAAAAAABwAAAAoAAAAAAAAACKqqqqAAAAAAAAAACgAAAAgAAAAAAAAA + qqqqqqgAAAAAAAAACgAAAAoAAAAAAAAKqqqqqqoAAAAAAAAACgAAAAoAAAAAAAAAAAqqqqpwAAAAAAAA + CgAAAAoAAAAAAAAAAKqqqqqgAAAAAAAAiAAAAACAAAAAAAAAB6iqqqqoAAAAAAAAoAAAAACgAAAAAAAA + AACKqqqqAAAAAAAIoAAAAAAKAAAAAAAAAAqqqqqqgAAAAAAKAAAAAAAAoAAAAAAAAIqKiqqqoAAAAACg + AAAAAAAAigAAAAAAAAAAqqqqqAAAAAoAAAAAAAAACKAAAAAAAAAKqqqqqgAAAKAAAAAAAAAAAAqAAAAA + AAAAAAAAAAAAqgAAAAAAAAAAAACqgAAAAAAAAAAAAAB6gAAAAAAAAAAAAAAAeqAAAAAAAAAAAKqAAAAA + AAAAAAAAAAAAAAenoAAAAAB6qAAAAAAAAAAAAAAAAAAAAAAAinqqqqhwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////P///AAD//8AAf/8AAP/+H/8P/wAA//j//+P/ + AAD/5///+f8AAP/P///+fwAA/7gAAB8/AAD/fwAAD58AAP78AAAPzwAA/PwAAA/vAAD9/4AAD/cAAPn/ + AB//9wAA+//gD//7AAD7/+AP//sAAPv/gAf/+wAA+//4B//7AAD7//AD//sAAPv/4AP/+wAA+//+Af/7 + AAD7//wB//MAAP3/+AD/9wAA/f//AP/nAAD+//4Af+8AAP9//AB/3wAA/z//wD+/AAD/n/+AP38AAP/n + ///8/wAA//H///H/AAD//H//x/8AAP//h/w//wAA///wAf//AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAACKqAAAenAAAAAAAAAAAACoAAAAAAAAegAAAAAAAAB3AAAAAAAAAACKAAAAAA + AKAAqqqqqqqqoAAIAAAAAAoAAIqqqqqqqqoAAKAAAACAAAinqqqqqqqqAAAIAAAAoAAACqqqqqeqigAA + CgAACAAAAAiKqqoAAAAAAAAAAAoAAAAAqqqqoAAAAAAAgAAKAAAAAACqqqAAAAAAAKAACAAAAAAIqqqq + AAAAAABwAAoAAAAAAAqqqgAAAAAAcAAAAAAAAACqqqqgAAAAAAAAAHAAAAAAAKqqoAAAAAoAAAAIAAAA + AAqqqqgAAACAAAAACgAAAAAACKqqAAAIAAAAAACHAAAAAKqqqqAAoAAAAAAAAKAAAAAAAAAACAAAAAAA + AAAAdwAAAAAAigAAAAAAAAAAAAAHqKeooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////+Hj//+f/n/+f/+f/cAB7/vAAPf3gAD79+AA++/g + P//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/Ad//f/+//8/8///4B/////////////// + //////////////////8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqoAAAAAAKqoAAAAAAAAiqoA + AAAAAAAKqgAAAAAAAAiqgAAAAAAAAHqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAP//AAD//wAA//8AAP//AAD4DwAA/D8AAPw/AAD+PwAA/h8AAP8fAAD//wAA//8AAP// + AAD//wAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAAP4AAAX+ + BQAJ/wkADf4NABH/EQAW/hYAGf8ZAB3+HQAh/iEAJv4mACr+KgAt/i0AMf4xADX+NQA5/jkAPf49AEH+ + QQBF/kUAS/9LAE3+TQBR/lEAVf5VAFn+WQBe/14AYf5hAGX+ZQBp/mkAbv9uAHD/cAB1/nUAef55AH7+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFggIDhMXFxsXFxIOBgobAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFgwSIAAAAAAAAAAAAAAAAAAdEQwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMHQAA + AAAAAAAAAAAAAAAAAAAAAAAbDBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAbCAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAB0IAAAAAAAAAAAAAAAAAAAAAAAAAAwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREA + AAAAAAAAAAAAAAAAAAAACgAAACAbFgwBAQEBAQEBAQEBAQEBAQEBAQEAAAAAABsOAAAAAAAAAAAAAAAA + AAAKAAAAAAAAAAwBAQEBAQEBAQEBAQEBAQEBAQEbAAAAAAAgDgAAAAAAAAAAAAAAAA4AAAAAAAAdBAEB + AQEBAQEBAQEBAQEBAQEBAQEOAAAAAAAAGxIAAAAAAAAAAAAAGxYAAAAAAAAgICAgCgEBAQEBAQEBAQEB + AQEBAQEBAAAAAAAAAA4AAAAAAAAAAAAADAAAAAAAAAAAAAAWAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAA + AAAKAAAAAAAAAAAWHQAAAAAAAAAAAAwBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAK + AAAAAAAAAAAAAAAAACAGAQEBAQEBFgAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAOAAAAAAAAAAAAAAAA + AAgBAQEBAQEBBAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAATAAAAAAAAAAAAAAAXAQEBAQEBAQEBARYA + AAAAAAAAAAAAAAAAAAAADAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAFwEBAQEBAQYAAAAAAAAAAAAAAAAA + AAAADAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAWAQEBAQEBAQEXAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAS + AAAAAAAAAAAAAAAAAAoBBAQBAQEBAQEEAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAA + AAAAAAAOAQEBAQEBGwAAAAAAAAAAAAAAAAAAEQAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAYBAQEBAQEB + BAAAAAAAAAAAAAAAAAAbFwAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAEQwODAQBAQEBAR0AAAAAAAAAAAAA + AAAKAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAIAQBAQEBAQgAAAAAAAAAAAAAAB0WAAAAAAAAAAAA + AAoAAAAAAAAAAAAAAAAAAAARAQEBAQEBAQEdAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAMAAAAAAAAAAAA + AAAAABsbFxsRAQEBAQEKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAbEQAAAAAAAAAAAAAAAAAAAAAMAQEB + AQEBIAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAGw4AAAAAAAAAAAAAAAAAAAYBAQEBAQEBCAAAAAAAAAoA + AAAAAAAAAAAAAAAAAAAAAAAIGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCgAAAAAAAAAAAAAAAAAA + AAAAAAAAFwgdAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXDBMA + AAAAAAAAAAAAAAAAAAAAABIMGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODhIXAAAAAAAAAAAA + FxEMEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEw4IBAQECA4WIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///z///wAA///AAH//AAD//h//D/8AAP/4///j/wAA/+f///n/ + AAD/z////n8AAP+4AAAfPwAA/38AAA+fAAD+/AAAD88AAPz8AAAP7wAA/f+AAA/3AAD5/wAf//cAAPv/ + 4A//+wAA+//gD//7AAD7/4AH//sAAPv/+Af/+wAA+//wA//7AAD7/+AD//sAAPv//gH/+wAA+//8Af/z + AAD9//gA//cAAP3//wD/5wAA/v/+AH/vAAD/f/wAf98AAP8//8A/vwAA/5//gD9/AAD/5////P8AAP/x + ///x/wAA//x//8f/AAD//4f8P/8AAP//8AH//wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA/gAABf4FAAn+CQAP/g8AHv4eACv+KwAs/ywAM/8zADT/ + NAA+/j4AQv5CAEX+RQBJ/kkATP5MAFD+UABV/lUAWf9ZAF7+XgBh/mEAZf5lAGj+aABt/m0Acv5yAHX+ + dQB5/nkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkODhcAAAAAFg4O + AAAAAAAAAAAAAAAAAAAAAAAAAA8WAAAAAAAAAAAAAAAAExEAAAAAAAAAAAAAAAAAABMWAAAAAAAAAAAA + AAAAAAAAABEXAAAAAAAAAAAAAAANAAAADQQEAgQCBAIEAgQCBAAAAAAPAAAAAAAAAAAADQAAAAARAgIC + AgICAgICAgICCgAAAAAPAAAAAAAAABMAAAAAGREPBAICAgICAgICAgICAAAAAAAZAAAAAAAAFgAAAAAA + ABECAgICAgIGBwgICAgAAAAAAA8AAAAAABMAAAAAAAAAFxYFAgICAgAAAAAAAAAAAAAAAAAAAAAADgAA + AAAAAAAADwICAgICBwAAAAAAAAAAAAAADwAAAAANAAAAAAAAAAAAAAcCAgICAAAAAAAAAAAAAAANAAAA + AA0AAAAAAAAAAAAOAgICAgIHAAAAAAAAAAAAAA0AAAAADgAAAAAAAAAAAAAACgICAgIAAAAAAAAAAAAA + EwAAAAAAAAAAAAAAAAAAAA0CAgICAggAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAgICAgAAAAAA + AAAADQAAAAAAAAAXAAAAAAAAAAAADQICAgICCgAAAAAAABEAAAAAAAAAABcAAAAAAAAAAAAAABMCAgIC + AAAAAAAXAAAAAAAAAAAAABkTAAAAAAAAAAAOBAICAgQOAAAADwAAAAAAAAAAAAAAAAAOAAAAAAAAAAAA + AAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAADhMAAAAAAAAAAAAAEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAT + Dg0KCg0OEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////+Hj//+f + /n/+f/+f/cAB7/vAAPf3gAD79+AA++/gP//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/ + Ad//f/+//8/8///4B/////////////////////////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAB + AAAAAAAAAAAAAAABAAAAAQAAAAAAAAD+AAAE/wQAC/4LAAz/DAAR/hEAFf8VACP/IwA6/zoAQ/5DAFL/ + UgBb/1sAb/5vAHb+dgB5/3kAfv9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgICAgIFAAAAAAAA + AAAAAAcCAg4AAAAAAAAAAAAAAAALAwIMAAAAAAAAAAAAAAAAAAgCAwAAAAAAAAAAAAAAAAANBQIOAAAA + AAAAAAAAAAAAAAoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAPgP + AAD8PwAA/D8AAP4/AAD+HwAA/x8AAP//AAD//wAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/AEUA/wBjAP8AdgD+AIMA/wCGAP8AfAD/AHIA/wBeAP8AQAD+ + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/AAIA/wAnAP4AZgD/AKkA/wDiAP8A5QD/AMkA/wC0AP8ApQD+AJ4A/wCZAP8AnwD/ + AKgA/wC4AP8AzAD+AOkA/wDaAP8AmwD/AFwA/wAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAQAP8ATgD/AKwA/wDRAP4AuwD/AIAA/wBCAP8AIgD/ABUA/wAMAP8ABQD+ + AAIAAAAAAP8AAwD/AAYA/wANAP8AFwD+ACQA/wBMAP8AjQD/AMAA/wDTAP8AnAD+AD8A/wAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ACAD+AEQA/gC5AP4A0QD+AIcA/gA3AP4ACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABEA/gA+AP4AmwD+ + ANQA/gCmAP4AOAD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAZAP4AlgD/AOcA/wB2AP8AGQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+ACcA/wCQAP8A5gD/AH4A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD8A/wDTAP4AqwD/ACEA/wAGAP8AMAD/ + AF8A/wByAP4AcgD/AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+ + AHIA/wByAP8AcgD/AHIA/wByAP8ACwAAAAAAAAAAAP8AMQD/AMYA/wDBAP8AKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wACAP8ATAD/ANsA/wB3AP4AHwD/ + AEsA/wCHAP8AnAD/AKoA/wDSAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8ATAAAAAAAAAAAAAAAAAD/ABMA/wCYAP8AywD+ + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wA/AP8A3AD/ + AGMA/wAGAAAAAAAAAAAAAAAAAP8ACAD/AFQA/wDVAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AlAD+AAMAAAAAAAAAAAAA + AAAA/wAMAP8AhgD+AMwA/wAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ACIA/wDKAP8AfAD/AAIAAAAAAAAAAAAAAAAA/wARAP8AjgD/APIA/wD/AP4A/gD/AP8A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AzgD+ + ABQAAAAAAAAAAAAAAAAAAAAAAP8ADAD+AJkA/wC8AP8ACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD+AJ8A/gCpAP4AAwAAAAAAAAAAAAAAAAAAAAAA/gBPAP4AgAD+AIAA/gCAAP4AhAD+ + AN0A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4A+wD+ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABAA/gDJAP4AdQD+AAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ASAD/ANEA/wAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAiAP4AqwD/APkA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBCAP8A3AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AqAD/AI4A/wACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABgD/AFAA/wDRAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AHQA/wAyAP8AMgD+ADIA/wAyAP8AMgD/ADIA/wAyAP8AMgD+AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP8AuAD/AHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAWAP4A3wD/ADsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AEQA/wBTAP4AUwD/AFYA/wCDAP8A7gD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AK0A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AYAD/AL4A/wANAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBIAP4AxwD/ + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAQD/AGIA/wDkAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/APIA/wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ALwD/AMwA/wAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wBoAP4AsAD/AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAcAP4ApgD/ + APoA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wCuAP8ABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADgD/ANAA/wBDAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wB1AP4AqAD/AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAKAP4AJQD/ACYA/wAmAP8ANwD/AKEA/wD9AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wDsAP8AQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAgD/ + ANIA/wBMAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBvAP4AqwD+AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAEA/gAtAP4ArgD+APoA/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4ApQD+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABwD+ANEA/gBIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBYAP4AuwD/ABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AFMA/wDXAP8A+QD/APkA/wD5AP8A/QD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A8QD+AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AHgD/AM0A/wA4AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wApAP4A2AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wA8AP8AzQD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/gD+AJ0A/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ARwD/AMYA/wAaAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP4AzAD/AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ADQD/AHMA/wDuAP8A/gD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+APMA/wAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AkAD/AKAA/wACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AbwD/AL8A/wASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAMAP8AdgD/AMUA/wDLAP8AywD+ANIA/wD3AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wCPAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAbAP8A3wD/ + AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AGwD/AMgA/wBrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AIQA/wDxAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wDkAP8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAUA/wCOAP8ArgD/AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AFEA/gDeAP4AMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAzAP4AwwD+ + AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4AigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+AE4A/gDoAP4AKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AAYA/wB9AP8A1AD/ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ABsA/wCPAP8AngD+AJ4A/wCfAP8AvgD/APsA/wD/AP8A/wD+AP4A/wD/AP8A3wD/ACkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AQgD+ANgA/wBdAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAOAP8AmAD/AMMA/wAyAP4AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAUA/wBHAP8A1QD/AP0A/wD/AP8A/wD+AP4A/wD/AP8A/QD/ + AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wBMAP8AzgD+AHwA/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADQD/AJYA/wDNAP4AUgD/AAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AH4A/wDtAP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AN8A/wAcAAAAAAAAAAAAAAAAAP8ACwD/AGoA/wDYAP8AdQD+AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAQA/wBqAP4A4QD/ + AJwA/wAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ANQD+AHAA/wBxAP8AcQD/ + AHEA/wBxAP8AcQD+AHEA/wBxAP8AcQD/AG4A/wAmAAAAAAAAAAAA/wAqAP8ArAD/AN0A/wBMAP8AAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4AJAD/AKEA/wDnAP8AhwD/AC0A/wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wABAP8APQD+AJ4A/wDjAP8AkgD/ + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAgA/gBCAP4AqQD+ANMA/gCzAP4AXQD+AC0A/gANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gASAP4ANAD+AGsA/gC+AP4A0QD+ + AJcA/gA0AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/ADUA/wB7AP4AyAD/ + AMwA/wC/AP8AoAD/AHQA/wBVAP8APgD+ADMA/wArAP8ANAD/AEEA/wBaAP8AegD+AKcA/wDCAP8AzwD/ + AL4A/wBwAP8AKQD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD/AC8A/wBbAP8AhwD/AK8A/wDPAP8A5AD+APEA/wD1AP8A8AD/AOAA/wDJAP8AqgD+ + AIAA/wBTAP8AJQD/AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//+AB//8AAP/+AAAf/wAA//gAQAP/AAD/4D//gP8AAP/B///wfwAA/4AAAAw/AAD+AAAADh8AAPwc + AAAHDwAA/DgAAAeHAAD4eAAAB8MAAPj/AAAH4wAA+PwAAAfjAADx/AAH//EAAPH/gAf/8QAA8f8AA//x + AADx/wAD//EAAPH/wAH/8QAA8f/AAf/xAADx//wA//EAAPH/8AD/8QAA+P/gAH/jAAD4//4Af8MAAPx/ + /AB/xwAA/D/4AD+HAAD+D/8APg8AAP8H/gAcHwAA/4P+ABg/AAD/4H//wP8AAP/wD/4B/wAA//wAAAf/ + AAD//4AAP/8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA8A/gAzAP4ASwD/AFgA/gBVAP4ASQD+ + ADAA/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAEAP4ANwD+AIcA/wCzAP4AtAD+AI8A/gB1AP8AaQD+ + AGoA/gB4AP4AkgD/ALcA/gCvAP4AfwD+AC4A/wACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gADAP8ARAD+AK4A/gCWAP4AQQD/ABMA/gABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AAQD+ABYA/gBKAP4AnwD/AKYA/gA5AP4AAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD/AJsA/wCVAP8AHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AKgD/AKEA/wCMAP8ADAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ACMA/gC5AP4AUQD/AD8A/gB+AP4AuQD+ + APAA/wD2AP4A9gD+APYA/gD2AP8A9gD+APYA/gD2AP4A9gD/APYA/gD2AP4A9gD+AHkAAAAAAP4AAgD+ + AF0A/gCvAP8AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAXAP4AuAD+AC8AAAAAAAAAAAD+ + ABYA/gCfAP4A+gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+AP4A/gD+AP8A/wD+AP4A/gD+AP4AwQD/ + AAUAAAAAAAAAAAD+AEYA/wCvAP4ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD/AJwA/gBHAAAAAAAA + AAAA/wALAP4AhQD+AKoA/gCsAP8A8AD+AP4A/gD+AP4A/gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+ + AP4A/gD1AP8AHQAAAAAAAAAAAAAAAAD/AF0A/gCHAP4AAQAAAAAAAAAAAAAAAAAAAAAA/wBAAP8AlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AGgD/AKgA/wD8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDUAP8AywD/ + AMwA/wDLAP8AywD/AMsA/wBGAAAAAAAAAAAAAAAAAP8AAgD/AK0A/wAnAAAAAAAAAAAAAAAAAAAAAAD+ + AJcA/wA0AAAAAAAAAAAAAAAAAAAAAAD+AAcA/gBmAP4AjAD/AJIA/gDhAP4A/gD+AP4A/wD/AP4A/gD+ + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4ATgD+AHsAAAAAAAAAAAAA + AAAAAAAAAP4AtwD/AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP8ArQD+AP0A/gD+AP4A/gD/ + AP8A/gD+AP4A1AD+AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP4AqwAA + AAAAAAAAAAAAAAAAAAAA/gC9AP8AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD+AFAA/wBuAP4AdgD+ + ANQA/gD+AP8A/wD+AP4A/gD9AP4AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAMA/gC9AAAAAAAAAAAAAAAAAAAAAAD/ALsA/wAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AB4A/wCvAP8A/QD/AP8A/wD/AP8A/wD/AP8A/wDTAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ACAD/ALkAAAAAAAAAAAAAAAAAAAAAAP4ArwD/ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ANwD+AFAA/gBWAP4AwwD/AP8A/gD+AP4A/gD+AP0A/wBXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/gAoAP4AnAAAAAAAAAAAAAAAAAAAAAAA/gB6AP8AVgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AIwD+ALgA/gD9AP8A/wD+AP4A/gD+AP4A/gD/AMgA/gAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AHIA/gBcAAAAAAAAAAAAAAAAAAAAAAD+AB8A/wCzAP4ACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAcAP4AMgD+ADsA/wCrAP4A/gD+AP4A/gD+AP8A/QD+ + AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAQAP4AuwD+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AGUA/wCJAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAkAP8AvQD/AP4A/wD/AP8A/wD/ + AP8A/wD/AP8AwQD/AAUAAAAAAAAAAAAAAAAAAAAAAP8ABgD/AJ8A/wBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABQD+AIsA/gB2AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAkA/gAUAP8AIAD+ + AJcA/gD8AP4A/gD/AP8A/gD6AP4ARwAAAAAAAAAAAAAAAAD+AAkA/gCMAP8AdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ABQD+AIQA/gCaAP8AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + ACAA/wC0AP4A9QD+APUA/gD1AP8A9gD+APUA/gCyAAAAAAAAAAAA/gAeAP4AqgD+AG8A/wADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AEkA/wC5AP4AbgD+ABQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAbAP8AfQD+ALUA/gA3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAwA/wBkAP8AswD/ + AJgA/wBVAP8AJQD/ABEA/wAGAP8AAQD/AAIA/wAIAP8AEwD/ACgA/wBeAP8AngD/AK8A/wBVAP8ACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/gAFAP4AMAD/AHAA/gCgAP4AsAD+ALoA/wDAAP4AwAD+ALkA/gCvAP8AnAD+AGcA/gArAP4AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////+Af//4AAf/4D8B/8P/8P+AAAh/GA + AGPjAABx58AAceeAH/nn4A/558AP+efwB/nn8Af55/gD+eP4A/Hx/AHj8PwBx/h+AYf+H/4f/wAAP//A + AP////////////////////////////////8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/ACsA/wAeAP8AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD4A/gBlAP8AXgD+AEEA/wA1AP4AQgD/ + AF8A/gBmAP8AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/AG4A/wBcAP8AagD/AHsA/wB7AP8AewD/ + AHsA/wB7AP8AWwD/ADMA/wBpAP8ABgAAAAAAAAAAAAAAAAD/AGwA/gAMAP8AKQD+ALwA/wD7AP4A/gD/ + AP8A/gD+AP8A/wD+AO0A/wAIAP4AEQD/AGcAAAAAAAAAAAD/ADYA/wAzAAAAAAD/AAEA/wBtAP8A3AD/ + AP8A/wD/AP8AgQD/AGYA/wBlAP8AEQAAAAAA/wA/AP8AKAAAAAAA/gBdAP8ABAAAAAAAAAAAAP4AGwD/ + AKQA/gD0AP8A/wD+AJAAAAAAAAAAAAAAAAAAAAAAAP8ABwD+AFoAAAAAAP8AWgD/AAYAAAAAAAAAAAAA + AAAA/wBVAP8AxQD/AP8A/wDzAP8AFwAAAAAAAAAAAAAAAAD/AAwA/wBVAAAAAAD+ACYA/wBFAAAAAAAA + AAAAAAAAAP8ADwD+AIkA/wDqAP4A/gD/AIYAAAAAAAAAAAAAAAAA/wBPAP4AGwAAAAAAAAAAAP8AXwD/ + AB8AAAAAAAAAAAAAAAAA/wBAAP8ArQD/AP4A/wDuAP8AEwAAAAAA/wAnAP8AWAAAAAAAAAAAAAAAAAD/ + AAEA/gBaAP8ATwD+AAUAAAAAAP4ACAD/AGoA/gB6AP8AegD+ADMA/wBUAP4AVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/ABwA/wBgAP8AYgD/AGEA/wBhAP8AYQD/AGIA/wBfAP8AFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA/B8AAPAHAADAAQAAwAEAAJAEAACYPAAAnBwAAJwcAADOCQAAwgMAAPAH + AAD//wAA//8AAP//AAA= + + + \ No newline at end of file diff --git a/SLC1-N/Form_SaomaSet.Designer.cs b/SLC1-N/Form_SaomaSet.Designer.cs new file mode 100644 index 0000000..ba58654 --- /dev/null +++ b/SLC1-N/Form_SaomaSet.Designer.cs @@ -0,0 +1,967 @@ +namespace SLC1_N +{ + partial class Form_SaomaSet + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form_SaomaSet)); + this.timer_ConnectStatus = new System.Windows.Forms.Timer(this.components); + this.bt_CH1Break = new System.Windows.Forms.Button(); + this.label7 = new System.Windows.Forms.Label(); + this.cb_CH1PortName = new System.Windows.Forms.ComboBox(); + this.label11 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.cb_CH1BaudRate = new System.Windows.Forms.ComboBox(); + this.lb_CH1Com_status = new System.Windows.Forms.Label(); + this.bt_CH1Connect = new System.Windows.Forms.Button(); + this.bt_CH1Refresh = new System.Windows.Forms.Button(); + this.uiGroupBox9 = new Sunny.UI.UIGroupBox(); + this.tabPage_SerialPort = new System.Windows.Forms.TabPage(); + this.uiGroupBox1 = new Sunny.UI.UIGroupBox(); + this.label1 = new System.Windows.Forms.Label(); + this.cb_CH2PortName = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.cb_CH2BaudRate = new System.Windows.Forms.ComboBox(); + this.lb_CH2Com_status = new System.Windows.Forms.Label(); + this.bt_CH2Connect = new System.Windows.Forms.Button(); + this.bt_CH2Break = new System.Windows.Forms.Button(); + this.bt_CH2Refresh = new System.Windows.Forms.Button(); + this.uiTabControlMenu1 = new Sunny.UI.UITabControlMenu(); + this.tabPage_TCP = new System.Windows.Forms.TabPage(); + this.uiGroupBox3 = new Sunny.UI.UIGroupBox(); + this.bt_CH2TCPsave = new System.Windows.Forms.Button(); + this.label5 = new System.Windows.Forms.Label(); + this.lb_CH2TCP_ConnectStatus = new System.Windows.Forms.Label(); + this.bt_CH2TCP_Reconnect = new System.Windows.Forms.Button(); + this.bt_CH2TCP_Disconnect = new System.Windows.Forms.Button(); + this.tb_CH2TCP_ip = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.tb_CH2TCP_port = new System.Windows.Forms.TextBox(); + this.uiGroupBox2 = new Sunny.UI.UIGroupBox(); + this.bt_CH1TCPsave = new System.Windows.Forms.Button(); + this.label4 = new System.Windows.Forms.Label(); + this.lb_CH1TCP_ConnectStatus = new System.Windows.Forms.Label(); + this.bt_CH1TCP_Reconnect = new System.Windows.Forms.Button(); + this.bt_CH1TCP_Disconnect = new System.Windows.Forms.Button(); + this.tb_CH1TCP_ip = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.tb_CH1TCP_port = new System.Windows.Forms.TextBox(); + this.uiGroupBox11 = new Sunny.UI.UIGroupBox(); + this.label6 = new System.Windows.Forms.Label(); + this.cb_CH3PortName = new System.Windows.Forms.ComboBox(); + this.label12 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.cb_CH3BaudRate = new System.Windows.Forms.ComboBox(); + this.lb_CH3Com_status = new System.Windows.Forms.Label(); + this.bt_CH3Connect = new System.Windows.Forms.Button(); + this.bt_CH3Break = new System.Windows.Forms.Button(); + this.bt_CH3Refresh = new System.Windows.Forms.Button(); + this.uiGroupBox5 = new Sunny.UI.UIGroupBox(); + this.label17 = new System.Windows.Forms.Label(); + this.cb_CH4PortName = new System.Windows.Forms.ComboBox(); + this.label18 = new System.Windows.Forms.Label(); + this.label19 = new System.Windows.Forms.Label(); + this.cb_CH4BaudRate = new System.Windows.Forms.ComboBox(); + this.lb_CH4Com_status = new System.Windows.Forms.Label(); + this.bt_CH4Connect = new System.Windows.Forms.Button(); + this.bt_CH4Break = new System.Windows.Forms.Button(); + this.bt_CH4Refresh = new System.Windows.Forms.Button(); + this.uiGroupBox9.SuspendLayout(); + this.tabPage_SerialPort.SuspendLayout(); + this.uiGroupBox1.SuspendLayout(); + this.uiTabControlMenu1.SuspendLayout(); + this.tabPage_TCP.SuspendLayout(); + this.uiGroupBox3.SuspendLayout(); + this.uiGroupBox2.SuspendLayout(); + this.uiGroupBox11.SuspendLayout(); + this.uiGroupBox5.SuspendLayout(); + this.SuspendLayout(); + // + // timer_ConnectStatus + // + this.timer_ConnectStatus.Tick += new System.EventHandler(this.timer_ConnectStatus_Tick); + // + // bt_CH1Break + // + this.bt_CH1Break.Location = new System.Drawing.Point(33, 348); + this.bt_CH1Break.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH1Break.Name = "bt_CH1Break"; + this.bt_CH1Break.Size = new System.Drawing.Size(125, 45); + this.bt_CH1Break.TabIndex = 63; + this.bt_CH1Break.Text = "断开连接"; + this.bt_CH1Break.UseVisualStyleBackColor = true; + this.bt_CH1Break.Click += new System.EventHandler(this.CodeBreak_Click); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("宋体", 12F); + this.label7.Location = new System.Drawing.Point(37, 177); + this.label7.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(87, 16); + this.label7.TabIndex = 70; + this.label7.Text = "串口状态:"; + // + // cb_CH1PortName + // + this.cb_CH1PortName.FormattingEnabled = true; + this.cb_CH1PortName.Location = new System.Drawing.Point(28, 58); + this.cb_CH1PortName.Margin = new System.Windows.Forms.Padding(4); + this.cb_CH1PortName.Name = "cb_CH1PortName"; + this.cb_CH1PortName.Size = new System.Drawing.Size(137, 24); + this.cb_CH1PortName.TabIndex = 67; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(25, 35); + this.label11.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(55, 16); + this.label11.TabIndex = 65; + this.label11.Text = "端口号"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(25, 101); + this.label15.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(55, 16); + this.label15.TabIndex = 66; + this.label15.Text = "波特率"; + // + // cb_CH1BaudRate + // + this.cb_CH1BaudRate.FormattingEnabled = true; + this.cb_CH1BaudRate.Items.AddRange(new object[] { + "115200", + "9600"}); + this.cb_CH1BaudRate.Location = new System.Drawing.Point(28, 125); + this.cb_CH1BaudRate.Margin = new System.Windows.Forms.Padding(4); + this.cb_CH1BaudRate.Name = "cb_CH1BaudRate"; + this.cb_CH1BaudRate.Size = new System.Drawing.Size(137, 24); + this.cb_CH1BaudRate.TabIndex = 68; + // + // lb_CH1Com_status + // + this.lb_CH1Com_status.AutoSize = true; + this.lb_CH1Com_status.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH1Com_status.Location = new System.Drawing.Point(55, 206); + this.lb_CH1Com_status.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lb_CH1Com_status.Name = "lb_CH1Com_status"; + this.lb_CH1Com_status.Size = new System.Drawing.Size(23, 16); + this.lb_CH1Com_status.TabIndex = 69; + this.lb_CH1Com_status.Text = "##"; + // + // bt_CH1Connect + // + this.bt_CH1Connect.Location = new System.Drawing.Point(33, 244); + this.bt_CH1Connect.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH1Connect.Name = "bt_CH1Connect"; + this.bt_CH1Connect.Size = new System.Drawing.Size(125, 45); + this.bt_CH1Connect.TabIndex = 62; + this.bt_CH1Connect.TabStop = false; + this.bt_CH1Connect.Text = "连接串口"; + this.bt_CH1Connect.UseVisualStyleBackColor = true; + this.bt_CH1Connect.Click += new System.EventHandler(this.CodeCon_Click); + // + // bt_CH1Refresh + // + this.bt_CH1Refresh.Location = new System.Drawing.Point(33, 296); + this.bt_CH1Refresh.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH1Refresh.Name = "bt_CH1Refresh"; + this.bt_CH1Refresh.Size = new System.Drawing.Size(125, 45); + this.bt_CH1Refresh.TabIndex = 64; + this.bt_CH1Refresh.Text = "刷新串口"; + this.bt_CH1Refresh.UseVisualStyleBackColor = true; + this.bt_CH1Refresh.Click += new System.EventHandler(this.CodeRefresh_Click); + // + // uiGroupBox9 + // + this.uiGroupBox9.Controls.Add(this.label7); + this.uiGroupBox9.Controls.Add(this.cb_CH1PortName); + this.uiGroupBox9.Controls.Add(this.label11); + this.uiGroupBox9.Controls.Add(this.label15); + this.uiGroupBox9.Controls.Add(this.cb_CH1BaudRate); + this.uiGroupBox9.Controls.Add(this.lb_CH1Com_status); + this.uiGroupBox9.Controls.Add(this.bt_CH1Connect); + this.uiGroupBox9.Controls.Add(this.bt_CH1Break); + this.uiGroupBox9.Controls.Add(this.bt_CH1Refresh); + this.uiGroupBox9.FillColor = System.Drawing.Color.Transparent; + this.uiGroupBox9.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox9.Location = new System.Drawing.Point(22, 5); + this.uiGroupBox9.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox9.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox9.Name = "uiGroupBox9"; + this.uiGroupBox9.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox9.Size = new System.Drawing.Size(195, 408); + this.uiGroupBox9.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox9.TabIndex = 2; + this.uiGroupBox9.Text = "CH1扫码枪"; + this.uiGroupBox9.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // tabPage_SerialPort + // + this.tabPage_SerialPort.BackColor = System.Drawing.Color.LightBlue; + this.tabPage_SerialPort.Controls.Add(this.uiGroupBox5); + this.tabPage_SerialPort.Controls.Add(this.uiGroupBox11); + this.tabPage_SerialPort.Controls.Add(this.uiGroupBox1); + this.tabPage_SerialPort.Controls.Add(this.uiGroupBox9); + this.tabPage_SerialPort.Location = new System.Drawing.Point(201, 0); + this.tabPage_SerialPort.Name = "tabPage_SerialPort"; + this.tabPage_SerialPort.Size = new System.Drawing.Size(959, 581); + this.tabPage_SerialPort.TabIndex = 2; + this.tabPage_SerialPort.Text = "串口扫码枪设置"; + // + // uiGroupBox1 + // + this.uiGroupBox1.Controls.Add(this.label1); + this.uiGroupBox1.Controls.Add(this.cb_CH2PortName); + this.uiGroupBox1.Controls.Add(this.label2); + this.uiGroupBox1.Controls.Add(this.label3); + this.uiGroupBox1.Controls.Add(this.cb_CH2BaudRate); + this.uiGroupBox1.Controls.Add(this.lb_CH2Com_status); + this.uiGroupBox1.Controls.Add(this.bt_CH2Connect); + this.uiGroupBox1.Controls.Add(this.bt_CH2Break); + this.uiGroupBox1.Controls.Add(this.bt_CH2Refresh); + this.uiGroupBox1.FillColor = System.Drawing.Color.Transparent; + this.uiGroupBox1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox1.Location = new System.Drawing.Point(234, 5); + this.uiGroupBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox1.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox1.Name = "uiGroupBox1"; + this.uiGroupBox1.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox1.Size = new System.Drawing.Size(199, 408); + this.uiGroupBox1.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox1.TabIndex = 71; + this.uiGroupBox1.Text = "CH2扫码枪"; + this.uiGroupBox1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("宋体", 12F); + this.label1.Location = new System.Drawing.Point(40, 177); + this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(87, 16); + this.label1.TabIndex = 70; + this.label1.Text = "串口状态:"; + // + // cb_CH2PortName + // + this.cb_CH2PortName.FormattingEnabled = true; + this.cb_CH2PortName.Location = new System.Drawing.Point(31, 58); + this.cb_CH2PortName.Margin = new System.Windows.Forms.Padding(4); + this.cb_CH2PortName.Name = "cb_CH2PortName"; + this.cb_CH2PortName.Size = new System.Drawing.Size(137, 24); + this.cb_CH2PortName.TabIndex = 67; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(28, 35); + this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(55, 16); + this.label2.TabIndex = 65; + this.label2.Text = "端口号"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(28, 101); + this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(55, 16); + this.label3.TabIndex = 66; + this.label3.Text = "波特率"; + // + // cb_CH2BaudRate + // + this.cb_CH2BaudRate.FormattingEnabled = true; + this.cb_CH2BaudRate.Items.AddRange(new object[] { + "115200", + "9600"}); + this.cb_CH2BaudRate.Location = new System.Drawing.Point(31, 125); + this.cb_CH2BaudRate.Margin = new System.Windows.Forms.Padding(4); + this.cb_CH2BaudRate.Name = "cb_CH2BaudRate"; + this.cb_CH2BaudRate.Size = new System.Drawing.Size(137, 24); + this.cb_CH2BaudRate.TabIndex = 68; + // + // lb_CH2Com_status + // + this.lb_CH2Com_status.AutoSize = true; + this.lb_CH2Com_status.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH2Com_status.Location = new System.Drawing.Point(59, 206); + this.lb_CH2Com_status.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lb_CH2Com_status.Name = "lb_CH2Com_status"; + this.lb_CH2Com_status.Size = new System.Drawing.Size(23, 16); + this.lb_CH2Com_status.TabIndex = 69; + this.lb_CH2Com_status.Text = "##"; + // + // bt_CH2Connect + // + this.bt_CH2Connect.Location = new System.Drawing.Point(36, 243); + this.bt_CH2Connect.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH2Connect.Name = "bt_CH2Connect"; + this.bt_CH2Connect.Size = new System.Drawing.Size(125, 45); + this.bt_CH2Connect.TabIndex = 62; + this.bt_CH2Connect.TabStop = false; + this.bt_CH2Connect.Text = "连接串口"; + this.bt_CH2Connect.UseVisualStyleBackColor = true; + this.bt_CH2Connect.Click += new System.EventHandler(this.CH2CodeCon_Click); + // + // bt_CH2Break + // + this.bt_CH2Break.Location = new System.Drawing.Point(36, 348); + this.bt_CH2Break.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH2Break.Name = "bt_CH2Break"; + this.bt_CH2Break.Size = new System.Drawing.Size(125, 45); + this.bt_CH2Break.TabIndex = 63; + this.bt_CH2Break.Text = "断开连接"; + this.bt_CH2Break.UseVisualStyleBackColor = true; + this.bt_CH2Break.Click += new System.EventHandler(this.CH2CodeBreak_Click); + // + // bt_CH2Refresh + // + this.bt_CH2Refresh.Location = new System.Drawing.Point(36, 296); + this.bt_CH2Refresh.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH2Refresh.Name = "bt_CH2Refresh"; + this.bt_CH2Refresh.Size = new System.Drawing.Size(125, 45); + this.bt_CH2Refresh.TabIndex = 64; + this.bt_CH2Refresh.Text = "刷新串口"; + this.bt_CH2Refresh.UseVisualStyleBackColor = true; + this.bt_CH2Refresh.Click += new System.EventHandler(this.CH2CodeRefresh_Click); + // + // uiTabControlMenu1 + // + this.uiTabControlMenu1.Alignment = System.Windows.Forms.TabAlignment.Left; + this.uiTabControlMenu1.Controls.Add(this.tabPage_SerialPort); + this.uiTabControlMenu1.Controls.Add(this.tabPage_TCP); + this.uiTabControlMenu1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; + this.uiTabControlMenu1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiTabControlMenu1.ItemSize = new System.Drawing.Size(40, 200); + this.uiTabControlMenu1.Location = new System.Drawing.Point(-1, -2); + this.uiTabControlMenu1.MenuStyle = Sunny.UI.UIMenuStyle.Custom; + this.uiTabControlMenu1.Multiline = true; + this.uiTabControlMenu1.Name = "uiTabControlMenu1"; + this.uiTabControlMenu1.SelectedIndex = 0; + this.uiTabControlMenu1.Size = new System.Drawing.Size(1160, 581); + this.uiTabControlMenu1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.uiTabControlMenu1.Style = Sunny.UI.UIStyle.Custom; + this.uiTabControlMenu1.TabBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(115)))), ((int)(((byte)(144)))), ((int)(((byte)(153))))); + this.uiTabControlMenu1.TabIndex = 1; + this.uiTabControlMenu1.TabSelectedColor = System.Drawing.Color.LightBlue; + this.uiTabControlMenu1.TabSelectedForeColor = System.Drawing.Color.Black; + this.uiTabControlMenu1.TabUnSelectedForeColor = System.Drawing.Color.Black; + // + // tabPage_TCP + // + this.tabPage_TCP.BackColor = System.Drawing.Color.LightBlue; + this.tabPage_TCP.Controls.Add(this.uiGroupBox3); + this.tabPage_TCP.Controls.Add(this.uiGroupBox2); + this.tabPage_TCP.Location = new System.Drawing.Point(201, 0); + this.tabPage_TCP.Name = "tabPage_TCP"; + this.tabPage_TCP.Size = new System.Drawing.Size(835, 581); + this.tabPage_TCP.TabIndex = 3; + this.tabPage_TCP.Text = "网口扫码枪设置"; + // + // uiGroupBox3 + // + this.uiGroupBox3.Controls.Add(this.bt_CH2TCPsave); + this.uiGroupBox3.Controls.Add(this.label5); + this.uiGroupBox3.Controls.Add(this.lb_CH2TCP_ConnectStatus); + this.uiGroupBox3.Controls.Add(this.bt_CH2TCP_Reconnect); + this.uiGroupBox3.Controls.Add(this.bt_CH2TCP_Disconnect); + this.uiGroupBox3.Controls.Add(this.tb_CH2TCP_ip); + this.uiGroupBox3.Controls.Add(this.label9); + this.uiGroupBox3.Controls.Add(this.label10); + this.uiGroupBox3.Controls.Add(this.tb_CH2TCP_port); + this.uiGroupBox3.FillColor = System.Drawing.Color.Transparent; + this.uiGroupBox3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox3.Location = new System.Drawing.Point(319, 5); + this.uiGroupBox3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox3.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox3.Name = "uiGroupBox3"; + this.uiGroupBox3.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox3.Size = new System.Drawing.Size(221, 490); + this.uiGroupBox3.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox3.TabIndex = 81; + this.uiGroupBox3.Text = "扫码枪2网口设置"; + this.uiGroupBox3.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // bt_CH2TCPsave + // + this.bt_CH2TCPsave.Location = new System.Drawing.Point(48, 351); + this.bt_CH2TCPsave.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH2TCPsave.Name = "bt_CH2TCPsave"; + this.bt_CH2TCPsave.Size = new System.Drawing.Size(125, 45); + this.bt_CH2TCPsave.TabIndex = 80; + this.bt_CH2TCPsave.TabStop = false; + this.bt_CH2TCPsave.Text = "保存"; + this.bt_CH2TCPsave.UseVisualStyleBackColor = true; + this.bt_CH2TCPsave.Click += new System.EventHandler(this.bt_CH2TCPsave_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("宋体", 12F); + this.label5.Location = new System.Drawing.Point(62, 163); + this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(87, 16); + this.label5.TabIndex = 79; + this.label5.Text = "连接状态:"; + // + // lb_CH2TCP_ConnectStatus + // + this.lb_CH2TCP_ConnectStatus.AutoSize = true; + this.lb_CH2TCP_ConnectStatus.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH2TCP_ConnectStatus.Location = new System.Drawing.Point(94, 192); + this.lb_CH2TCP_ConnectStatus.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lb_CH2TCP_ConnectStatus.Name = "lb_CH2TCP_ConnectStatus"; + this.lb_CH2TCP_ConnectStatus.Size = new System.Drawing.Size(23, 16); + this.lb_CH2TCP_ConnectStatus.TabIndex = 78; + this.lb_CH2TCP_ConnectStatus.Text = "##"; + // + // bt_CH2TCP_Reconnect + // + this.bt_CH2TCP_Reconnect.Location = new System.Drawing.Point(48, 224); + this.bt_CH2TCP_Reconnect.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH2TCP_Reconnect.Name = "bt_CH2TCP_Reconnect"; + this.bt_CH2TCP_Reconnect.Size = new System.Drawing.Size(125, 45); + this.bt_CH2TCP_Reconnect.TabIndex = 76; + this.bt_CH2TCP_Reconnect.TabStop = false; + this.bt_CH2TCP_Reconnect.Text = "重新连接"; + this.bt_CH2TCP_Reconnect.UseVisualStyleBackColor = true; + this.bt_CH2TCP_Reconnect.Click += new System.EventHandler(this.bt_CH2TCP_Reconnect_Click); + // + // bt_CH2TCP_Disconnect + // + this.bt_CH2TCP_Disconnect.Location = new System.Drawing.Point(48, 286); + this.bt_CH2TCP_Disconnect.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH2TCP_Disconnect.Name = "bt_CH2TCP_Disconnect"; + this.bt_CH2TCP_Disconnect.Size = new System.Drawing.Size(125, 45); + this.bt_CH2TCP_Disconnect.TabIndex = 77; + this.bt_CH2TCP_Disconnect.Text = "断开连接"; + this.bt_CH2TCP_Disconnect.UseVisualStyleBackColor = true; + this.bt_CH2TCP_Disconnect.Click += new System.EventHandler(this.bt_CH2TCP_Disconnect_Click); + // + // tb_CH2TCP_ip + // + this.tb_CH2TCP_ip.Location = new System.Drawing.Point(71, 43); + this.tb_CH2TCP_ip.Name = "tb_CH2TCP_ip"; + this.tb_CH2TCP_ip.Size = new System.Drawing.Size(131, 26); + this.tb_CH2TCP_ip.TabIndex = 73; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(27, 48); + this.label9.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(39, 16); + this.label9.TabIndex = 71; + this.label9.Text = "IP:"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(13, 87); + this.label10.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(55, 16); + this.label10.TabIndex = 74; + this.label10.Text = "端口:"; + // + // tb_CH2TCP_port + // + this.tb_CH2TCP_port.Location = new System.Drawing.Point(71, 82); + this.tb_CH2TCP_port.Name = "tb_CH2TCP_port"; + this.tb_CH2TCP_port.Size = new System.Drawing.Size(131, 26); + this.tb_CH2TCP_port.TabIndex = 75; + // + // uiGroupBox2 + // + this.uiGroupBox2.Controls.Add(this.bt_CH1TCPsave); + this.uiGroupBox2.Controls.Add(this.label4); + this.uiGroupBox2.Controls.Add(this.lb_CH1TCP_ConnectStatus); + this.uiGroupBox2.Controls.Add(this.bt_CH1TCP_Reconnect); + this.uiGroupBox2.Controls.Add(this.bt_CH1TCP_Disconnect); + this.uiGroupBox2.Controls.Add(this.tb_CH1TCP_ip); + this.uiGroupBox2.Controls.Add(this.label8); + this.uiGroupBox2.Controls.Add(this.label13); + this.uiGroupBox2.Controls.Add(this.tb_CH1TCP_port); + this.uiGroupBox2.FillColor = System.Drawing.Color.Transparent; + this.uiGroupBox2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox2.Location = new System.Drawing.Point(29, 5); + this.uiGroupBox2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox2.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox2.Name = "uiGroupBox2"; + this.uiGroupBox2.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox2.Size = new System.Drawing.Size(221, 490); + this.uiGroupBox2.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox2.TabIndex = 73; + this.uiGroupBox2.Text = "扫码枪1网口设置"; + this.uiGroupBox2.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // bt_CH1TCPsave + // + this.bt_CH1TCPsave.Location = new System.Drawing.Point(48, 351); + this.bt_CH1TCPsave.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH1TCPsave.Name = "bt_CH1TCPsave"; + this.bt_CH1TCPsave.Size = new System.Drawing.Size(125, 45); + this.bt_CH1TCPsave.TabIndex = 80; + this.bt_CH1TCPsave.TabStop = false; + this.bt_CH1TCPsave.Text = "保存"; + this.bt_CH1TCPsave.UseVisualStyleBackColor = true; + this.bt_CH1TCPsave.Click += new System.EventHandler(this.bt_CH1TCPsave_Click); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("宋体", 12F); + this.label4.Location = new System.Drawing.Point(62, 163); + this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(87, 16); + this.label4.TabIndex = 79; + this.label4.Text = "连接状态:"; + // + // lb_CH1TCP_ConnectStatus + // + this.lb_CH1TCP_ConnectStatus.AutoSize = true; + this.lb_CH1TCP_ConnectStatus.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH1TCP_ConnectStatus.Location = new System.Drawing.Point(94, 192); + this.lb_CH1TCP_ConnectStatus.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lb_CH1TCP_ConnectStatus.Name = "lb_CH1TCP_ConnectStatus"; + this.lb_CH1TCP_ConnectStatus.Size = new System.Drawing.Size(23, 16); + this.lb_CH1TCP_ConnectStatus.TabIndex = 78; + this.lb_CH1TCP_ConnectStatus.Text = "##"; + // + // bt_CH1TCP_Reconnect + // + this.bt_CH1TCP_Reconnect.Location = new System.Drawing.Point(48, 224); + this.bt_CH1TCP_Reconnect.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH1TCP_Reconnect.Name = "bt_CH1TCP_Reconnect"; + this.bt_CH1TCP_Reconnect.Size = new System.Drawing.Size(125, 45); + this.bt_CH1TCP_Reconnect.TabIndex = 76; + this.bt_CH1TCP_Reconnect.TabStop = false; + this.bt_CH1TCP_Reconnect.Text = "重新连接"; + this.bt_CH1TCP_Reconnect.UseVisualStyleBackColor = true; + this.bt_CH1TCP_Reconnect.Click += new System.EventHandler(this.bt_CH1TCP_Reconnect_Click); + // + // bt_CH1TCP_Disconnect + // + this.bt_CH1TCP_Disconnect.Location = new System.Drawing.Point(48, 286); + this.bt_CH1TCP_Disconnect.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH1TCP_Disconnect.Name = "bt_CH1TCP_Disconnect"; + this.bt_CH1TCP_Disconnect.Size = new System.Drawing.Size(125, 45); + this.bt_CH1TCP_Disconnect.TabIndex = 77; + this.bt_CH1TCP_Disconnect.Text = "断开连接"; + this.bt_CH1TCP_Disconnect.UseVisualStyleBackColor = true; + this.bt_CH1TCP_Disconnect.Click += new System.EventHandler(this.bt_CH1TCP_Disconnect_Click); + // + // tb_CH1TCP_ip + // + this.tb_CH1TCP_ip.Location = new System.Drawing.Point(71, 43); + this.tb_CH1TCP_ip.Name = "tb_CH1TCP_ip"; + this.tb_CH1TCP_ip.Size = new System.Drawing.Size(131, 26); + this.tb_CH1TCP_ip.TabIndex = 73; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(27, 48); + this.label8.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(39, 16); + this.label8.TabIndex = 71; + this.label8.Text = "IP:"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(13, 87); + this.label13.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(55, 16); + this.label13.TabIndex = 74; + this.label13.Text = "端口:"; + // + // tb_CH1TCP_port + // + this.tb_CH1TCP_port.Location = new System.Drawing.Point(71, 82); + this.tb_CH1TCP_port.Name = "tb_CH1TCP_port"; + this.tb_CH1TCP_port.Size = new System.Drawing.Size(131, 26); + this.tb_CH1TCP_port.TabIndex = 75; + // + // uiGroupBox11 + // + this.uiGroupBox11.Controls.Add(this.label6); + this.uiGroupBox11.Controls.Add(this.cb_CH3PortName); + this.uiGroupBox11.Controls.Add(this.label12); + this.uiGroupBox11.Controls.Add(this.label14); + this.uiGroupBox11.Controls.Add(this.cb_CH3BaudRate); + this.uiGroupBox11.Controls.Add(this.lb_CH3Com_status); + this.uiGroupBox11.Controls.Add(this.bt_CH3Connect); + this.uiGroupBox11.Controls.Add(this.bt_CH3Break); + this.uiGroupBox11.Controls.Add(this.bt_CH3Refresh); + this.uiGroupBox11.FillColor = System.Drawing.Color.Transparent; + this.uiGroupBox11.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox11.Location = new System.Drawing.Point(450, 5); + this.uiGroupBox11.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox11.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox11.Name = "uiGroupBox11"; + this.uiGroupBox11.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox11.Size = new System.Drawing.Size(195, 408); + this.uiGroupBox11.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox11.TabIndex = 71; + this.uiGroupBox11.Text = "CH3扫码枪"; + this.uiGroupBox11.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("宋体", 12F); + this.label6.Location = new System.Drawing.Point(37, 177); + this.label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(87, 16); + this.label6.TabIndex = 70; + this.label6.Text = "串口状态:"; + // + // cb_CH3PortName + // + this.cb_CH3PortName.FormattingEnabled = true; + this.cb_CH3PortName.Location = new System.Drawing.Point(28, 58); + this.cb_CH3PortName.Margin = new System.Windows.Forms.Padding(4); + this.cb_CH3PortName.Name = "cb_CH3PortName"; + this.cb_CH3PortName.Size = new System.Drawing.Size(137, 24); + this.cb_CH3PortName.TabIndex = 67; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(25, 35); + this.label12.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(55, 16); + this.label12.TabIndex = 65; + this.label12.Text = "端口号"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(25, 101); + this.label14.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(55, 16); + this.label14.TabIndex = 66; + this.label14.Text = "波特率"; + // + // cb_CH3BaudRate + // + this.cb_CH3BaudRate.FormattingEnabled = true; + this.cb_CH3BaudRate.Items.AddRange(new object[] { + "115200", + "9600"}); + this.cb_CH3BaudRate.Location = new System.Drawing.Point(28, 125); + this.cb_CH3BaudRate.Margin = new System.Windows.Forms.Padding(4); + this.cb_CH3BaudRate.Name = "cb_CH3BaudRate"; + this.cb_CH3BaudRate.Size = new System.Drawing.Size(137, 24); + this.cb_CH3BaudRate.TabIndex = 68; + // + // lb_CH3Com_status + // + this.lb_CH3Com_status.AutoSize = true; + this.lb_CH3Com_status.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH3Com_status.Location = new System.Drawing.Point(55, 206); + this.lb_CH3Com_status.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lb_CH3Com_status.Name = "lb_CH3Com_status"; + this.lb_CH3Com_status.Size = new System.Drawing.Size(23, 16); + this.lb_CH3Com_status.TabIndex = 69; + this.lb_CH3Com_status.Text = "##"; + // + // bt_CH3Connect + // + this.bt_CH3Connect.Location = new System.Drawing.Point(33, 244); + this.bt_CH3Connect.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH3Connect.Name = "bt_CH3Connect"; + this.bt_CH3Connect.Size = new System.Drawing.Size(125, 45); + this.bt_CH3Connect.TabIndex = 62; + this.bt_CH3Connect.TabStop = false; + this.bt_CH3Connect.Text = "连接串口"; + this.bt_CH3Connect.UseVisualStyleBackColor = true; + this.bt_CH3Connect.Click += new System.EventHandler(this.bt_CH3Connect_Click); + // + // bt_CH3Break + // + this.bt_CH3Break.Location = new System.Drawing.Point(33, 348); + this.bt_CH3Break.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH3Break.Name = "bt_CH3Break"; + this.bt_CH3Break.Size = new System.Drawing.Size(125, 45); + this.bt_CH3Break.TabIndex = 63; + this.bt_CH3Break.Text = "断开连接"; + this.bt_CH3Break.UseVisualStyleBackColor = true; + this.bt_CH3Break.Click += new System.EventHandler(this.bt_CH3Break_Click); + // + // bt_CH3Refresh + // + this.bt_CH3Refresh.Location = new System.Drawing.Point(33, 296); + this.bt_CH3Refresh.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH3Refresh.Name = "bt_CH3Refresh"; + this.bt_CH3Refresh.Size = new System.Drawing.Size(125, 45); + this.bt_CH3Refresh.TabIndex = 64; + this.bt_CH3Refresh.Text = "刷新串口"; + this.bt_CH3Refresh.UseVisualStyleBackColor = true; + this.bt_CH3Refresh.Click += new System.EventHandler(this.bt_CH3Refresh_Click); + // + // uiGroupBox5 + // + this.uiGroupBox5.Controls.Add(this.label17); + this.uiGroupBox5.Controls.Add(this.cb_CH4PortName); + this.uiGroupBox5.Controls.Add(this.label18); + this.uiGroupBox5.Controls.Add(this.label19); + this.uiGroupBox5.Controls.Add(this.cb_CH4BaudRate); + this.uiGroupBox5.Controls.Add(this.lb_CH4Com_status); + this.uiGroupBox5.Controls.Add(this.bt_CH4Connect); + this.uiGroupBox5.Controls.Add(this.bt_CH4Break); + this.uiGroupBox5.Controls.Add(this.bt_CH4Refresh); + this.uiGroupBox5.FillColor = System.Drawing.Color.Transparent; + this.uiGroupBox5.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox5.Location = new System.Drawing.Point(664, 5); + this.uiGroupBox5.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox5.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox5.Name = "uiGroupBox5"; + this.uiGroupBox5.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox5.Size = new System.Drawing.Size(195, 408); + this.uiGroupBox5.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox5.TabIndex = 72; + this.uiGroupBox5.Text = "CH4扫码枪"; + this.uiGroupBox5.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Font = new System.Drawing.Font("宋体", 12F); + this.label17.Location = new System.Drawing.Point(37, 177); + this.label17.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(87, 16); + this.label17.TabIndex = 70; + this.label17.Text = "串口状态:"; + // + // cb_CH4PortName + // + this.cb_CH4PortName.FormattingEnabled = true; + this.cb_CH4PortName.Location = new System.Drawing.Point(28, 58); + this.cb_CH4PortName.Margin = new System.Windows.Forms.Padding(4); + this.cb_CH4PortName.Name = "cb_CH4PortName"; + this.cb_CH4PortName.Size = new System.Drawing.Size(137, 24); + this.cb_CH4PortName.TabIndex = 67; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(25, 35); + this.label18.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(55, 16); + this.label18.TabIndex = 65; + this.label18.Text = "端口号"; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(25, 101); + this.label19.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(55, 16); + this.label19.TabIndex = 66; + this.label19.Text = "波特率"; + // + // cb_CH4BaudRate + // + this.cb_CH4BaudRate.FormattingEnabled = true; + this.cb_CH4BaudRate.Items.AddRange(new object[] { + "115200", + "9600"}); + this.cb_CH4BaudRate.Location = new System.Drawing.Point(28, 125); + this.cb_CH4BaudRate.Margin = new System.Windows.Forms.Padding(4); + this.cb_CH4BaudRate.Name = "cb_CH4BaudRate"; + this.cb_CH4BaudRate.Size = new System.Drawing.Size(137, 24); + this.cb_CH4BaudRate.TabIndex = 68; + // + // lb_CH4Com_status + // + this.lb_CH4Com_status.AutoSize = true; + this.lb_CH4Com_status.Font = new System.Drawing.Font("宋体", 12F); + this.lb_CH4Com_status.Location = new System.Drawing.Point(55, 206); + this.lb_CH4Com_status.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lb_CH4Com_status.Name = "lb_CH4Com_status"; + this.lb_CH4Com_status.Size = new System.Drawing.Size(23, 16); + this.lb_CH4Com_status.TabIndex = 69; + this.lb_CH4Com_status.Text = "##"; + // + // bt_CH4Connect + // + this.bt_CH4Connect.Location = new System.Drawing.Point(33, 244); + this.bt_CH4Connect.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH4Connect.Name = "bt_CH4Connect"; + this.bt_CH4Connect.Size = new System.Drawing.Size(125, 45); + this.bt_CH4Connect.TabIndex = 62; + this.bt_CH4Connect.TabStop = false; + this.bt_CH4Connect.Text = "连接串口"; + this.bt_CH4Connect.UseVisualStyleBackColor = true; + this.bt_CH4Connect.Click += new System.EventHandler(this.bt_CH4Connect_Click); + // + // bt_CH4Break + // + this.bt_CH4Break.Location = new System.Drawing.Point(33, 348); + this.bt_CH4Break.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH4Break.Name = "bt_CH4Break"; + this.bt_CH4Break.Size = new System.Drawing.Size(125, 45); + this.bt_CH4Break.TabIndex = 63; + this.bt_CH4Break.Text = "断开连接"; + this.bt_CH4Break.UseVisualStyleBackColor = true; + this.bt_CH4Break.Click += new System.EventHandler(this.bt_CH4Break_Click); + // + // bt_CH4Refresh + // + this.bt_CH4Refresh.Location = new System.Drawing.Point(33, 296); + this.bt_CH4Refresh.Margin = new System.Windows.Forms.Padding(4); + this.bt_CH4Refresh.Name = "bt_CH4Refresh"; + this.bt_CH4Refresh.Size = new System.Drawing.Size(125, 45); + this.bt_CH4Refresh.TabIndex = 64; + this.bt_CH4Refresh.Text = "刷新串口"; + this.bt_CH4Refresh.UseVisualStyleBackColor = true; + this.bt_CH4Refresh.Click += new System.EventHandler(this.bt_CH4Refresh_Click); + // + // Form_SaomaSet + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1082, 546); + this.Controls.Add(this.uiTabControlMenu1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Form_SaomaSet"; + this.Text = "扫码枪设置"; + this.Load += new System.EventHandler(this.Port_Load); + this.uiGroupBox9.ResumeLayout(false); + this.uiGroupBox9.PerformLayout(); + this.tabPage_SerialPort.ResumeLayout(false); + this.uiGroupBox1.ResumeLayout(false); + this.uiGroupBox1.PerformLayout(); + this.uiTabControlMenu1.ResumeLayout(false); + this.tabPage_TCP.ResumeLayout(false); + this.uiGroupBox3.ResumeLayout(false); + this.uiGroupBox3.PerformLayout(); + this.uiGroupBox2.ResumeLayout(false); + this.uiGroupBox2.PerformLayout(); + this.uiGroupBox11.ResumeLayout(false); + this.uiGroupBox11.PerformLayout(); + this.uiGroupBox5.ResumeLayout(false); + this.uiGroupBox5.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.Timer timer_ConnectStatus; + private System.Windows.Forms.Button bt_CH1Break; + private System.Windows.Forms.Label label7; + public System.Windows.Forms.ComboBox cb_CH1PortName; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.ComboBox cb_CH1BaudRate; + public System.Windows.Forms.Label lb_CH1Com_status; + private System.Windows.Forms.Button bt_CH1Connect; + private System.Windows.Forms.Button bt_CH1Refresh; + private Sunny.UI.UIGroupBox uiGroupBox9; + private System.Windows.Forms.TabPage tabPage_SerialPort; + private Sunny.UI.UITabControlMenu uiTabControlMenu1; + private Sunny.UI.UIGroupBox uiGroupBox1; + private System.Windows.Forms.Label label1; + public System.Windows.Forms.ComboBox cb_CH2PortName; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ComboBox cb_CH2BaudRate; + public System.Windows.Forms.Label lb_CH2Com_status; + private System.Windows.Forms.Button bt_CH2Connect; + private System.Windows.Forms.Button bt_CH2Break; + private System.Windows.Forms.Button bt_CH2Refresh; + private System.Windows.Forms.TabPage tabPage_TCP; + private Sunny.UI.UIGroupBox uiGroupBox2; + private System.Windows.Forms.TextBox tb_CH1TCP_ip; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox tb_CH1TCP_port; + private System.Windows.Forms.Label label4; + public System.Windows.Forms.Label lb_CH1TCP_ConnectStatus; + private System.Windows.Forms.Button bt_CH1TCP_Reconnect; + private System.Windows.Forms.Button bt_CH1TCP_Disconnect; + private System.Windows.Forms.Button bt_CH1TCPsave; + private Sunny.UI.UIGroupBox uiGroupBox3; + private System.Windows.Forms.Button bt_CH2TCPsave; + private System.Windows.Forms.Label label5; + public System.Windows.Forms.Label lb_CH2TCP_ConnectStatus; + private System.Windows.Forms.Button bt_CH2TCP_Reconnect; + private System.Windows.Forms.Button bt_CH2TCP_Disconnect; + private System.Windows.Forms.TextBox tb_CH2TCP_ip; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox tb_CH2TCP_port; + private Sunny.UI.UIGroupBox uiGroupBox5; + private System.Windows.Forms.Label label17; + public System.Windows.Forms.ComboBox cb_CH4PortName; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.ComboBox cb_CH4BaudRate; + public System.Windows.Forms.Label lb_CH4Com_status; + private System.Windows.Forms.Button bt_CH4Connect; + private System.Windows.Forms.Button bt_CH4Break; + private System.Windows.Forms.Button bt_CH4Refresh; + private Sunny.UI.UIGroupBox uiGroupBox11; + private System.Windows.Forms.Label label6; + public System.Windows.Forms.ComboBox cb_CH3PortName; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.ComboBox cb_CH3BaudRate; + public System.Windows.Forms.Label lb_CH3Com_status; + private System.Windows.Forms.Button bt_CH3Connect; + private System.Windows.Forms.Button bt_CH3Break; + private System.Windows.Forms.Button bt_CH3Refresh; + } +} \ No newline at end of file diff --git a/SLC1-N/Form_SaomaSet.cs b/SLC1-N/Form_SaomaSet.cs new file mode 100644 index 0000000..2b6efbe --- /dev/null +++ b/SLC1-N/Form_SaomaSet.cs @@ -0,0 +1,545 @@ +using Microsoft.Office.Interop.Excel; +using NetWorkHelper.IModels; +using Sunny.UI; +using System; +using System.Drawing; +using System.Reflection.Emit; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class Form_SaomaSet : Form + { + public Form_SaomaSet(string mode) + { + InitializeComponent(); + } + + private void Port_Load(object sender, EventArgs e) + { + // 串口扫码枪初始化 + if(Form1.f1.serialport_saoma_Enabled) + SerialPort_Init(); + + // TCP扫码枪初始化 + if (Form1.f1.tcpSaoma_Enabled) + TCP_Init(); + + timer_ConnectStatus.Interval = 1000; + timer_ConnectStatus.Start(); + } + + // 串口扫码枪初始化 + private void SerialPort_Init() + { + uiTabControlMenu1.TabPages[1].Enabled = false; + uiTabControlMenu1.SelectTab($"tabPage_SerialPort"); + + var jsconfig = new JsonConfig("config.json"); + + // 串口扫码枪1 + if (Form1.f1.SerialPort_CH1Saoma.IsOpen) + { + lb_CH1Com_status.Text = "已打开"; + lb_CH1Com_status.ForeColor = Color.Green; + cb_CH1PortName.Text = Form1.f1.SerialPort_CH1Saoma.PortName; + cb_CH1BaudRate.Text = Form1.f1.SerialPort_CH1Saoma.BaudRate.ToString(); + + cb_CH1PortName.Enabled = false; + cb_CH1BaudRate.Enabled = false; + bt_CH1Connect.Enabled = false; + } + else + { + lb_CH1Com_status.Text = "未打开"; + lb_CH1Com_status.ForeColor = Color.Red; + + cb_CH1PortName.Text = jsconfig.GetValue("SerialPort_CH1PortName", "COM21"); + cb_CH1BaudRate.Text = jsconfig.GetValue("SerialPort_CH1BaudRate", 9600).ToString(); + + cb_CH1PortName.Enabled = true; + cb_CH1BaudRate.Enabled = true; + bt_CH1Connect.Enabled = true; + } + + // 串口扫码枪2 + if (Form1.f1.SerialPort_CH2Saoma.IsOpen) + { + lb_CH2Com_status.Text = "已打开"; + lb_CH2Com_status.ForeColor = Color.Green; + cb_CH2PortName.Text = Form1.f1.SerialPort_CH2Saoma.PortName; + cb_CH2BaudRate.Text = Form1.f1.SerialPort_CH2Saoma.BaudRate.ToString(); + + cb_CH2PortName.Enabled = false; + cb_CH2BaudRate.Enabled = false; + bt_CH2Connect.Enabled = false; + } + else + { + lb_CH2Com_status.Text = "未打开"; + lb_CH2Com_status.ForeColor = Color.Red; + + cb_CH2PortName.Text = jsconfig.GetValue("SerialPort_CH2PortName", "COM22"); + cb_CH2BaudRate.Text = jsconfig.GetValue("SerialPort_CH2BaudRate", 9600).ToString(); + + cb_CH2PortName.Enabled = true; + cb_CH2BaudRate.Enabled = true; + bt_CH2Connect.Enabled = true; + } + + // 串口扫码枪3 + if (Form1.f1.SerialPort_CH3Saoma.IsOpen) + { + lb_CH3Com_status.Text = "已打开"; + lb_CH3Com_status.ForeColor = Color.Green; + cb_CH3PortName.Text = Form1.f1.SerialPort_CH3Saoma.PortName; + cb_CH3BaudRate.Text = Form1.f1.SerialPort_CH3Saoma.BaudRate.ToString(); + + cb_CH3PortName.Enabled = false; + cb_CH3BaudRate.Enabled = false; + bt_CH3Connect.Enabled = false; + } + else + { + lb_CH3Com_status.Text = "未打开"; + lb_CH3Com_status.ForeColor = Color.Red; + + cb_CH3PortName.Text = jsconfig.GetValue("SerialPort_CH3PortName", "COM21"); + cb_CH3BaudRate.Text = jsconfig.GetValue("SerialPort_CH3BaudRate", 9600).ToString(); + + cb_CH3PortName.Enabled = true; + cb_CH3BaudRate.Enabled = true; + bt_CH3Connect.Enabled = true; + } + + // 串口扫码枪4 + if (Form1.f1.SerialPort_CH4Saoma.IsOpen) + { + lb_CH4Com_status.Text = "已打开"; + lb_CH4Com_status.ForeColor = Color.Green; + cb_CH4PortName.Text = Form1.f1.SerialPort_CH4Saoma.PortName; + cb_CH4BaudRate.Text = Form1.f1.SerialPort_CH4Saoma.BaudRate.ToString(); + + cb_CH4PortName.Enabled = false; + cb_CH4BaudRate.Enabled = false; + bt_CH4Connect.Enabled = false; + } + else + { + lb_CH4Com_status.Text = "未打开"; + lb_CH4Com_status.ForeColor = Color.Red; + + cb_CH4PortName.Text = jsconfig.GetValue("SerialPort_CH4PortName", "COM21"); + cb_CH4BaudRate.Text = jsconfig.GetValue("SerialPort_CH4BaudRate", 9600).ToString(); + + cb_CH4PortName.Enabled = true; + cb_CH4BaudRate.Enabled = true; + bt_CH4Connect.Enabled = true; + } + } + + // TCP扫码枪初始化 + private void TCP_Init() + { + uiTabControlMenu1.TabPages[0].Enabled = false; + uiTabControlMenu1.SelectTab($"tabPage_TCP"); + + var jsconfig = new JsonConfig("config.json"); + tb_CH1TCP_ip.Text = jsconfig.GetValue("Saoma_IP1", "192.168.1.45"); + tb_CH1TCP_port.Text = jsconfig.GetValue("Saoma_Port1", 51111).ToString(); + tb_CH2TCP_ip.Text = jsconfig.GetValue("Saoma_IP2", "192.168.1.46"); + tb_CH2TCP_port.Text = jsconfig.GetValue("Saoma_Port2", 51111).ToString(); + } + + // 串口扫码枪1连接按钮 + private void CodeCon_Click(object sender, EventArgs e) + { + try + { + //设置端口的参数,包括波特率等 + Form1.f1.SerialPort_CH1Saoma.BaudRate = Convert.ToInt32(cb_CH1BaudRate.Text); + Form1.f1.SerialPort_CH1Saoma.PortName = cb_CH1PortName.Text; + Form1.f1.SerialPort_CH1Saoma.DataBits = 8; + Form1.f1.SerialPort_CH1Saoma.StopBits = System.IO.Ports.StopBits.One; + Form1.f1.SerialPort_CH1Saoma.Parity = System.IO.Ports.Parity.None; + Form1.f1.SerialPort_CH1Saoma.Open(); + if (Form1.f1.SerialPort_CH1Saoma.IsOpen) + { + lb_CH1Com_status.Text = "已打开"; + lb_CH1Com_status.ForeColor = Color.Green; + cb_CH1PortName.Enabled = false; + cb_CH1BaudRate.Enabled = false; + bt_CH1Connect.Enabled = false; + + //将端口和波特率进行存储 + var jsconfig = new JsonConfig("config.json"); + jsconfig.SetValue("SerialPort_CH1BaudRate", cb_CH1BaudRate.Text); + jsconfig.SetValue("SerialPort_CH1PortName", cb_CH1PortName.Text); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + + // 串口扫码枪2连接按钮 + private void CH2CodeCon_Click(object sender, EventArgs e) + { + try + { + //设置端口的参数,包括波特率等 + Form1.f1.SerialPort_CH2Saoma.BaudRate = Convert.ToInt32(cb_CH2BaudRate.Text); + Form1.f1.SerialPort_CH2Saoma.PortName = cb_CH2PortName.Text; + Form1.f1.SerialPort_CH2Saoma.DataBits = 8; + Form1.f1.SerialPort_CH2Saoma.StopBits = System.IO.Ports.StopBits.One; + Form1.f1.SerialPort_CH2Saoma.Parity = System.IO.Ports.Parity.None; + Form1.f1.SerialPort_CH2Saoma.Open(); + if (Form1.f1.SerialPort_CH2Saoma.IsOpen) + { + lb_CH2Com_status.Text = "已打开"; + lb_CH2Com_status.ForeColor = Color.Green; + cb_CH2PortName.Enabled = false; + cb_CH2BaudRate.Enabled = false; + bt_CH2Connect.Enabled = false; + + //将端口和波特率进行存储 + var jsconfig = new JsonConfig("config.json"); + jsconfig.SetValue("SerialPort_CH2BaudRate", cb_CH2BaudRate.Text); + jsconfig.SetValue("SerialPort_CH2PortName", cb_CH2PortName.Text); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + + // 串口扫码枪3连接按钮 + private void bt_CH3Connect_Click(object sender, EventArgs e) + { + try + { + //设置端口的参数,包括波特率等 + Form1.f1.SerialPort_CH3Saoma.BaudRate = Convert.ToInt32(cb_CH3BaudRate.Text); + Form1.f1.SerialPort_CH3Saoma.PortName = cb_CH3PortName.Text; + Form1.f1.SerialPort_CH3Saoma.DataBits = 8; + Form1.f1.SerialPort_CH3Saoma.StopBits = System.IO.Ports.StopBits.One; + Form1.f1.SerialPort_CH3Saoma.Parity = System.IO.Ports.Parity.None; + Form1.f1.SerialPort_CH3Saoma.Open(); + if (Form1.f1.SerialPort_CH3Saoma.IsOpen) + { + lb_CH3Com_status.Text = "已打开"; + lb_CH3Com_status.ForeColor = Color.Green; + cb_CH3PortName.Enabled = false; + cb_CH3BaudRate.Enabled = false; + bt_CH3Connect.Enabled = false; + + //将端口和波特率进行存储 + var jsconfig = new JsonConfig("config.json"); + jsconfig.SetValue("SerialPort_CH3BaudRate", cb_CH3BaudRate.Text); + jsconfig.SetValue("SerialPort_CH3PortName", cb_CH3PortName.Text); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + + // 串口扫码枪4连接按钮 + private void bt_CH4Connect_Click(object sender, EventArgs e) + { + try + { + //设置端口的参数,包括波特率等 + Form1.f1.SerialPort_CH4Saoma.BaudRate = Convert.ToInt32(cb_CH4BaudRate.Text); + Form1.f1.SerialPort_CH4Saoma.PortName = cb_CH4PortName.Text; + Form1.f1.SerialPort_CH4Saoma.DataBits = 8; + Form1.f1.SerialPort_CH4Saoma.StopBits = System.IO.Ports.StopBits.One; + Form1.f1.SerialPort_CH4Saoma.Parity = System.IO.Ports.Parity.None; + Form1.f1.SerialPort_CH4Saoma.Open(); + if (Form1.f1.SerialPort_CH4Saoma.IsOpen) + { + lb_CH4Com_status.Text = "已打开"; + lb_CH4Com_status.ForeColor = Color.Green; + cb_CH4PortName.Enabled = false; + cb_CH4BaudRate.Enabled = false; + bt_CH4Connect.Enabled = false; + + //将端口和波特率进行存储 + var jsconfig = new JsonConfig("config.json"); + jsconfig.SetValue("SerialPort_CH4BaudRate", cb_CH4BaudRate.Text); + jsconfig.SetValue("SerialPort_CH4PortName", cb_CH4PortName.Text); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + + // 串口扫码枪1刷新 + private void CodeRefresh_Click(object sender, EventArgs e) + { + cb_CH1PortName.Items.Clear(); + string[] ports = System.IO.Ports.SerialPort.GetPortNames(); + cb_CH1PortName.Items.AddRange(ports); + } + + // 串口扫码枪2刷新 + private void CH2CodeRefresh_Click(object sender, EventArgs e) + { + cb_CH2PortName.Items.Clear(); + string[] ports = System.IO.Ports.SerialPort.GetPortNames(); + cb_CH2PortName.Items.AddRange(ports); + } + + // 串口扫码枪3刷新 + private void bt_CH3Refresh_Click(object sender, EventArgs e) + { + cb_CH3PortName.Items.Clear(); + string[] ports = System.IO.Ports.SerialPort.GetPortNames(); + cb_CH3PortName.Items.AddRange(ports); + } + + // 串口扫码枪4刷新 + private void bt_CH4Refresh_Click(object sender, EventArgs e) + { + cb_CH4PortName.Items.Clear(); + string[] ports = System.IO.Ports.SerialPort.GetPortNames(); + cb_CH4PortName.Items.AddRange(ports); + } + + // 串口扫码枪1关闭 + private void CodeBreak_Click(object sender, EventArgs e) + { + Form1.f1.SerialPort_CH1Saoma.Close(); + if (!Form1.f1.SerialPort_CH1Saoma.IsOpen) + { + lb_CH1Com_status.Text = "未打开"; + lb_CH1Com_status.ForeColor = Color.Red; + cb_CH1PortName.Enabled = true; + cb_CH1BaudRate.Enabled = true; + bt_CH1Connect.Enabled = true; + } + } + + // 串口扫码枪2关闭 + private void CH2CodeBreak_Click(object sender, EventArgs e) + { + Form1.f1.SerialPort_CH2Saoma.Close(); + if (!Form1.f1.SerialPort_CH2Saoma.IsOpen) + { + lb_CH2Com_status.Text = "未打开"; + lb_CH2Com_status.ForeColor = Color.Red; + cb_CH2PortName.Enabled = true; + cb_CH2BaudRate.Enabled = true; + bt_CH2Connect.Enabled = true; + } + } + + // 串口扫码枪3关闭 + private void bt_CH3Break_Click(object sender, EventArgs e) + { + Form1.f1.SerialPort_CH3Saoma.Close(); + if (!Form1.f1.SerialPort_CH3Saoma.IsOpen) + { + lb_CH3Com_status.Text = "未打开"; + lb_CH3Com_status.ForeColor = Color.Red; + cb_CH3PortName.Enabled = true; + cb_CH3BaudRate.Enabled = true; + bt_CH3Connect.Enabled = true; + } + } + + // 串口扫码枪4关闭 + private void bt_CH4Break_Click(object sender, EventArgs e) + { + Form1.f1.SerialPort_CH4Saoma.Close(); + if (!Form1.f1.SerialPort_CH4Saoma.IsOpen) + { + lb_CH4Com_status.Text = "未打开"; + lb_CH4Com_status.ForeColor = Color.Red; + cb_CH4PortName.Enabled = true; + cb_CH4BaudRate.Enabled = true; + bt_CH4Connect.Enabled = true; + } + } + + // 网口扫码枪1重连 + private void bt_CH1TCP_Reconnect_Click(object sender, EventArgs e) + { + if(tb_CH1TCP_ip.Text.Trim().IsNullOrEmpty() || tb_CH1TCP_port.Text.Trim().IsNullOrEmpty()) + return; + + try + { + Form1.f1.saomaClient1?.Reconnect(tb_CH1TCP_ip.Text.Trim(), Convert.ToInt32(tb_CH1TCP_port.Text.Trim())); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + // 网口扫码枪1断开连接 + private void bt_CH1TCP_Disconnect_Click(object sender, EventArgs e) + { + try + { + if (Form1.f1.saomaClient1 != null && Form1.f1.saomaClient1.isRunning) + { + Form1.f1.saomaClient1.Disconnect(); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + // 网口扫码枪1保存 + private void bt_CH1TCPsave_Click(object sender, EventArgs e) + { + var jsconfig = new JsonConfig("config.json"); + jsconfig.SetValue("Saoma_IP1", tb_CH1TCP_ip.Text); + jsconfig.SetValue("Saoma_Port1", tb_CH1TCP_port.Text); + } + + // 网口扫码枪2重连 + private void bt_CH2TCP_Reconnect_Click(object sender, EventArgs e) + { + if (tb_CH2TCP_ip.Text.Trim().IsNullOrEmpty() || tb_CH2TCP_port.Text.Trim().IsNullOrEmpty()) + return; + + try + { + Form1.f1.saomaClient2?.Reconnect(tb_CH2TCP_ip.Text.Trim(), Convert.ToInt32(tb_CH2TCP_port.Text.Trim())); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + // 网口扫码枪2断开连接 + private void bt_CH2TCP_Disconnect_Click(object sender, EventArgs e) + { + try + { + if (Form1.f1.saomaClient2 != null && Form1.f1.saomaClient2.isRunning) + { + Form1.f1.saomaClient2.Disconnect(); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + // 网口扫码枪2保存 + private void bt_CH2TCPsave_Click(object sender, EventArgs e) + { + var jsconfig = new JsonConfig("config.json"); + jsconfig.SetValue("Saoma_IP2", tb_CH2TCP_ip.Text); + jsconfig.SetValue("Saoma_Port2", tb_CH2TCP_port.Text); + } + + // 连接状态 - 定时器 + private void timer_ConnectStatus_Tick(object sender, EventArgs e) + { + // 串口扫码枪1 + if (Form1.f1.SerialPort_CH1Saoma.IsOpen) + { + lb_CH1Com_status.Text = "已打开"; + lb_CH1Com_status.ForeColor = Color.Green; + cb_CH1PortName.Enabled = false; + cb_CH1BaudRate.Enabled = false; + bt_CH1Connect.Enabled = false; + } + else + { + lb_CH1Com_status.Text = "未打开"; + lb_CH1Com_status.ForeColor = Color.Red; + cb_CH1PortName.Enabled = true; + cb_CH1BaudRate.Enabled = true; + bt_CH1Connect.Enabled = true; + } + // 串口扫码枪2 + if (Form1.f1.SerialPort_CH2Saoma.IsOpen) + { + lb_CH2Com_status.Text = "已打开"; + lb_CH2Com_status.ForeColor = Color.Green; + cb_CH2PortName.Enabled = false; + cb_CH2BaudRate.Enabled = false; + bt_CH2Connect.Enabled = false; + } + else + { + lb_CH2Com_status.Text = "未打开"; + lb_CH2Com_status.ForeColor = Color.Red; + cb_CH2PortName.Enabled = true; + cb_CH2BaudRate.Enabled = true; + bt_CH2Connect.Enabled = true; + } + // 串口扫码枪3 + if (Form1.f1.SerialPort_CH3Saoma.IsOpen) + { + lb_CH3Com_status.Text = "已打开"; + lb_CH3Com_status.ForeColor = Color.Green; + cb_CH3PortName.Enabled = false; + cb_CH3BaudRate.Enabled = false; + bt_CH3Connect.Enabled = false; + } + else + { + lb_CH3Com_status.Text = "未打开"; + lb_CH3Com_status.ForeColor = Color.Red; + cb_CH3PortName.Enabled = true; + cb_CH3BaudRate.Enabled = true; + bt_CH3Connect.Enabled = true; + } + // 串口扫码枪4 + if (Form1.f1.SerialPort_CH4Saoma.IsOpen) + { + lb_CH4Com_status.Text = "已打开"; + lb_CH4Com_status.ForeColor = Color.Green; + cb_CH4PortName.Enabled = false; + cb_CH4BaudRate.Enabled = false; + bt_CH4Connect.Enabled = false; + } + else + { + lb_CH4Com_status.Text = "未打开"; + lb_CH4Com_status.ForeColor = Color.Red; + cb_CH4PortName.Enabled = true; + cb_CH4BaudRate.Enabled = true; + bt_CH4Connect.Enabled = true; + } + + // 网口扫码枪1 + if (Form1.f1.saomaClient1 != null && Form1.f1.saomaClient1.isRunning) + { + lb_CH1TCP_ConnectStatus.Text = "OK"; + lb_CH1TCP_ConnectStatus.ForeColor = Color.Green; + } + else + { + lb_CH1TCP_ConnectStatus.Text = "NG"; + lb_CH1TCP_ConnectStatus.ForeColor = Color.Red; + } + // 网口扫码枪2 + if (Form1.f1.saomaClient2 != null && Form1.f1.saomaClient2.isRunning) + { + lb_CH2TCP_ConnectStatus.Text = "OK"; + lb_CH2TCP_ConnectStatus.ForeColor = Color.Green; + } + else + { + lb_CH2TCP_ConnectStatus.Text = "NG"; + lb_CH2TCP_ConnectStatus.ForeColor = Color.Red; + } + } + + + + } +} diff --git a/SLC1-N/Form_SaomaSet.resx b/SLC1-N/Form_SaomaSet.resx new file mode 100644 index 0000000..944ad16 --- /dev/null +++ b/SLC1-N/Form_SaomaSet.resx @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 62 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAACq + qnqHeoqqgAAAAAAAAAAAAAAAAAAACqiAAAAAAAAAeqgAAAAAAAAAAAAAAAAKqAAAAAAAAAAAAAqoAAAA + AAAAAAAAAAegAAAAAAAAAAAAAAAIoAAAAAAAAAAAAKcAAAAAAAAAAAAAAAAACqAAAAAAAAAACgAIenqq + qqqqqqqqqqAAAIoAAAAAAAAAoAAAAKqqqqqqqqqqqqgAAAigAAAAAAAKAAAAiqqqqqqqqqqqqqoAAACK + AAAAAAB3AAAAeHiqqqqqqqqqqqoAAAAKAAAAAACgAAAAAAqqqqqqqqqqqqoAAAAAoAAAAAqAAAAAAKqq + qqqqoAAAAAAAAAAAgAAAAAoAAAAAAAAIqqqqpwAAAAAAAAAACgAAAAoAAAAAAAAKqqqqqgAAAAAAAAAA + CgAAAAgAAAAAAAiqqqqqqqAAAAAAAAAABwAAAAoAAAAAAAAACKqqqqAAAAAAAAAACgAAAAgAAAAAAAAA + qqqqqqgAAAAAAAAACgAAAAoAAAAAAAAKqqqqqqoAAAAAAAAACgAAAAoAAAAAAAAAAAqqqqpwAAAAAAAA + CgAAAAoAAAAAAAAAAKqqqqqgAAAAAAAAiAAAAACAAAAAAAAAB6iqqqqoAAAAAAAAoAAAAACgAAAAAAAA + AACKqqqqAAAAAAAIoAAAAAAKAAAAAAAAAAqqqqqqgAAAAAAKAAAAAAAAoAAAAAAAAIqKiqqqoAAAAACg + AAAAAAAAigAAAAAAAAAAqqqqqAAAAAoAAAAAAAAACKAAAAAAAAAKqqqqqgAAAKAAAAAAAAAAAAqAAAAA + AAAAAAAAAAAAqgAAAAAAAAAAAACqgAAAAAAAAAAAAAB6gAAAAAAAAAAAAAAAeqAAAAAAAAAAAKqAAAAA + AAAAAAAAAAAAAAenoAAAAAB6qAAAAAAAAAAAAAAAAAAAAAAAinqqqqhwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////P///AAD//8AAf/8AAP/+H/8P/wAA//j//+P/ + AAD/5///+f8AAP/P///+fwAA/7gAAB8/AAD/fwAAD58AAP78AAAPzwAA/PwAAA/vAAD9/4AAD/cAAPn/ + AB//9wAA+//gD//7AAD7/+AP//sAAPv/gAf/+wAA+//4B//7AAD7//AD//sAAPv/4AP/+wAA+//+Af/7 + AAD7//wB//MAAP3/+AD/9wAA/f//AP/nAAD+//4Af+8AAP9//AB/3wAA/z//wD+/AAD/n/+AP38AAP/n + ///8/wAA//H///H/AAD//H//x/8AAP//h/w//wAA///wAf//AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAACKqAAAenAAAAAAAAAAAACoAAAAAAAAegAAAAAAAAB3AAAAAAAAAACKAAAAAA + AKAAqqqqqqqqoAAIAAAAAAoAAIqqqqqqqqoAAKAAAACAAAinqqqqqqqqAAAIAAAAoAAACqqqqqeqigAA + CgAACAAAAAiKqqoAAAAAAAAAAAoAAAAAqqqqoAAAAAAAgAAKAAAAAACqqqAAAAAAAKAACAAAAAAIqqqq + AAAAAABwAAoAAAAAAAqqqgAAAAAAcAAAAAAAAACqqqqgAAAAAAAAAHAAAAAAAKqqoAAAAAoAAAAIAAAA + AAqqqqgAAACAAAAACgAAAAAACKqqAAAIAAAAAACHAAAAAKqqqqAAoAAAAAAAAKAAAAAAAAAACAAAAAAA + AAAAdwAAAAAAigAAAAAAAAAAAAAHqKeooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////+Hj//+f/n/+f/+f/cAB7/vAAPf3gAD79+AA++/g + P//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/Ad//f/+//8/8///4B/////////////// + //////////////////8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqoAAAAAAKqoAAAAAAAAiqoA + AAAAAAAKqgAAAAAAAAiqgAAAAAAAAHqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAP//AAD//wAA//8AAP//AAD4DwAA/D8AAPw/AAD+PwAA/h8AAP8fAAD//wAA//8AAP// + AAD//wAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAAP4AAAX+ + BQAJ/wkADf4NABH/EQAW/hYAGf8ZAB3+HQAh/iEAJv4mACr+KgAt/i0AMf4xADX+NQA5/jkAPf49AEH+ + QQBF/kUAS/9LAE3+TQBR/lEAVf5VAFn+WQBe/14AYf5hAGX+ZQBp/mkAbv9uAHD/cAB1/nUAef55AH7+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFggIDhMXFxsXFxIOBgobAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFgwSIAAAAAAAAAAAAAAAAAAdEQwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMHQAA + AAAAAAAAAAAAAAAAAAAAAAAbDBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAbCAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAB0IAAAAAAAAAAAAAAAAAAAAAAAAAAwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREA + AAAAAAAAAAAAAAAAAAAACgAAACAbFgwBAQEBAQEBAQEBAQEBAQEBAQEAAAAAABsOAAAAAAAAAAAAAAAA + AAAKAAAAAAAAAAwBAQEBAQEBAQEBAQEBAQEBAQEbAAAAAAAgDgAAAAAAAAAAAAAAAA4AAAAAAAAdBAEB + AQEBAQEBAQEBAQEBAQEBAQEOAAAAAAAAGxIAAAAAAAAAAAAAGxYAAAAAAAAgICAgCgEBAQEBAQEBAQEB + AQEBAQEBAAAAAAAAAA4AAAAAAAAAAAAADAAAAAAAAAAAAAAWAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAA + AAAKAAAAAAAAAAAWHQAAAAAAAAAAAAwBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAK + AAAAAAAAAAAAAAAAACAGAQEBAQEBFgAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAOAAAAAAAAAAAAAAAA + AAgBAQEBAQEBBAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAATAAAAAAAAAAAAAAAXAQEBAQEBAQEBARYA + AAAAAAAAAAAAAAAAAAAADAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAFwEBAQEBAQYAAAAAAAAAAAAAAAAA + AAAADAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAWAQEBAQEBAQEXAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAS + AAAAAAAAAAAAAAAAAAoBBAQBAQEBAQEEAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAA + AAAAAAAOAQEBAQEBGwAAAAAAAAAAAAAAAAAAEQAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAYBAQEBAQEB + BAAAAAAAAAAAAAAAAAAbFwAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAEQwODAQBAQEBAR0AAAAAAAAAAAAA + AAAKAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAIAQBAQEBAQgAAAAAAAAAAAAAAB0WAAAAAAAAAAAA + AAoAAAAAAAAAAAAAAAAAAAARAQEBAQEBAQEdAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAMAAAAAAAAAAAA + AAAAABsbFxsRAQEBAQEKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAbEQAAAAAAAAAAAAAAAAAAAAAMAQEB + AQEBIAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAGw4AAAAAAAAAAAAAAAAAAAYBAQEBAQEBCAAAAAAAAAoA + AAAAAAAAAAAAAAAAAAAAAAAIGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCgAAAAAAAAAAAAAAAAAA + AAAAAAAAFwgdAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXDBMA + AAAAAAAAAAAAAAAAAAAAABIMGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODhIXAAAAAAAAAAAA + FxEMEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEw4IBAQECA4WIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///z///wAA///AAH//AAD//h//D/8AAP/4///j/wAA/+f///n/ + AAD/z////n8AAP+4AAAfPwAA/38AAA+fAAD+/AAAD88AAPz8AAAP7wAA/f+AAA/3AAD5/wAf//cAAPv/ + 4A//+wAA+//gD//7AAD7/4AH//sAAPv/+Af/+wAA+//wA//7AAD7/+AD//sAAPv//gH/+wAA+//8Af/z + AAD9//gA//cAAP3//wD/5wAA/v/+AH/vAAD/f/wAf98AAP8//8A/vwAA/5//gD9/AAD/5////P8AAP/x + ///x/wAA//x//8f/AAD//4f8P/8AAP//8AH//wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA/gAABf4FAAn+CQAP/g8AHv4eACv+KwAs/ywAM/8zADT/ + NAA+/j4AQv5CAEX+RQBJ/kkATP5MAFD+UABV/lUAWf9ZAF7+XgBh/mEAZf5lAGj+aABt/m0Acv5yAHX+ + dQB5/nkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkODhcAAAAAFg4O + AAAAAAAAAAAAAAAAAAAAAAAAAA8WAAAAAAAAAAAAAAAAExEAAAAAAAAAAAAAAAAAABMWAAAAAAAAAAAA + AAAAAAAAABEXAAAAAAAAAAAAAAANAAAADQQEAgQCBAIEAgQCBAAAAAAPAAAAAAAAAAAADQAAAAARAgIC + AgICAgICAgICCgAAAAAPAAAAAAAAABMAAAAAGREPBAICAgICAgICAgICAAAAAAAZAAAAAAAAFgAAAAAA + ABECAgICAgIGBwgICAgAAAAAAA8AAAAAABMAAAAAAAAAFxYFAgICAgAAAAAAAAAAAAAAAAAAAAAADgAA + AAAAAAAADwICAgICBwAAAAAAAAAAAAAADwAAAAANAAAAAAAAAAAAAAcCAgICAAAAAAAAAAAAAAANAAAA + AA0AAAAAAAAAAAAOAgICAgIHAAAAAAAAAAAAAA0AAAAADgAAAAAAAAAAAAAACgICAgIAAAAAAAAAAAAA + EwAAAAAAAAAAAAAAAAAAAA0CAgICAggAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAgICAgAAAAAA + AAAADQAAAAAAAAAXAAAAAAAAAAAADQICAgICCgAAAAAAABEAAAAAAAAAABcAAAAAAAAAAAAAABMCAgIC + AAAAAAAXAAAAAAAAAAAAABkTAAAAAAAAAAAOBAICAgQOAAAADwAAAAAAAAAAAAAAAAAOAAAAAAAAAAAA + AAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAADhMAAAAAAAAAAAAAEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAT + Dg0KCg0OEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////+Hj//+f + /n/+f/+f/cAB7/vAAPf3gAD79+AA++/gP//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/ + Ad//f/+//8/8///4B/////////////////////////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAB + AAAAAAAAAAAAAAABAAAAAQAAAAAAAAD+AAAE/wQAC/4LAAz/DAAR/hEAFf8VACP/IwA6/zoAQ/5DAFL/ + UgBb/1sAb/5vAHb+dgB5/3kAfv9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgICAgIFAAAAAAAA + AAAAAAcCAg4AAAAAAAAAAAAAAAALAwIMAAAAAAAAAAAAAAAAAAgCAwAAAAAAAAAAAAAAAAANBQIOAAAA + AAAAAAAAAAAAAAoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAPgP + AAD8PwAA/D8AAP4/AAD+HwAA/x8AAP//AAD//wAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/AEUA/wBjAP8AdgD+AIMA/wCGAP8AfAD/AHIA/wBeAP8AQAD+ + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/AAIA/wAnAP4AZgD/AKkA/wDiAP8A5QD/AMkA/wC0AP8ApQD+AJ4A/wCZAP8AnwD/ + AKgA/wC4AP8AzAD+AOkA/wDaAP8AmwD/AFwA/wAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAQAP8ATgD/AKwA/wDRAP4AuwD/AIAA/wBCAP8AIgD/ABUA/wAMAP8ABQD+ + AAIAAAAAAP8AAwD/AAYA/wANAP8AFwD+ACQA/wBMAP8AjQD/AMAA/wDTAP8AnAD+AD8A/wAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ACAD+AEQA/gC5AP4A0QD+AIcA/gA3AP4ACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABEA/gA+AP4AmwD+ + ANQA/gCmAP4AOAD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAZAP4AlgD/AOcA/wB2AP8AGQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+ACcA/wCQAP8A5gD/AH4A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD8A/wDTAP4AqwD/ACEA/wAGAP8AMAD/ + AF8A/wByAP4AcgD/AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+ + AHIA/wByAP8AcgD/AHIA/wByAP8ACwAAAAAAAAAAAP8AMQD/AMYA/wDBAP8AKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wACAP8ATAD/ANsA/wB3AP4AHwD/ + AEsA/wCHAP8AnAD/AKoA/wDSAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8ATAAAAAAAAAAAAAAAAAD/ABMA/wCYAP8AywD+ + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wA/AP8A3AD/ + AGMA/wAGAAAAAAAAAAAAAAAAAP8ACAD/AFQA/wDVAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AlAD+AAMAAAAAAAAAAAAA + AAAA/wAMAP8AhgD+AMwA/wAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ACIA/wDKAP8AfAD/AAIAAAAAAAAAAAAAAAAA/wARAP8AjgD/APIA/wD/AP4A/gD/AP8A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AzgD+ + ABQAAAAAAAAAAAAAAAAAAAAAAP8ADAD+AJkA/wC8AP8ACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD+AJ8A/gCpAP4AAwAAAAAAAAAAAAAAAAAAAAAA/gBPAP4AgAD+AIAA/gCAAP4AhAD+ + AN0A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4A+wD+ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABAA/gDJAP4AdQD+AAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ASAD/ANEA/wAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAiAP4AqwD/APkA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBCAP8A3AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AqAD/AI4A/wACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABgD/AFAA/wDRAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AHQA/wAyAP8AMgD+ADIA/wAyAP8AMgD/ADIA/wAyAP8AMgD+AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP8AuAD/AHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAWAP4A3wD/ADsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AEQA/wBTAP4AUwD/AFYA/wCDAP8A7gD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AK0A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AYAD/AL4A/wANAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBIAP4AxwD/ + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAQD/AGIA/wDkAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/APIA/wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ALwD/AMwA/wAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wBoAP4AsAD/AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAcAP4ApgD/ + APoA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wCuAP8ABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADgD/ANAA/wBDAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wB1AP4AqAD/AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAKAP4AJQD/ACYA/wAmAP8ANwD/AKEA/wD9AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wDsAP8AQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAgD/ + ANIA/wBMAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBvAP4AqwD+AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAEA/gAtAP4ArgD+APoA/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4ApQD+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABwD+ANEA/gBIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBYAP4AuwD/ABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AFMA/wDXAP8A+QD/APkA/wD5AP8A/QD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A8QD+AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AHgD/AM0A/wA4AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wApAP4A2AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wA8AP8AzQD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/gD+AJ0A/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ARwD/AMYA/wAaAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP4AzAD/AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ADQD/AHMA/wDuAP8A/gD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+APMA/wAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AkAD/AKAA/wACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AbwD/AL8A/wASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAMAP8AdgD/AMUA/wDLAP8AywD+ANIA/wD3AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wCPAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAbAP8A3wD/ + AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AGwD/AMgA/wBrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AIQA/wDxAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wDkAP8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAUA/wCOAP8ArgD/AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AFEA/gDeAP4AMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAzAP4AwwD+ + AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4AigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+AE4A/gDoAP4AKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AAYA/wB9AP8A1AD/ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ABsA/wCPAP8AngD+AJ4A/wCfAP8AvgD/APsA/wD/AP8A/wD+AP4A/wD/AP8A3wD/ACkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AQgD+ANgA/wBdAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAOAP8AmAD/AMMA/wAyAP4AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAUA/wBHAP8A1QD/AP0A/wD/AP8A/wD+AP4A/wD/AP8A/QD/ + AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wBMAP8AzgD+AHwA/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADQD/AJYA/wDNAP4AUgD/AAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AH4A/wDtAP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AN8A/wAcAAAAAAAAAAAAAAAAAP8ACwD/AGoA/wDYAP8AdQD+AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAQA/wBqAP4A4QD/ + AJwA/wAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ANQD+AHAA/wBxAP8AcQD/ + AHEA/wBxAP8AcQD+AHEA/wBxAP8AcQD/AG4A/wAmAAAAAAAAAAAA/wAqAP8ArAD/AN0A/wBMAP8AAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4AJAD/AKEA/wDnAP8AhwD/AC0A/wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wABAP8APQD+AJ4A/wDjAP8AkgD/ + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAgA/gBCAP4AqQD+ANMA/gCzAP4AXQD+AC0A/gANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gASAP4ANAD+AGsA/gC+AP4A0QD+ + AJcA/gA0AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/ADUA/wB7AP4AyAD/ + AMwA/wC/AP8AoAD/AHQA/wBVAP8APgD+ADMA/wArAP8ANAD/AEEA/wBaAP8AegD+AKcA/wDCAP8AzwD/ + AL4A/wBwAP8AKQD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD/AC8A/wBbAP8AhwD/AK8A/wDPAP8A5AD+APEA/wD1AP8A8AD/AOAA/wDJAP8AqgD+ + AIAA/wBTAP8AJQD/AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//+AB//8AAP/+AAAf/wAA//gAQAP/AAD/4D//gP8AAP/B///wfwAA/4AAAAw/AAD+AAAADh8AAPwc + AAAHDwAA/DgAAAeHAAD4eAAAB8MAAPj/AAAH4wAA+PwAAAfjAADx/AAH//EAAPH/gAf/8QAA8f8AA//x + AADx/wAD//EAAPH/wAH/8QAA8f/AAf/xAADx//wA//EAAPH/8AD/8QAA+P/gAH/jAAD4//4Af8MAAPx/ + /AB/xwAA/D/4AD+HAAD+D/8APg8AAP8H/gAcHwAA/4P+ABg/AAD/4H//wP8AAP/wD/4B/wAA//wAAAf/ + AAD//4AAP/8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA8A/gAzAP4ASwD/AFgA/gBVAP4ASQD+ + ADAA/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAEAP4ANwD+AIcA/wCzAP4AtAD+AI8A/gB1AP8AaQD+ + AGoA/gB4AP4AkgD/ALcA/gCvAP4AfwD+AC4A/wACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gADAP8ARAD+AK4A/gCWAP4AQQD/ABMA/gABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AAQD+ABYA/gBKAP4AnwD/AKYA/gA5AP4AAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD/AJsA/wCVAP8AHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AKgD/AKEA/wCMAP8ADAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ACMA/gC5AP4AUQD/AD8A/gB+AP4AuQD+ + APAA/wD2AP4A9gD+APYA/gD2AP8A9gD+APYA/gD2AP4A9gD/APYA/gD2AP4A9gD+AHkAAAAAAP4AAgD+ + AF0A/gCvAP8AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAXAP4AuAD+AC8AAAAAAAAAAAD+ + ABYA/gCfAP4A+gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+AP4A/gD+AP8A/wD+AP4A/gD+AP4AwQD/ + AAUAAAAAAAAAAAD+AEYA/wCvAP4ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD/AJwA/gBHAAAAAAAA + AAAA/wALAP4AhQD+AKoA/gCsAP8A8AD+AP4A/gD+AP4A/gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+ + AP4A/gD1AP8AHQAAAAAAAAAAAAAAAAD/AF0A/gCHAP4AAQAAAAAAAAAAAAAAAAAAAAAA/wBAAP8AlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AGgD/AKgA/wD8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDUAP8AywD/ + AMwA/wDLAP8AywD/AMsA/wBGAAAAAAAAAAAAAAAAAP8AAgD/AK0A/wAnAAAAAAAAAAAAAAAAAAAAAAD+ + AJcA/wA0AAAAAAAAAAAAAAAAAAAAAAD+AAcA/gBmAP4AjAD/AJIA/gDhAP4A/gD+AP4A/wD/AP4A/gD+ + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4ATgD+AHsAAAAAAAAAAAAA + AAAAAAAAAP4AtwD/AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP8ArQD+AP0A/gD+AP4A/gD/ + AP8A/gD+AP4A1AD+AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP4AqwAA + AAAAAAAAAAAAAAAAAAAA/gC9AP8AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD+AFAA/wBuAP4AdgD+ + ANQA/gD+AP8A/wD+AP4A/gD9AP4AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAMA/gC9AAAAAAAAAAAAAAAAAAAAAAD/ALsA/wAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AB4A/wCvAP8A/QD/AP8A/wD/AP8A/wD/AP8A/wDTAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ACAD/ALkAAAAAAAAAAAAAAAAAAAAAAP4ArwD/ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ANwD+AFAA/gBWAP4AwwD/AP8A/gD+AP4A/gD+AP0A/wBXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/gAoAP4AnAAAAAAAAAAAAAAAAAAAAAAA/gB6AP8AVgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AIwD+ALgA/gD9AP8A/wD+AP4A/gD+AP4A/gD/AMgA/gAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AHIA/gBcAAAAAAAAAAAAAAAAAAAAAAD+AB8A/wCzAP4ACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAcAP4AMgD+ADsA/wCrAP4A/gD+AP4A/gD+AP8A/QD+ + AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAQAP4AuwD+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AGUA/wCJAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAkAP8AvQD/AP4A/wD/AP8A/wD/ + AP8A/wD/AP8AwQD/AAUAAAAAAAAAAAAAAAAAAAAAAP8ABgD/AJ8A/wBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABQD+AIsA/gB2AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAkA/gAUAP8AIAD+ + AJcA/gD8AP4A/gD/AP8A/gD6AP4ARwAAAAAAAAAAAAAAAAD+AAkA/gCMAP8AdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ABQD+AIQA/gCaAP8AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + ACAA/wC0AP4A9QD+APUA/gD1AP8A9gD+APUA/gCyAAAAAAAAAAAA/gAeAP4AqgD+AG8A/wADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AEkA/wC5AP4AbgD+ABQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAbAP8AfQD+ALUA/gA3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAwA/wBkAP8AswD/ + AJgA/wBVAP8AJQD/ABEA/wAGAP8AAQD/AAIA/wAIAP8AEwD/ACgA/wBeAP8AngD/AK8A/wBVAP8ACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/gAFAP4AMAD/AHAA/gCgAP4AsAD+ALoA/wDAAP4AwAD+ALkA/gCvAP8AnAD+AGcA/gArAP4AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////+Af//4AAf/4D8B/8P/8P+AAAh/GA + AGPjAABx58AAceeAH/nn4A/558AP+efwB/nn8Af55/gD+eP4A/Hx/AHj8PwBx/h+AYf+H/4f/wAAP//A + AP////////////////////////////////8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/ACsA/wAeAP8AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD4A/gBlAP8AXgD+AEEA/wA1AP4AQgD/ + AF8A/gBmAP8AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/AG4A/wBcAP8AagD/AHsA/wB7AP8AewD/ + AHsA/wB7AP8AWwD/ADMA/wBpAP8ABgAAAAAAAAAAAAAAAAD/AGwA/gAMAP8AKQD+ALwA/wD7AP4A/gD/ + AP8A/gD+AP8A/wD+AO0A/wAIAP4AEQD/AGcAAAAAAAAAAAD/ADYA/wAzAAAAAAD/AAEA/wBtAP8A3AD/ + AP8A/wD/AP8AgQD/AGYA/wBlAP8AEQAAAAAA/wA/AP8AKAAAAAAA/gBdAP8ABAAAAAAAAAAAAP4AGwD/ + AKQA/gD0AP8A/wD+AJAAAAAAAAAAAAAAAAAAAAAAAP8ABwD+AFoAAAAAAP8AWgD/AAYAAAAAAAAAAAAA + AAAA/wBVAP8AxQD/AP8A/wDzAP8AFwAAAAAAAAAAAAAAAAD/AAwA/wBVAAAAAAD+ACYA/wBFAAAAAAAA + AAAAAAAAAP8ADwD+AIkA/wDqAP4A/gD/AIYAAAAAAAAAAAAAAAAA/wBPAP4AGwAAAAAAAAAAAP8AXwD/ + AB8AAAAAAAAAAAAAAAAA/wBAAP8ArQD/AP4A/wDuAP8AEwAAAAAA/wAnAP8AWAAAAAAAAAAAAAAAAAD/ + AAEA/gBaAP8ATwD+AAUAAAAAAP4ACAD/AGoA/gB6AP8AegD+ADMA/wBUAP4AVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/ABwA/wBgAP8AYgD/AGEA/wBhAP8AYQD/AGIA/wBfAP8AFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA/B8AAPAHAADAAQAAwAEAAJAEAACYPAAAnBwAAJwcAADOCQAAwgMAAPAH + AAD//wAA//8AAP//AAA= + + + \ No newline at end of file diff --git a/SLC1-N/Form_Save.Designer.cs b/SLC1-N/Form_Save.Designer.cs new file mode 100644 index 0000000..774f8aa --- /dev/null +++ b/SLC1-N/Form_Save.Designer.cs @@ -0,0 +1,167 @@ +namespace SLC1_N +{ + partial class Form_Save + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form_Save)); + this.chk_CSV = new System.Windows.Forms.CheckBox(); + this.bt_SaveSet = new System.Windows.Forms.Button(); + this.bt_FilePath = new System.Windows.Forms.Button(); + this.label35 = new System.Windows.Forms.Label(); + this.chk_Excel = new System.Windows.Forms.CheckBox(); + this.tb_path = new System.Windows.Forms.TextBox(); + this.FolderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); + this.bt_WarningShow = new System.Windows.Forms.Button(); + this.chk_TXT = new System.Windows.Forms.CheckBox(); + this.SuspendLayout(); + // + // chk_CSV + // + this.chk_CSV.AutoSize = true; + this.chk_CSV.Checked = true; + this.chk_CSV.CheckState = System.Windows.Forms.CheckState.Checked; + this.chk_CSV.Font = new System.Drawing.Font("宋体", 11F); + this.chk_CSV.Location = new System.Drawing.Point(116, 179); + this.chk_CSV.Name = "chk_CSV"; + this.chk_CSV.Size = new System.Drawing.Size(95, 19); + this.chk_CSV.TabIndex = 120; + this.chk_CSV.Text = "导出到csv"; + this.chk_CSV.UseVisualStyleBackColor = true; + this.chk_CSV.Visible = false; + // + // bt_SaveSet + // + this.bt_SaveSet.Location = new System.Drawing.Point(137, 271); + this.bt_SaveSet.Margin = new System.Windows.Forms.Padding(5); + this.bt_SaveSet.Name = "bt_SaveSet"; + this.bt_SaveSet.Size = new System.Drawing.Size(151, 53); + this.bt_SaveSet.TabIndex = 118; + this.bt_SaveSet.Text = "应用设置"; + this.bt_SaveSet.UseVisualStyleBackColor = true; + this.bt_SaveSet.Click += new System.EventHandler(this.Use_Set_Click); + // + // bt_FilePath + // + this.bt_FilePath.Location = new System.Drawing.Point(137, 65); + this.bt_FilePath.Margin = new System.Windows.Forms.Padding(5); + this.bt_FilePath.Name = "bt_FilePath"; + this.bt_FilePath.Size = new System.Drawing.Size(151, 53); + this.bt_FilePath.TabIndex = 111; + this.bt_FilePath.Text = "选择文件夹"; + this.bt_FilePath.UseVisualStyleBackColor = true; + this.bt_FilePath.Click += new System.EventHandler(this.BtnPath_Click); + // + // label35 + // + this.label35.AutoSize = true; + this.label35.Location = new System.Drawing.Point(17, 8); + this.label35.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(87, 16); + this.label35.TabIndex = 116; + this.label35.Text = "文件夹路径"; + // + // chk_Excel + // + this.chk_Excel.AutoSize = true; + this.chk_Excel.Font = new System.Drawing.Font("宋体", 12F); + this.chk_Excel.Location = new System.Drawing.Point(116, 148); + this.chk_Excel.Margin = new System.Windows.Forms.Padding(5); + this.chk_Excel.Name = "chk_Excel"; + this.chk_Excel.Size = new System.Drawing.Size(114, 20); + this.chk_Excel.TabIndex = 113; + this.chk_Excel.Text = "导出到Excel"; + this.chk_Excel.UseVisualStyleBackColor = true; + // + // tb_path + // + this.tb_path.Location = new System.Drawing.Point(20, 29); + this.tb_path.Margin = new System.Windows.Forms.Padding(5); + this.tb_path.Name = "tb_path"; + this.tb_path.Size = new System.Drawing.Size(384, 26); + this.tb_path.TabIndex = 110; + // + // bt_WarningShow + // + this.bt_WarningShow.Location = new System.Drawing.Point(137, 334); + this.bt_WarningShow.Margin = new System.Windows.Forms.Padding(5); + this.bt_WarningShow.Name = "bt_WarningShow"; + this.bt_WarningShow.Size = new System.Drawing.Size(151, 53); + this.bt_WarningShow.TabIndex = 121; + this.bt_WarningShow.Text = "报警记录查看"; + this.bt_WarningShow.UseVisualStyleBackColor = true; + this.bt_WarningShow.Click += new System.EventHandler(this.Warning_Click); + // + // chk_TXT + // + this.chk_TXT.AutoSize = true; + this.chk_TXT.Font = new System.Drawing.Font("宋体", 11F); + this.chk_TXT.Location = new System.Drawing.Point(116, 207); + this.chk_TXT.Name = "chk_TXT"; + this.chk_TXT.Size = new System.Drawing.Size(95, 19); + this.chk_TXT.TabIndex = 124; + this.chk_TXT.Text = "导出到txt"; + this.chk_TXT.UseVisualStyleBackColor = true; + // + // Save + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(421, 420); + this.Controls.Add(this.chk_TXT); + this.Controls.Add(this.bt_WarningShow); + this.Controls.Add(this.chk_CSV); + this.Controls.Add(this.bt_SaveSet); + this.Controls.Add(this.bt_FilePath); + this.Controls.Add(this.label35); + this.Controls.Add(this.chk_Excel); + this.Controls.Add(this.tb_path); + this.Font = new System.Drawing.Font("宋体", 12F); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4); + this.Name = "Save"; + this.Text = "存储"; + this.Load += new System.EventHandler(this.Save_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.CheckBox chk_CSV; + private System.Windows.Forms.Button bt_SaveSet; + private System.Windows.Forms.Button bt_FilePath; + private System.Windows.Forms.Label label35; + private System.Windows.Forms.CheckBox chk_Excel; + private System.Windows.Forms.TextBox tb_path; + private System.Windows.Forms.FolderBrowserDialog FolderBrowserDialog1; + private System.Windows.Forms.Button bt_WarningShow; + private System.Windows.Forms.CheckBox chk_TXT; + } +} \ No newline at end of file diff --git a/SLC1-N/Form_Save.cs b/SLC1-N/Form_Save.cs new file mode 100644 index 0000000..fa26263 --- /dev/null +++ b/SLC1-N/Form_Save.cs @@ -0,0 +1,89 @@ +using Sunny.UI.Win32; +using System; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class Form_Save : Form + { + public Form_Save() + { + InitializeComponent(); + } + + private void Save_Load(object sender, EventArgs e) + { + if (Form1.f1.User != "管理员") + { + chk_CSV.Enabled = false; + } + + var config = new JsonConfig("config.json"); + + chk_TXT.Checked = config.GetValue("TXT", true); + chk_Excel.Checked = config.GetValue("Excel", false); + chk_CSV.Checked = config.GetValue("CSV", false); + tb_path.Text = config.GetValue("FilePath", ""); + } + + // 选择文件夹 + private void BtnPath_Click(object sender, EventArgs e) + { + FolderBrowserDialog1.ShowDialog(); + tb_path.Text = FolderBrowserDialog1.SelectedPath; + } + + // 应用设置 + private void Use_Set_Click(object sender, EventArgs e) + { + var config = new JsonConfig("config.json"); + + config.SetValue("TXT", chk_TXT.Checked); + config.SetValue("Excel", chk_Excel.Checked); + config.SetValue("CSV", chk_CSV.Checked); + config.SetValue("FilePath", tb_path.Text); + + Form1.f1.filesave.TXT = chk_TXT.Checked; + Form1.f1.filesave.Excel = chk_Excel.Checked; + Form1.f1.filesave.CSV = chk_CSV.Checked; + Form1.f1.filesave.Path = tb_path.Text; + + this.Close(); + } + + public void OpenForm(System.Windows.Forms.Form frm) + { + if (frm == null) return; + foreach (System.Windows.Forms.Form f in System.Windows.Forms.Application.OpenForms) + { + if (f.Name == frm.Name) + { + f.Activate(); + f.Show(); + frm.Dispose(); + System.GC.Collect(); + System.GC.WaitForPendingFinalizers(); + return; + } + } + frm.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + frm.Show(); + System.GC.Collect(); + System.GC.WaitForPendingFinalizers(); + } + + private void Warning_Click(object sender, EventArgs e) + { + Warning wa = new Warning(); + OpenForm(wa); + } + } + + public class FileSave + { + public string Path { get; set; } + public bool Excel { get; set; } + public bool CSV { get; set; } + public bool TXT { get; set; } + } +} diff --git a/SLC1-N/Form_Save.resx b/SLC1-N/Form_Save.resx new file mode 100644 index 0000000..a48cd7e --- /dev/null +++ b/SLC1-N/Form_Save.resx @@ -0,0 +1,549 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAACq + qnqHeoqqgAAAAAAAAAAAAAAAAAAACqiAAAAAAAAAeqgAAAAAAAAAAAAAAAAKqAAAAAAAAAAAAAqoAAAA + AAAAAAAAAAegAAAAAAAAAAAAAAAIoAAAAAAAAAAAAKcAAAAAAAAAAAAAAAAACqAAAAAAAAAACgAIenqq + qqqqqqqqqqAAAIoAAAAAAAAAoAAAAKqqqqqqqqqqqqgAAAigAAAAAAAKAAAAiqqqqqqqqqqqqqoAAACK + AAAAAAB3AAAAeHiqqqqqqqqqqqoAAAAKAAAAAACgAAAAAAqqqqqqqqqqqqoAAAAAoAAAAAqAAAAAAKqq + qqqqoAAAAAAAAAAAgAAAAAoAAAAAAAAIqqqqpwAAAAAAAAAACgAAAAoAAAAAAAAKqqqqqgAAAAAAAAAA + CgAAAAgAAAAAAAiqqqqqqqAAAAAAAAAABwAAAAoAAAAAAAAACKqqqqAAAAAAAAAACgAAAAgAAAAAAAAA + qqqqqqgAAAAAAAAACgAAAAoAAAAAAAAKqqqqqqoAAAAAAAAACgAAAAoAAAAAAAAAAAqqqqpwAAAAAAAA + CgAAAAoAAAAAAAAAAKqqqqqgAAAAAAAAiAAAAACAAAAAAAAAB6iqqqqoAAAAAAAAoAAAAACgAAAAAAAA + AACKqqqqAAAAAAAIoAAAAAAKAAAAAAAAAAqqqqqqgAAAAAAKAAAAAAAAoAAAAAAAAIqKiqqqoAAAAACg + AAAAAAAAigAAAAAAAAAAqqqqqAAAAAoAAAAAAAAACKAAAAAAAAAKqqqqqgAAAKAAAAAAAAAAAAqAAAAA + AAAAAAAAAAAAqgAAAAAAAAAAAACqgAAAAAAAAAAAAAB6gAAAAAAAAAAAAAAAeqAAAAAAAAAAAKqAAAAA + AAAAAAAAAAAAAAenoAAAAAB6qAAAAAAAAAAAAAAAAAAAAAAAinqqqqhwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////P///AAD//8AAf/8AAP/+H/8P/wAA//j//+P/ + AAD/5///+f8AAP/P///+fwAA/7gAAB8/AAD/fwAAD58AAP78AAAPzwAA/PwAAA/vAAD9/4AAD/cAAPn/ + AB//9wAA+//gD//7AAD7/+AP//sAAPv/gAf/+wAA+//4B//7AAD7//AD//sAAPv/4AP/+wAA+//+Af/7 + AAD7//wB//MAAP3/+AD/9wAA/f//AP/nAAD+//4Af+8AAP9//AB/3wAA/z//wD+/AAD/n/+AP38AAP/n + ///8/wAA//H///H/AAD//H//x/8AAP//h/w//wAA///wAf//AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAACKqAAAenAAAAAAAAAAAACoAAAAAAAAegAAAAAAAAB3AAAAAAAAAACKAAAAAA + AKAAqqqqqqqqoAAIAAAAAAoAAIqqqqqqqqoAAKAAAACAAAinqqqqqqqqAAAIAAAAoAAACqqqqqeqigAA + CgAACAAAAAiKqqoAAAAAAAAAAAoAAAAAqqqqoAAAAAAAgAAKAAAAAACqqqAAAAAAAKAACAAAAAAIqqqq + AAAAAABwAAoAAAAAAAqqqgAAAAAAcAAAAAAAAACqqqqgAAAAAAAAAHAAAAAAAKqqoAAAAAoAAAAIAAAA + AAqqqqgAAACAAAAACgAAAAAACKqqAAAIAAAAAACHAAAAAKqqqqAAoAAAAAAAAKAAAAAAAAAACAAAAAAA + AAAAdwAAAAAAigAAAAAAAAAAAAAHqKeooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////+Hj//+f/n/+f/+f/cAB7/vAAPf3gAD79+AA++/g + P//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/Ad//f/+//8/8///4B/////////////// + //////////////////8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqoAAAAAAKqoAAAAAAAAiqoA + AAAAAAAKqgAAAAAAAAiqgAAAAAAAAHqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAP//AAD//wAA//8AAP//AAD4DwAA/D8AAPw/AAD+PwAA/h8AAP8fAAD//wAA//8AAP// + AAD//wAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAAP4AAAX+ + BQAJ/wkADf4NABH/EQAW/hYAGf8ZAB3+HQAh/iEAJv4mACr+KgAt/i0AMf4xADX+NQA5/jkAPf49AEH+ + QQBF/kUAS/9LAE3+TQBR/lEAVf5VAFn+WQBe/14AYf5hAGX+ZQBp/mkAbv9uAHD/cAB1/nUAef55AH7+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFggIDhMXFxsXFxIOBgobAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFgwSIAAAAAAAAAAAAAAAAAAdEQwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMHQAA + AAAAAAAAAAAAAAAAAAAAAAAbDBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAbCAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAB0IAAAAAAAAAAAAAAAAAAAAAAAAAAwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREA + AAAAAAAAAAAAAAAAAAAACgAAACAbFgwBAQEBAQEBAQEBAQEBAQEBAQEAAAAAABsOAAAAAAAAAAAAAAAA + AAAKAAAAAAAAAAwBAQEBAQEBAQEBAQEBAQEBAQEbAAAAAAAgDgAAAAAAAAAAAAAAAA4AAAAAAAAdBAEB + AQEBAQEBAQEBAQEBAQEBAQEOAAAAAAAAGxIAAAAAAAAAAAAAGxYAAAAAAAAgICAgCgEBAQEBAQEBAQEB + AQEBAQEBAAAAAAAAAA4AAAAAAAAAAAAADAAAAAAAAAAAAAAWAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAA + AAAKAAAAAAAAAAAWHQAAAAAAAAAAAAwBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAK + AAAAAAAAAAAAAAAAACAGAQEBAQEBFgAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAOAAAAAAAAAAAAAAAA + AAgBAQEBAQEBBAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAATAAAAAAAAAAAAAAAXAQEBAQEBAQEBARYA + AAAAAAAAAAAAAAAAAAAADAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAFwEBAQEBAQYAAAAAAAAAAAAAAAAA + AAAADAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAWAQEBAQEBAQEXAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAS + AAAAAAAAAAAAAAAAAAoBBAQBAQEBAQEEAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAA + AAAAAAAOAQEBAQEBGwAAAAAAAAAAAAAAAAAAEQAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAYBAQEBAQEB + BAAAAAAAAAAAAAAAAAAbFwAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAEQwODAQBAQEBAR0AAAAAAAAAAAAA + AAAKAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAIAQBAQEBAQgAAAAAAAAAAAAAAB0WAAAAAAAAAAAA + AAoAAAAAAAAAAAAAAAAAAAARAQEBAQEBAQEdAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAMAAAAAAAAAAAA + AAAAABsbFxsRAQEBAQEKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAbEQAAAAAAAAAAAAAAAAAAAAAMAQEB + AQEBIAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAGw4AAAAAAAAAAAAAAAAAAAYBAQEBAQEBCAAAAAAAAAoA + AAAAAAAAAAAAAAAAAAAAAAAIGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCgAAAAAAAAAAAAAAAAAA + AAAAAAAAFwgdAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXDBMA + AAAAAAAAAAAAAAAAAAAAABIMGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODhIXAAAAAAAAAAAA + FxEMEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEw4IBAQECA4WIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///z///wAA///AAH//AAD//h//D/8AAP/4///j/wAA/+f///n/ + AAD/z////n8AAP+4AAAfPwAA/38AAA+fAAD+/AAAD88AAPz8AAAP7wAA/f+AAA/3AAD5/wAf//cAAPv/ + 4A//+wAA+//gD//7AAD7/4AH//sAAPv/+Af/+wAA+//wA//7AAD7/+AD//sAAPv//gH/+wAA+//8Af/z + AAD9//gA//cAAP3//wD/5wAA/v/+AH/vAAD/f/wAf98AAP8//8A/vwAA/5//gD9/AAD/5////P8AAP/x + ///x/wAA//x//8f/AAD//4f8P/8AAP//8AH//wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA/gAABf4FAAn+CQAP/g8AHv4eACv+KwAs/ywAM/8zADT/ + NAA+/j4AQv5CAEX+RQBJ/kkATP5MAFD+UABV/lUAWf9ZAF7+XgBh/mEAZf5lAGj+aABt/m0Acv5yAHX+ + dQB5/nkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkODhcAAAAAFg4O + AAAAAAAAAAAAAAAAAAAAAAAAAA8WAAAAAAAAAAAAAAAAExEAAAAAAAAAAAAAAAAAABMWAAAAAAAAAAAA + AAAAAAAAABEXAAAAAAAAAAAAAAANAAAADQQEAgQCBAIEAgQCBAAAAAAPAAAAAAAAAAAADQAAAAARAgIC + AgICAgICAgICCgAAAAAPAAAAAAAAABMAAAAAGREPBAICAgICAgICAgICAAAAAAAZAAAAAAAAFgAAAAAA + ABECAgICAgIGBwgICAgAAAAAAA8AAAAAABMAAAAAAAAAFxYFAgICAgAAAAAAAAAAAAAAAAAAAAAADgAA + AAAAAAAADwICAgICBwAAAAAAAAAAAAAADwAAAAANAAAAAAAAAAAAAAcCAgICAAAAAAAAAAAAAAANAAAA + AA0AAAAAAAAAAAAOAgICAgIHAAAAAAAAAAAAAA0AAAAADgAAAAAAAAAAAAAACgICAgIAAAAAAAAAAAAA + EwAAAAAAAAAAAAAAAAAAAA0CAgICAggAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAgICAgAAAAAA + AAAADQAAAAAAAAAXAAAAAAAAAAAADQICAgICCgAAAAAAABEAAAAAAAAAABcAAAAAAAAAAAAAABMCAgIC + AAAAAAAXAAAAAAAAAAAAABkTAAAAAAAAAAAOBAICAgQOAAAADwAAAAAAAAAAAAAAAAAOAAAAAAAAAAAA + AAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAADhMAAAAAAAAAAAAAEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAT + Dg0KCg0OEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////+Hj//+f + /n/+f/+f/cAB7/vAAPf3gAD79+AA++/gP//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/ + Ad//f/+//8/8///4B/////////////////////////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAB + AAAAAAAAAAAAAAABAAAAAQAAAAAAAAD+AAAE/wQAC/4LAAz/DAAR/hEAFf8VACP/IwA6/zoAQ/5DAFL/ + UgBb/1sAb/5vAHb+dgB5/3kAfv9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgICAgIFAAAAAAAA + AAAAAAcCAg4AAAAAAAAAAAAAAAALAwIMAAAAAAAAAAAAAAAAAAgCAwAAAAAAAAAAAAAAAAANBQIOAAAA + AAAAAAAAAAAAAAoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAPgP + AAD8PwAA/D8AAP4/AAD+HwAA/x8AAP//AAD//wAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/AEUA/wBjAP8AdgD+AIMA/wCGAP8AfAD/AHIA/wBeAP8AQAD+ + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/AAIA/wAnAP4AZgD/AKkA/wDiAP8A5QD/AMkA/wC0AP8ApQD+AJ4A/wCZAP8AnwD/ + AKgA/wC4AP8AzAD+AOkA/wDaAP8AmwD/AFwA/wAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAQAP8ATgD/AKwA/wDRAP4AuwD/AIAA/wBCAP8AIgD/ABUA/wAMAP8ABQD+ + AAIAAAAAAP8AAwD/AAYA/wANAP8AFwD+ACQA/wBMAP8AjQD/AMAA/wDTAP8AnAD+AD8A/wAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ACAD+AEQA/gC5AP4A0QD+AIcA/gA3AP4ACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABEA/gA+AP4AmwD+ + ANQA/gCmAP4AOAD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAZAP4AlgD/AOcA/wB2AP8AGQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+ACcA/wCQAP8A5gD/AH4A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD8A/wDTAP4AqwD/ACEA/wAGAP8AMAD/ + AF8A/wByAP4AcgD/AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+ + AHIA/wByAP8AcgD/AHIA/wByAP8ACwAAAAAAAAAAAP8AMQD/AMYA/wDBAP8AKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wACAP8ATAD/ANsA/wB3AP4AHwD/ + AEsA/wCHAP8AnAD/AKoA/wDSAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8ATAAAAAAAAAAAAAAAAAD/ABMA/wCYAP8AywD+ + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wA/AP8A3AD/ + AGMA/wAGAAAAAAAAAAAAAAAAAP8ACAD/AFQA/wDVAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AlAD+AAMAAAAAAAAAAAAA + AAAA/wAMAP8AhgD+AMwA/wAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ACIA/wDKAP8AfAD/AAIAAAAAAAAAAAAAAAAA/wARAP8AjgD/APIA/wD/AP4A/gD/AP8A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AzgD+ + ABQAAAAAAAAAAAAAAAAAAAAAAP8ADAD+AJkA/wC8AP8ACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD+AJ8A/gCpAP4AAwAAAAAAAAAAAAAAAAAAAAAA/gBPAP4AgAD+AIAA/gCAAP4AhAD+ + AN0A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4A+wD+ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABAA/gDJAP4AdQD+AAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ASAD/ANEA/wAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAiAP4AqwD/APkA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBCAP8A3AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AqAD/AI4A/wACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABgD/AFAA/wDRAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AHQA/wAyAP8AMgD+ADIA/wAyAP8AMgD/ADIA/wAyAP8AMgD+AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP8AuAD/AHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAWAP4A3wD/ADsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AEQA/wBTAP4AUwD/AFYA/wCDAP8A7gD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AK0A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AYAD/AL4A/wANAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBIAP4AxwD/ + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAQD/AGIA/wDkAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/APIA/wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ALwD/AMwA/wAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wBoAP4AsAD/AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAcAP4ApgD/ + APoA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wCuAP8ABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADgD/ANAA/wBDAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wB1AP4AqAD/AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAKAP4AJQD/ACYA/wAmAP8ANwD/AKEA/wD9AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wDsAP8AQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAgD/ + ANIA/wBMAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBvAP4AqwD+AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAEA/gAtAP4ArgD+APoA/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4ApQD+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABwD+ANEA/gBIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBYAP4AuwD/ABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AFMA/wDXAP8A+QD/APkA/wD5AP8A/QD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A8QD+AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AHgD/AM0A/wA4AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wApAP4A2AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wA8AP8AzQD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/gD+AJ0A/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ARwD/AMYA/wAaAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP4AzAD/AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ADQD/AHMA/wDuAP8A/gD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+APMA/wAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AkAD/AKAA/wACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AbwD/AL8A/wASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAMAP8AdgD/AMUA/wDLAP8AywD+ANIA/wD3AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wCPAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAbAP8A3wD/ + AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AGwD/AMgA/wBrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AIQA/wDxAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wDkAP8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAUA/wCOAP8ArgD/AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AFEA/gDeAP4AMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAzAP4AwwD+ + AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4AigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+AE4A/gDoAP4AKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AAYA/wB9AP8A1AD/ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ABsA/wCPAP8AngD+AJ4A/wCfAP8AvgD/APsA/wD/AP8A/wD+AP4A/wD/AP8A3wD/ACkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AQgD+ANgA/wBdAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAOAP8AmAD/AMMA/wAyAP4AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAUA/wBHAP8A1QD/AP0A/wD/AP8A/wD+AP4A/wD/AP8A/QD/ + AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wBMAP8AzgD+AHwA/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADQD/AJYA/wDNAP4AUgD/AAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AH4A/wDtAP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AN8A/wAcAAAAAAAAAAAAAAAAAP8ACwD/AGoA/wDYAP8AdQD+AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAQA/wBqAP4A4QD/ + AJwA/wAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ANQD+AHAA/wBxAP8AcQD/ + AHEA/wBxAP8AcQD+AHEA/wBxAP8AcQD/AG4A/wAmAAAAAAAAAAAA/wAqAP8ArAD/AN0A/wBMAP8AAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4AJAD/AKEA/wDnAP8AhwD/AC0A/wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wABAP8APQD+AJ4A/wDjAP8AkgD/ + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAgA/gBCAP4AqQD+ANMA/gCzAP4AXQD+AC0A/gANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gASAP4ANAD+AGsA/gC+AP4A0QD+ + AJcA/gA0AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/ADUA/wB7AP4AyAD/ + AMwA/wC/AP8AoAD/AHQA/wBVAP8APgD+ADMA/wArAP8ANAD/AEEA/wBaAP8AegD+AKcA/wDCAP8AzwD/ + AL4A/wBwAP8AKQD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD/AC8A/wBbAP8AhwD/AK8A/wDPAP8A5AD+APEA/wD1AP8A8AD/AOAA/wDJAP8AqgD+ + AIAA/wBTAP8AJQD/AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//+AB//8AAP/+AAAf/wAA//gAQAP/AAD/4D//gP8AAP/B///wfwAA/4AAAAw/AAD+AAAADh8AAPwc + AAAHDwAA/DgAAAeHAAD4eAAAB8MAAPj/AAAH4wAA+PwAAAfjAADx/AAH//EAAPH/gAf/8QAA8f8AA//x + AADx/wAD//EAAPH/wAH/8QAA8f/AAf/xAADx//wA//EAAPH/8AD/8QAA+P/gAH/jAAD4//4Af8MAAPx/ + /AB/xwAA/D/4AD+HAAD+D/8APg8AAP8H/gAcHwAA/4P+ABg/AAD/4H//wP8AAP/wD/4B/wAA//wAAAf/ + AAD//4AAP/8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA8A/gAzAP4ASwD/AFgA/gBVAP4ASQD+ + ADAA/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAEAP4ANwD+AIcA/wCzAP4AtAD+AI8A/gB1AP8AaQD+ + AGoA/gB4AP4AkgD/ALcA/gCvAP4AfwD+AC4A/wACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gADAP8ARAD+AK4A/gCWAP4AQQD/ABMA/gABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AAQD+ABYA/gBKAP4AnwD/AKYA/gA5AP4AAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD/AJsA/wCVAP8AHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AKgD/AKEA/wCMAP8ADAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ACMA/gC5AP4AUQD/AD8A/gB+AP4AuQD+ + APAA/wD2AP4A9gD+APYA/gD2AP8A9gD+APYA/gD2AP4A9gD/APYA/gD2AP4A9gD+AHkAAAAAAP4AAgD+ + AF0A/gCvAP8AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAXAP4AuAD+AC8AAAAAAAAAAAD+ + ABYA/gCfAP4A+gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+AP4A/gD+AP8A/wD+AP4A/gD+AP4AwQD/ + AAUAAAAAAAAAAAD+AEYA/wCvAP4ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD/AJwA/gBHAAAAAAAA + AAAA/wALAP4AhQD+AKoA/gCsAP8A8AD+AP4A/gD+AP4A/gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+ + AP4A/gD1AP8AHQAAAAAAAAAAAAAAAAD/AF0A/gCHAP4AAQAAAAAAAAAAAAAAAAAAAAAA/wBAAP8AlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AGgD/AKgA/wD8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDUAP8AywD/ + AMwA/wDLAP8AywD/AMsA/wBGAAAAAAAAAAAAAAAAAP8AAgD/AK0A/wAnAAAAAAAAAAAAAAAAAAAAAAD+ + AJcA/wA0AAAAAAAAAAAAAAAAAAAAAAD+AAcA/gBmAP4AjAD/AJIA/gDhAP4A/gD+AP4A/wD/AP4A/gD+ + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4ATgD+AHsAAAAAAAAAAAAA + AAAAAAAAAP4AtwD/AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP8ArQD+AP0A/gD+AP4A/gD/ + AP8A/gD+AP4A1AD+AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP4AqwAA + AAAAAAAAAAAAAAAAAAAA/gC9AP8AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD+AFAA/wBuAP4AdgD+ + ANQA/gD+AP8A/wD+AP4A/gD9AP4AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAMA/gC9AAAAAAAAAAAAAAAAAAAAAAD/ALsA/wAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AB4A/wCvAP8A/QD/AP8A/wD/AP8A/wD/AP8A/wDTAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ACAD/ALkAAAAAAAAAAAAAAAAAAAAAAP4ArwD/ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ANwD+AFAA/gBWAP4AwwD/AP8A/gD+AP4A/gD+AP0A/wBXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/gAoAP4AnAAAAAAAAAAAAAAAAAAAAAAA/gB6AP8AVgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AIwD+ALgA/gD9AP8A/wD+AP4A/gD+AP4A/gD/AMgA/gAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AHIA/gBcAAAAAAAAAAAAAAAAAAAAAAD+AB8A/wCzAP4ACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAcAP4AMgD+ADsA/wCrAP4A/gD+AP4A/gD+AP8A/QD+ + AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAQAP4AuwD+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AGUA/wCJAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAkAP8AvQD/AP4A/wD/AP8A/wD/ + AP8A/wD/AP8AwQD/AAUAAAAAAAAAAAAAAAAAAAAAAP8ABgD/AJ8A/wBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABQD+AIsA/gB2AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAkA/gAUAP8AIAD+ + AJcA/gD8AP4A/gD/AP8A/gD6AP4ARwAAAAAAAAAAAAAAAAD+AAkA/gCMAP8AdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ABQD+AIQA/gCaAP8AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + ACAA/wC0AP4A9QD+APUA/gD1AP8A9gD+APUA/gCyAAAAAAAAAAAA/gAeAP4AqgD+AG8A/wADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AEkA/wC5AP4AbgD+ABQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAbAP8AfQD+ALUA/gA3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAwA/wBkAP8AswD/ + AJgA/wBVAP8AJQD/ABEA/wAGAP8AAQD/AAIA/wAIAP8AEwD/ACgA/wBeAP8AngD/AK8A/wBVAP8ACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/gAFAP4AMAD/AHAA/gCgAP4AsAD+ALoA/wDAAP4AwAD+ALkA/gCvAP8AnAD+AGcA/gArAP4AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////+Af//4AAf/4D8B/8P/8P+AAAh/GA + AGPjAABx58AAceeAH/nn4A/558AP+efwB/nn8Af55/gD+eP4A/Hx/AHj8PwBx/h+AYf+H/4f/wAAP//A + AP////////////////////////////////8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/ACsA/wAeAP8AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD4A/gBlAP8AXgD+AEEA/wA1AP4AQgD/ + AF8A/gBmAP8AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/AG4A/wBcAP8AagD/AHsA/wB7AP8AewD/ + AHsA/wB7AP8AWwD/ADMA/wBpAP8ABgAAAAAAAAAAAAAAAAD/AGwA/gAMAP8AKQD+ALwA/wD7AP4A/gD/ + AP8A/gD+AP8A/wD+AO0A/wAIAP4AEQD/AGcAAAAAAAAAAAD/ADYA/wAzAAAAAAD/AAEA/wBtAP8A3AD/ + AP8A/wD/AP8AgQD/AGYA/wBlAP8AEQAAAAAA/wA/AP8AKAAAAAAA/gBdAP8ABAAAAAAAAAAAAP4AGwD/ + AKQA/gD0AP8A/wD+AJAAAAAAAAAAAAAAAAAAAAAAAP8ABwD+AFoAAAAAAP8AWgD/AAYAAAAAAAAAAAAA + AAAA/wBVAP8AxQD/AP8A/wDzAP8AFwAAAAAAAAAAAAAAAAD/AAwA/wBVAAAAAAD+ACYA/wBFAAAAAAAA + AAAAAAAAAP8ADwD+AIkA/wDqAP4A/gD/AIYAAAAAAAAAAAAAAAAA/wBPAP4AGwAAAAAAAAAAAP8AXwD/ + AB8AAAAAAAAAAAAAAAAA/wBAAP8ArQD/AP4A/wDuAP8AEwAAAAAA/wAnAP8AWAAAAAAAAAAAAAAAAAD/ + AAEA/gBaAP8ATwD+AAUAAAAAAP4ACAD/AGoA/gB6AP8AegD+ADMA/wBUAP4AVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/ABwA/wBgAP8AYgD/AGEA/wBhAP8AYQD/AGIA/wBfAP8AFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA/B8AAPAHAADAAQAAwAEAAJAEAACYPAAAnBwAAJwcAADOCQAAwgMAAPAH + AAD//wAA//8AAP//AAA= + + + \ No newline at end of file diff --git a/SLC1-N/Form_hbMESset.Designer.cs b/SLC1-N/Form_hbMESset.Designer.cs new file mode 100644 index 0000000..94c849f --- /dev/null +++ b/SLC1-N/Form_hbMESset.Designer.cs @@ -0,0 +1,257 @@ +namespace SLC1_N +{ + partial class Form_hbMESset + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form_hbMESset)); + this.bt_save = new System.Windows.Forms.Button(); + this.tb_url_ip = new System.Windows.Forms.TextBox(); + this.lb_ = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.tb_url_port = new System.Windows.Forms.TextBox(); + this.tb_partno = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.tb_station = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.tb_workorder = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.tb_fixturecode = new System.Windows.Forms.TextBox(); + this.tb_equipmentno = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.tb_plan = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // bt_save + // + this.bt_save.Font = new System.Drawing.Font("宋体", 15F); + this.bt_save.Location = new System.Drawing.Point(284, 210); + this.bt_save.Name = "bt_save"; + this.bt_save.Size = new System.Drawing.Size(101, 59); + this.bt_save.TabIndex = 0; + this.bt_save.Text = "保存"; + this.bt_save.UseVisualStyleBackColor = true; + this.bt_save.Click += new System.EventHandler(this.bt_save_Click); + // + // tb_url_ip + // + this.tb_url_ip.Font = new System.Drawing.Font("宋体", 15F); + this.tb_url_ip.Location = new System.Drawing.Point(148, 28); + this.tb_url_ip.Name = "tb_url_ip"; + this.tb_url_ip.Size = new System.Drawing.Size(165, 30); + this.tb_url_ip.TabIndex = 1; + // + // lb_ + // + this.lb_.AutoSize = true; + this.lb_.Font = new System.Drawing.Font("宋体", 15F); + this.lb_.Location = new System.Drawing.Point(51, 31); + this.lb_.Name = "lb_"; + this.lb_.Size = new System.Drawing.Size(79, 20); + this.lb_.TabIndex = 2; + this.lb_.Text = "url IP:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("宋体", 15F); + this.label1.Location = new System.Drawing.Point(335, 34); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(99, 20); + this.label1.TabIndex = 4; + this.label1.Text = "url 端口:"; + // + // tb_url_port + // + this.tb_url_port.Font = new System.Drawing.Font("宋体", 15F); + this.tb_url_port.Location = new System.Drawing.Point(438, 31); + this.tb_url_port.Name = "tb_url_port"; + this.tb_url_port.Size = new System.Drawing.Size(165, 30); + this.tb_url_port.TabIndex = 3; + // + // tb_partno + // + this.tb_partno.Font = new System.Drawing.Font("宋体", 15F); + this.tb_partno.Location = new System.Drawing.Point(148, 68); + this.tb_partno.Name = "tb_partno"; + this.tb_partno.Size = new System.Drawing.Size(165, 30); + this.tb_partno.TabIndex = 1; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("宋体", 15F); + this.label2.Location = new System.Drawing.Point(71, 71); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(59, 20); + this.label2.TabIndex = 2; + this.label2.Text = "料号:"; + // + // tb_station + // + this.tb_station.Font = new System.Drawing.Font("宋体", 15F); + this.tb_station.Location = new System.Drawing.Point(438, 71); + this.tb_station.Name = "tb_station"; + this.tb_station.Size = new System.Drawing.Size(165, 30); + this.tb_station.TabIndex = 3; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("宋体", 15F); + this.label3.Location = new System.Drawing.Point(335, 74); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(99, 20); + this.label3.TabIndex = 4; + this.label3.Text = "工站名称:"; + // + // tb_workorder + // + this.tb_workorder.Font = new System.Drawing.Font("宋体", 15F); + this.tb_workorder.Location = new System.Drawing.Point(148, 108); + this.tb_workorder.Name = "tb_workorder"; + this.tb_workorder.Size = new System.Drawing.Size(165, 30); + this.tb_workorder.TabIndex = 1; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("宋体", 15F); + this.label4.Location = new System.Drawing.Point(71, 111); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(59, 20); + this.label4.TabIndex = 2; + this.label4.Text = "工单:"; + // + // tb_fixturecode + // + this.tb_fixturecode.Font = new System.Drawing.Font("宋体", 15F); + this.tb_fixturecode.Location = new System.Drawing.Point(148, 147); + this.tb_fixturecode.Name = "tb_fixturecode"; + this.tb_fixturecode.Size = new System.Drawing.Size(165, 30); + this.tb_fixturecode.TabIndex = 1; + // + // tb_equipmentno + // + this.tb_equipmentno.Font = new System.Drawing.Font("宋体", 15F); + this.tb_equipmentno.Location = new System.Drawing.Point(438, 111); + this.tb_equipmentno.Name = "tb_equipmentno"; + this.tb_equipmentno.Size = new System.Drawing.Size(165, 30); + this.tb_equipmentno.TabIndex = 3; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("宋体", 15F); + this.label5.Location = new System.Drawing.Point(31, 150); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(99, 20); + this.label5.TabIndex = 2; + this.label5.Text = "夹具编号:"; + // + // tb_plan + // + this.tb_plan.Font = new System.Drawing.Font("宋体", 15F); + this.tb_plan.Location = new System.Drawing.Point(438, 150); + this.tb_plan.Name = "tb_plan"; + this.tb_plan.Size = new System.Drawing.Size(165, 30); + this.tb_plan.TabIndex = 3; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("宋体", 15F); + this.label6.Location = new System.Drawing.Point(335, 114); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(99, 20); + this.label6.TabIndex = 4; + this.label6.Text = "设备编号:"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("宋体", 15F); + this.label7.Location = new System.Drawing.Point(373, 153); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(59, 20); + this.label7.TabIndex = 4; + this.label7.Text = "工厂:"; + // + // Form_gdMESset + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(651, 291); + this.Controls.Add(this.label7); + this.Controls.Add(this.label3); + this.Controls.Add(this.label6); + this.Controls.Add(this.label1); + this.Controls.Add(this.tb_plan); + this.Controls.Add(this.label5); + this.Controls.Add(this.tb_station); + this.Controls.Add(this.tb_equipmentno); + this.Controls.Add(this.label2); + this.Controls.Add(this.tb_fixturecode); + this.Controls.Add(this.tb_url_port); + this.Controls.Add(this.label4); + this.Controls.Add(this.tb_partno); + this.Controls.Add(this.tb_workorder); + this.Controls.Add(this.lb_); + this.Controls.Add(this.tb_url_ip); + this.Controls.Add(this.bt_save); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Form_gdMESset"; + this.Text = "MES设置"; + this.Load += new System.EventHandler(this.Form_gdMESset_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button bt_save; + private System.Windows.Forms.TextBox tb_url_ip; + private System.Windows.Forms.Label lb_; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox tb_url_port; + private System.Windows.Forms.TextBox tb_partno; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox tb_station; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox tb_workorder; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox tb_fixturecode; + private System.Windows.Forms.TextBox tb_equipmentno; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox tb_plan; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + } +} \ No newline at end of file diff --git a/SLC1-N/Form_hbMESset.cs b/SLC1-N/Form_hbMESset.cs new file mode 100644 index 0000000..48d563e --- /dev/null +++ b/SLC1-N/Form_hbMESset.cs @@ -0,0 +1,56 @@ +using Sunny.UI; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class Form_hbMESset : Form + { + public Form_hbMESset() + { + InitializeComponent(); + } + + private void Form_gdMESset_Load(object sender, EventArgs e) + { + tb_partno.Text = Form1.f1.mes_partno; + tb_station.Text = Form1.f1.mes_station; + + tb_workorder.Text = Form1.f1.mes_workorder; + tb_equipmentno.Text = Form1.f1.mes_equipmentno; + tb_fixturecode.Text = Form1.f1.mes_fixturecode; + tb_plan.Text = Form1.f1.mes_plan; + } + + // 保存 + private void bt_save_Click(object sender, EventArgs e) + { + var config = new JsonConfig("config.json"); + + config.SetValue($"mes_urlip", tb_url_ip.Text); + config.SetValue($"mes_urlport", tb_url_port.Text); + config.SetValue($"mes_partno", tb_partno.Text); + config.SetValue($"mes_station", tb_station.Text); + + config.SetValue($"mes_workorder", tb_workorder.Text); + config.SetValue($"mes_equipmentno", tb_equipmentno.Text); + config.SetValue($"mes_fixturecode", tb_fixturecode.Text); + config.SetValue($"mes_plan", tb_plan.Text); + + Form1.f1.mes_partno = tb_partno.Text; + Form1.f1.mes_station = tb_station.Text; + + Form1.f1.mes_workorder = tb_workorder.Text; + Form1.f1.mes_equipmentno = tb_equipmentno.Text; + Form1.f1.mes_fixturecode = tb_fixturecode.Text; + Form1.f1.mes_plan = tb_plan.Text; + } + } +} diff --git a/SLC1-N/Form_hbMESset.resx b/SLC1-N/Form_hbMESset.resx new file mode 100644 index 0000000..8951e3d --- /dev/null +++ b/SLC1-N/Form_hbMESset.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAACq + qnqHeoqqgAAAAAAAAAAAAAAAAAAACqiAAAAAAAAAeqgAAAAAAAAAAAAAAAAKqAAAAAAAAAAAAAqoAAAA + AAAAAAAAAAegAAAAAAAAAAAAAAAIoAAAAAAAAAAAAKcAAAAAAAAAAAAAAAAACqAAAAAAAAAACgAIenqq + qqqqqqqqqqAAAIoAAAAAAAAAoAAAAKqqqqqqqqqqqqgAAAigAAAAAAAKAAAAiqqqqqqqqqqqqqoAAACK + AAAAAAB3AAAAeHiqqqqqqqqqqqoAAAAKAAAAAACgAAAAAAqqqqqqqqqqqqoAAAAAoAAAAAqAAAAAAKqq + qqqqoAAAAAAAAAAAgAAAAAoAAAAAAAAIqqqqpwAAAAAAAAAACgAAAAoAAAAAAAAKqqqqqgAAAAAAAAAA + CgAAAAgAAAAAAAiqqqqqqqAAAAAAAAAABwAAAAoAAAAAAAAACKqqqqAAAAAAAAAACgAAAAgAAAAAAAAA + qqqqqqgAAAAAAAAACgAAAAoAAAAAAAAKqqqqqqoAAAAAAAAACgAAAAoAAAAAAAAAAAqqqqpwAAAAAAAA + CgAAAAoAAAAAAAAAAKqqqqqgAAAAAAAAiAAAAACAAAAAAAAAB6iqqqqoAAAAAAAAoAAAAACgAAAAAAAA + AACKqqqqAAAAAAAIoAAAAAAKAAAAAAAAAAqqqqqqgAAAAAAKAAAAAAAAoAAAAAAAAIqKiqqqoAAAAACg + AAAAAAAAigAAAAAAAAAAqqqqqAAAAAoAAAAAAAAACKAAAAAAAAAKqqqqqgAAAKAAAAAAAAAAAAqAAAAA + AAAAAAAAAAAAqgAAAAAAAAAAAACqgAAAAAAAAAAAAAB6gAAAAAAAAAAAAAAAeqAAAAAAAAAAAKqAAAAA + AAAAAAAAAAAAAAenoAAAAAB6qAAAAAAAAAAAAAAAAAAAAAAAinqqqqhwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////P///AAD//8AAf/8AAP/+H/8P/wAA//j//+P/ + AAD/5///+f8AAP/P///+fwAA/7gAAB8/AAD/fwAAD58AAP78AAAPzwAA/PwAAA/vAAD9/4AAD/cAAPn/ + AB//9wAA+//gD//7AAD7/+AP//sAAPv/gAf/+wAA+//4B//7AAD7//AD//sAAPv/4AP/+wAA+//+Af/7 + AAD7//wB//MAAP3/+AD/9wAA/f//AP/nAAD+//4Af+8AAP9//AB/3wAA/z//wD+/AAD/n/+AP38AAP/n + ///8/wAA//H///H/AAD//H//x/8AAP//h/w//wAA///wAf//AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAACKqAAAenAAAAAAAAAAAACoAAAAAAAAegAAAAAAAAB3AAAAAAAAAACKAAAAAA + AKAAqqqqqqqqoAAIAAAAAAoAAIqqqqqqqqoAAKAAAACAAAinqqqqqqqqAAAIAAAAoAAACqqqqqeqigAA + CgAACAAAAAiKqqoAAAAAAAAAAAoAAAAAqqqqoAAAAAAAgAAKAAAAAACqqqAAAAAAAKAACAAAAAAIqqqq + AAAAAABwAAoAAAAAAAqqqgAAAAAAcAAAAAAAAACqqqqgAAAAAAAAAHAAAAAAAKqqoAAAAAoAAAAIAAAA + AAqqqqgAAACAAAAACgAAAAAACKqqAAAIAAAAAACHAAAAAKqqqqAAoAAAAAAAAKAAAAAAAAAACAAAAAAA + AAAAdwAAAAAAigAAAAAAAAAAAAAHqKeooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////+Hj//+f/n/+f/+f/cAB7/vAAPf3gAD79+AA++/g + P//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/Ad//f/+//8/8///4B/////////////// + //////////////////8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqoAAAAAAKqoAAAAAAAAiqoA + AAAAAAAKqgAAAAAAAAiqgAAAAAAAAHqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAP//AAD//wAA//8AAP//AAD4DwAA/D8AAPw/AAD+PwAA/h8AAP8fAAD//wAA//8AAP// + AAD//wAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAAP4AAAX+ + BQAJ/wkADf4NABH/EQAW/hYAGf8ZAB3+HQAh/iEAJv4mACr+KgAt/i0AMf4xADX+NQA5/jkAPf49AEH+ + QQBF/kUAS/9LAE3+TQBR/lEAVf5VAFn+WQBe/14AYf5hAGX+ZQBp/mkAbv9uAHD/cAB1/nUAef55AH7+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFggIDhMXFxsXFxIOBgobAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFgwSIAAAAAAAAAAAAAAAAAAdEQwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMHQAA + AAAAAAAAAAAAAAAAAAAAAAAbDBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAbCAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAB0IAAAAAAAAAAAAAAAAAAAAAAAAAAwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREA + AAAAAAAAAAAAAAAAAAAACgAAACAbFgwBAQEBAQEBAQEBAQEBAQEBAQEAAAAAABsOAAAAAAAAAAAAAAAA + AAAKAAAAAAAAAAwBAQEBAQEBAQEBAQEBAQEBAQEbAAAAAAAgDgAAAAAAAAAAAAAAAA4AAAAAAAAdBAEB + AQEBAQEBAQEBAQEBAQEBAQEOAAAAAAAAGxIAAAAAAAAAAAAAGxYAAAAAAAAgICAgCgEBAQEBAQEBAQEB + AQEBAQEBAAAAAAAAAA4AAAAAAAAAAAAADAAAAAAAAAAAAAAWAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAA + AAAKAAAAAAAAAAAWHQAAAAAAAAAAAAwBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAK + AAAAAAAAAAAAAAAAACAGAQEBAQEBFgAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAOAAAAAAAAAAAAAAAA + AAgBAQEBAQEBBAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAATAAAAAAAAAAAAAAAXAQEBAQEBAQEBARYA + AAAAAAAAAAAAAAAAAAAADAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAFwEBAQEBAQYAAAAAAAAAAAAAAAAA + AAAADAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAWAQEBAQEBAQEXAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAS + AAAAAAAAAAAAAAAAAAoBBAQBAQEBAQEEAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAA + AAAAAAAOAQEBAQEBGwAAAAAAAAAAAAAAAAAAEQAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAYBAQEBAQEB + BAAAAAAAAAAAAAAAAAAbFwAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAEQwODAQBAQEBAR0AAAAAAAAAAAAA + AAAKAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAIAQBAQEBAQgAAAAAAAAAAAAAAB0WAAAAAAAAAAAA + AAoAAAAAAAAAAAAAAAAAAAARAQEBAQEBAQEdAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAMAAAAAAAAAAAA + AAAAABsbFxsRAQEBAQEKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAbEQAAAAAAAAAAAAAAAAAAAAAMAQEB + AQEBIAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAGw4AAAAAAAAAAAAAAAAAAAYBAQEBAQEBCAAAAAAAAAoA + AAAAAAAAAAAAAAAAAAAAAAAIGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCgAAAAAAAAAAAAAAAAAA + AAAAAAAAFwgdAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXDBMA + AAAAAAAAAAAAAAAAAAAAABIMGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODhIXAAAAAAAAAAAA + FxEMEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEw4IBAQECA4WIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///z///wAA///AAH//AAD//h//D/8AAP/4///j/wAA/+f///n/ + AAD/z////n8AAP+4AAAfPwAA/38AAA+fAAD+/AAAD88AAPz8AAAP7wAA/f+AAA/3AAD5/wAf//cAAPv/ + 4A//+wAA+//gD//7AAD7/4AH//sAAPv/+Af/+wAA+//wA//7AAD7/+AD//sAAPv//gH/+wAA+//8Af/z + AAD9//gA//cAAP3//wD/5wAA/v/+AH/vAAD/f/wAf98AAP8//8A/vwAA/5//gD9/AAD/5////P8AAP/x + ///x/wAA//x//8f/AAD//4f8P/8AAP//8AH//wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA/gAABf4FAAn+CQAP/g8AHv4eACv+KwAs/ywAM/8zADT/ + NAA+/j4AQv5CAEX+RQBJ/kkATP5MAFD+UABV/lUAWf9ZAF7+XgBh/mEAZf5lAGj+aABt/m0Acv5yAHX+ + dQB5/nkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkODhcAAAAAFg4O + AAAAAAAAAAAAAAAAAAAAAAAAAA8WAAAAAAAAAAAAAAAAExEAAAAAAAAAAAAAAAAAABMWAAAAAAAAAAAA + AAAAAAAAABEXAAAAAAAAAAAAAAANAAAADQQEAgQCBAIEAgQCBAAAAAAPAAAAAAAAAAAADQAAAAARAgIC + AgICAgICAgICCgAAAAAPAAAAAAAAABMAAAAAGREPBAICAgICAgICAgICAAAAAAAZAAAAAAAAFgAAAAAA + ABECAgICAgIGBwgICAgAAAAAAA8AAAAAABMAAAAAAAAAFxYFAgICAgAAAAAAAAAAAAAAAAAAAAAADgAA + AAAAAAAADwICAgICBwAAAAAAAAAAAAAADwAAAAANAAAAAAAAAAAAAAcCAgICAAAAAAAAAAAAAAANAAAA + AA0AAAAAAAAAAAAOAgICAgIHAAAAAAAAAAAAAA0AAAAADgAAAAAAAAAAAAAACgICAgIAAAAAAAAAAAAA + EwAAAAAAAAAAAAAAAAAAAA0CAgICAggAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAgICAgAAAAAA + AAAADQAAAAAAAAAXAAAAAAAAAAAADQICAgICCgAAAAAAABEAAAAAAAAAABcAAAAAAAAAAAAAABMCAgIC + AAAAAAAXAAAAAAAAAAAAABkTAAAAAAAAAAAOBAICAgQOAAAADwAAAAAAAAAAAAAAAAAOAAAAAAAAAAAA + AAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAADhMAAAAAAAAAAAAAEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAT + Dg0KCg0OEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////+Hj//+f + /n/+f/+f/cAB7/vAAPf3gAD79+AA++/gP//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/ + Ad//f/+//8/8///4B/////////////////////////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAB + AAAAAAAAAAAAAAABAAAAAQAAAAAAAAD+AAAE/wQAC/4LAAz/DAAR/hEAFf8VACP/IwA6/zoAQ/5DAFL/ + UgBb/1sAb/5vAHb+dgB5/3kAfv9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgICAgIFAAAAAAAA + AAAAAAcCAg4AAAAAAAAAAAAAAAALAwIMAAAAAAAAAAAAAAAAAAgCAwAAAAAAAAAAAAAAAAANBQIOAAAA + AAAAAAAAAAAAAAoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAPgP + AAD8PwAA/D8AAP4/AAD+HwAA/x8AAP//AAD//wAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/AEUA/wBjAP8AdgD+AIMA/wCGAP8AfAD/AHIA/wBeAP8AQAD+ + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/AAIA/wAnAP4AZgD/AKkA/wDiAP8A5QD/AMkA/wC0AP8ApQD+AJ4A/wCZAP8AnwD/ + AKgA/wC4AP8AzAD+AOkA/wDaAP8AmwD/AFwA/wAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAQAP8ATgD/AKwA/wDRAP4AuwD/AIAA/wBCAP8AIgD/ABUA/wAMAP8ABQD+ + AAIAAAAAAP8AAwD/AAYA/wANAP8AFwD+ACQA/wBMAP8AjQD/AMAA/wDTAP8AnAD+AD8A/wAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ACAD+AEQA/gC5AP4A0QD+AIcA/gA3AP4ACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABEA/gA+AP4AmwD+ + ANQA/gCmAP4AOAD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAZAP4AlgD/AOcA/wB2AP8AGQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+ACcA/wCQAP8A5gD/AH4A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD8A/wDTAP4AqwD/ACEA/wAGAP8AMAD/ + AF8A/wByAP4AcgD/AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+ + AHIA/wByAP8AcgD/AHIA/wByAP8ACwAAAAAAAAAAAP8AMQD/AMYA/wDBAP8AKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wACAP8ATAD/ANsA/wB3AP4AHwD/ + AEsA/wCHAP8AnAD/AKoA/wDSAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8ATAAAAAAAAAAAAAAAAAD/ABMA/wCYAP8AywD+ + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wA/AP8A3AD/ + AGMA/wAGAAAAAAAAAAAAAAAAAP8ACAD/AFQA/wDVAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AlAD+AAMAAAAAAAAAAAAA + AAAA/wAMAP8AhgD+AMwA/wAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ACIA/wDKAP8AfAD/AAIAAAAAAAAAAAAAAAAA/wARAP8AjgD/APIA/wD/AP4A/gD/AP8A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AzgD+ + ABQAAAAAAAAAAAAAAAAAAAAAAP8ADAD+AJkA/wC8AP8ACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD+AJ8A/gCpAP4AAwAAAAAAAAAAAAAAAAAAAAAA/gBPAP4AgAD+AIAA/gCAAP4AhAD+ + AN0A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4A+wD+ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABAA/gDJAP4AdQD+AAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ASAD/ANEA/wAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAiAP4AqwD/APkA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBCAP8A3AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AqAD/AI4A/wACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABgD/AFAA/wDRAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AHQA/wAyAP8AMgD+ADIA/wAyAP8AMgD/ADIA/wAyAP8AMgD+AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP8AuAD/AHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAWAP4A3wD/ADsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AEQA/wBTAP4AUwD/AFYA/wCDAP8A7gD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AK0A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AYAD/AL4A/wANAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBIAP4AxwD/ + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAQD/AGIA/wDkAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/APIA/wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ALwD/AMwA/wAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wBoAP4AsAD/AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAcAP4ApgD/ + APoA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wCuAP8ABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADgD/ANAA/wBDAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wB1AP4AqAD/AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAKAP4AJQD/ACYA/wAmAP8ANwD/AKEA/wD9AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wDsAP8AQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAgD/ + ANIA/wBMAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBvAP4AqwD+AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAEA/gAtAP4ArgD+APoA/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4ApQD+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABwD+ANEA/gBIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBYAP4AuwD/ABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AFMA/wDXAP8A+QD/APkA/wD5AP8A/QD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A8QD+AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AHgD/AM0A/wA4AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wApAP4A2AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wA8AP8AzQD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/gD+AJ0A/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ARwD/AMYA/wAaAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP4AzAD/AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ADQD/AHMA/wDuAP8A/gD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+APMA/wAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AkAD/AKAA/wACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AbwD/AL8A/wASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAMAP8AdgD/AMUA/wDLAP8AywD+ANIA/wD3AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wCPAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAbAP8A3wD/ + AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AGwD/AMgA/wBrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AIQA/wDxAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wDkAP8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAUA/wCOAP8ArgD/AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AFEA/gDeAP4AMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAzAP4AwwD+ + AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4AigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+AE4A/gDoAP4AKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AAYA/wB9AP8A1AD/ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ABsA/wCPAP8AngD+AJ4A/wCfAP8AvgD/APsA/wD/AP8A/wD+AP4A/wD/AP8A3wD/ACkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AQgD+ANgA/wBdAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAOAP8AmAD/AMMA/wAyAP4AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAUA/wBHAP8A1QD/AP0A/wD/AP8A/wD+AP4A/wD/AP8A/QD/ + AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wBMAP8AzgD+AHwA/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADQD/AJYA/wDNAP4AUgD/AAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AH4A/wDtAP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AN8A/wAcAAAAAAAAAAAAAAAAAP8ACwD/AGoA/wDYAP8AdQD+AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAQA/wBqAP4A4QD/ + AJwA/wAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ANQD+AHAA/wBxAP8AcQD/ + AHEA/wBxAP8AcQD+AHEA/wBxAP8AcQD/AG4A/wAmAAAAAAAAAAAA/wAqAP8ArAD/AN0A/wBMAP8AAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4AJAD/AKEA/wDnAP8AhwD/AC0A/wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wABAP8APQD+AJ4A/wDjAP8AkgD/ + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAgA/gBCAP4AqQD+ANMA/gCzAP4AXQD+AC0A/gANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gASAP4ANAD+AGsA/gC+AP4A0QD+ + AJcA/gA0AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/ADUA/wB7AP4AyAD/ + AMwA/wC/AP8AoAD/AHQA/wBVAP8APgD+ADMA/wArAP8ANAD/AEEA/wBaAP8AegD+AKcA/wDCAP8AzwD/ + AL4A/wBwAP8AKQD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD/AC8A/wBbAP8AhwD/AK8A/wDPAP8A5AD+APEA/wD1AP8A8AD/AOAA/wDJAP8AqgD+ + AIAA/wBTAP8AJQD/AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//+AB//8AAP/+AAAf/wAA//gAQAP/AAD/4D//gP8AAP/B///wfwAA/4AAAAw/AAD+AAAADh8AAPwc + AAAHDwAA/DgAAAeHAAD4eAAAB8MAAPj/AAAH4wAA+PwAAAfjAADx/AAH//EAAPH/gAf/8QAA8f8AA//x + AADx/wAD//EAAPH/wAH/8QAA8f/AAf/xAADx//wA//EAAPH/8AD/8QAA+P/gAH/jAAD4//4Af8MAAPx/ + /AB/xwAA/D/4AD+HAAD+D/8APg8AAP8H/gAcHwAA/4P+ABg/AAD/4H//wP8AAP/wD/4B/wAA//wAAAf/ + AAD//4AAP/8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA8A/gAzAP4ASwD/AFgA/gBVAP4ASQD+ + ADAA/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAEAP4ANwD+AIcA/wCzAP4AtAD+AI8A/gB1AP8AaQD+ + AGoA/gB4AP4AkgD/ALcA/gCvAP4AfwD+AC4A/wACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gADAP8ARAD+AK4A/gCWAP4AQQD/ABMA/gABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AAQD+ABYA/gBKAP4AnwD/AKYA/gA5AP4AAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD/AJsA/wCVAP8AHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AKgD/AKEA/wCMAP8ADAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ACMA/gC5AP4AUQD/AD8A/gB+AP4AuQD+ + APAA/wD2AP4A9gD+APYA/gD2AP8A9gD+APYA/gD2AP4A9gD/APYA/gD2AP4A9gD+AHkAAAAAAP4AAgD+ + AF0A/gCvAP8AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAXAP4AuAD+AC8AAAAAAAAAAAD+ + ABYA/gCfAP4A+gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+AP4A/gD+AP8A/wD+AP4A/gD+AP4AwQD/ + AAUAAAAAAAAAAAD+AEYA/wCvAP4ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD/AJwA/gBHAAAAAAAA + AAAA/wALAP4AhQD+AKoA/gCsAP8A8AD+AP4A/gD+AP4A/gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+ + AP4A/gD1AP8AHQAAAAAAAAAAAAAAAAD/AF0A/gCHAP4AAQAAAAAAAAAAAAAAAAAAAAAA/wBAAP8AlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AGgD/AKgA/wD8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDUAP8AywD/ + AMwA/wDLAP8AywD/AMsA/wBGAAAAAAAAAAAAAAAAAP8AAgD/AK0A/wAnAAAAAAAAAAAAAAAAAAAAAAD+ + AJcA/wA0AAAAAAAAAAAAAAAAAAAAAAD+AAcA/gBmAP4AjAD/AJIA/gDhAP4A/gD+AP4A/wD/AP4A/gD+ + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4ATgD+AHsAAAAAAAAAAAAA + AAAAAAAAAP4AtwD/AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP8ArQD+AP0A/gD+AP4A/gD/ + AP8A/gD+AP4A1AD+AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP4AqwAA + AAAAAAAAAAAAAAAAAAAA/gC9AP8AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD+AFAA/wBuAP4AdgD+ + ANQA/gD+AP8A/wD+AP4A/gD9AP4AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAMA/gC9AAAAAAAAAAAAAAAAAAAAAAD/ALsA/wAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AB4A/wCvAP8A/QD/AP8A/wD/AP8A/wD/AP8A/wDTAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ACAD/ALkAAAAAAAAAAAAAAAAAAAAAAP4ArwD/ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ANwD+AFAA/gBWAP4AwwD/AP8A/gD+AP4A/gD+AP0A/wBXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/gAoAP4AnAAAAAAAAAAAAAAAAAAAAAAA/gB6AP8AVgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AIwD+ALgA/gD9AP8A/wD+AP4A/gD+AP4A/gD/AMgA/gAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AHIA/gBcAAAAAAAAAAAAAAAAAAAAAAD+AB8A/wCzAP4ACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAcAP4AMgD+ADsA/wCrAP4A/gD+AP4A/gD+AP8A/QD+ + AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAQAP4AuwD+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AGUA/wCJAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAkAP8AvQD/AP4A/wD/AP8A/wD/ + AP8A/wD/AP8AwQD/AAUAAAAAAAAAAAAAAAAAAAAAAP8ABgD/AJ8A/wBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABQD+AIsA/gB2AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAkA/gAUAP8AIAD+ + AJcA/gD8AP4A/gD/AP8A/gD6AP4ARwAAAAAAAAAAAAAAAAD+AAkA/gCMAP8AdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ABQD+AIQA/gCaAP8AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + ACAA/wC0AP4A9QD+APUA/gD1AP8A9gD+APUA/gCyAAAAAAAAAAAA/gAeAP4AqgD+AG8A/wADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AEkA/wC5AP4AbgD+ABQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAbAP8AfQD+ALUA/gA3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAwA/wBkAP8AswD/ + AJgA/wBVAP8AJQD/ABEA/wAGAP8AAQD/AAIA/wAIAP8AEwD/ACgA/wBeAP8AngD/AK8A/wBVAP8ACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/gAFAP4AMAD/AHAA/gCgAP4AsAD+ALoA/wDAAP4AwAD+ALkA/gCvAP8AnAD+AGcA/gArAP4AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////+Af//4AAf/4D8B/8P/8P+AAAh/GA + AGPjAABx58AAceeAH/nn4A/558AP+efwB/nn8Af55/gD+eP4A/Hx/AHj8PwBx/h+AYf+H/4f/wAAP//A + AP////////////////////////////////8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/ACsA/wAeAP8AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD4A/gBlAP8AXgD+AEEA/wA1AP4AQgD/ + AF8A/gBmAP8AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/AG4A/wBcAP8AagD/AHsA/wB7AP8AewD/ + AHsA/wB7AP8AWwD/ADMA/wBpAP8ABgAAAAAAAAAAAAAAAAD/AGwA/gAMAP8AKQD+ALwA/wD7AP4A/gD/ + AP8A/gD+AP8A/wD+AO0A/wAIAP4AEQD/AGcAAAAAAAAAAAD/ADYA/wAzAAAAAAD/AAEA/wBtAP8A3AD/ + AP8A/wD/AP8AgQD/AGYA/wBlAP8AEQAAAAAA/wA/AP8AKAAAAAAA/gBdAP8ABAAAAAAAAAAAAP4AGwD/ + AKQA/gD0AP8A/wD+AJAAAAAAAAAAAAAAAAAAAAAAAP8ABwD+AFoAAAAAAP8AWgD/AAYAAAAAAAAAAAAA + AAAA/wBVAP8AxQD/AP8A/wDzAP8AFwAAAAAAAAAAAAAAAAD/AAwA/wBVAAAAAAD+ACYA/wBFAAAAAAAA + AAAAAAAAAP8ADwD+AIkA/wDqAP4A/gD/AIYAAAAAAAAAAAAAAAAA/wBPAP4AGwAAAAAAAAAAAP8AXwD/ + AB8AAAAAAAAAAAAAAAAA/wBAAP8ArQD/AP4A/wDuAP8AEwAAAAAA/wAnAP8AWAAAAAAAAAAAAAAAAAD/ + AAEA/gBaAP8ATwD+AAUAAAAAAP4ACAD/AGoA/gB6AP8AegD+ADMA/wBUAP4AVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/ABwA/wBgAP8AYgD/AGEA/wBhAP8AYQD/AGIA/wBfAP8AFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA/B8AAPAHAADAAQAAwAEAAJAEAACYPAAAnBwAAJwcAADOCQAAwgMAAPAH + AAD//wAA//8AAP//AAA= + + + \ No newline at end of file diff --git a/SLC1-N/GetIP.cs b/SLC1-N/GetIP.cs new file mode 100644 index 0000000..e3fd1d9 --- /dev/null +++ b/SLC1-N/GetIP.cs @@ -0,0 +1,100 @@ +using System.Net; +using System.Net.NetworkInformation; +using System.Text.RegularExpressions; + +namespace SLC1_N +{ + class GetIP + { + public string GetLocalIP() + { + //本机IP地址 + string strLocalIP = ""; + //得到计算机名 + string strPcName = Dns.GetHostName(); + //得到本机IP地址数组 + IPHostEntry ipEntry = Dns.GetHostEntry(strPcName); + //遍历数组 + foreach (var IPadd in ipEntry.AddressList) + { + //判断当前字符串是否为正确IP地址 + if (IsRightIP(IPadd.ToString())) + { + //得到本地IP地址 + strLocalIP = IPadd.ToString(); + if (strLocalIP.Contains("192.168.")) + { + //结束循环 + break; + } + } + } + + //返回本地IP地址 + return strLocalIP; + } + + /// + /// 判断是否为正确的IP地址 + /// + /// IP + /// + public static bool IsRightIP(string strIPadd) + { + //利用正则表达式判断字符串是否符合IPv4格式 + if (Regex.IsMatch(strIPadd, @"^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$")) + { + //根据小数点分拆字符串 + string[] ips = strIPadd.Split('.'); + if (ips.Length == 4 || ips.Length == 6) + { + //如果符合IPv4规则 + if (System.Int32.Parse(ips[0]) < 256 && System.Int32.Parse(ips[1]) < 256 & System.Int32.Parse(ips[2]) < 256 & System.Int32.Parse(ips[3]) < 256) + { + if (IsPingIP(strIPadd)) + //正确 + return true; + else + //错误 + return false; + } + + //如果不符合 + else + //错误 + return false; + } + else + //错误 + return false; + } + else + //错误 + return false; + } + + + /// + /// 尝试Ping指定IP 是否能够Ping通 + /// + /// IP + /// + public static bool IsPingIP(string strIP) + { + try + { + //创建Ping对象 + Ping ping = new Ping(); + //接受Ping返回值 + PingReply reply = ping.Send(strIP, 1000); + //Ping通 + return true; + } + catch + { + //Ping失败 + return false; + } + } + } +} diff --git a/SLC1-N/JsonConfig.cs b/SLC1-N/JsonConfig.cs new file mode 100644 index 0000000..66c6b7e --- /dev/null +++ b/SLC1-N/JsonConfig.cs @@ -0,0 +1,203 @@ +using System; +using System.Collections.Generic; +using System.IO; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace SLC1_N +{ + internal class JsonConfig // Json文件类 (最底部有使用示例) + { + private readonly string js_filePath; + private JObject js_configData; + private readonly object js_fileLock = new object(); + + /// + /// 初始化JsonConfig + /// + /// JSON文件路径 + public JsonConfig(string filePath) + { + if (string.IsNullOrWhiteSpace(filePath)) + throw new ArgumentException("文件路径不能为空或空白"); + + js_filePath = Path.GetFullPath(filePath); + //Console.WriteLine($"配置文件路径: {js_filePath}"); + + EnsureDirectoryExists(); + LoadOrCreateConfig(); + } + + private void EnsureDirectoryExists() + { + var directory = Path.GetDirectoryName(js_filePath); + if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + } + + private void LoadOrCreateConfig() + { + lock (js_fileLock) + { + if (File.Exists(js_filePath)) + { + try + { + string json = File.ReadAllText(js_filePath); + js_configData = JObject.Parse(json); + //Console.WriteLine("配置加载成功"); + return; + } + catch (Exception ex) + { + Console.WriteLine($"配置加载失败,将创建新配置: {ex.Message}"); + } + } + + js_configData = new JObject(); + SaveToFile(); + Console.WriteLine("创建了新配置文件"); + } + } + + /// + /// 设置配置值(存在则覆盖) + /// + public void SetValue(string key, object value) + { + if (string.IsNullOrWhiteSpace(key)) + throw new ArgumentException("键名不能为空"); + + lock (js_fileLock) + { + js_configData[key] = JToken.FromObject(value); + SaveToFile(); + } + } + + /// + /// 获取配置值 + /// + public T GetValue(string key, T defaultValue = default) + { + if (string.IsNullOrWhiteSpace(key)) + throw new ArgumentException("键名不能为空"); + + lock (js_fileLock) + { + if (js_configData.TryGetValue(key, out JToken token)) + { + try + { + return token.ToObject(); + } + catch (Exception ex) + { + Console.WriteLine($"配置值转换失败,返回默认值: {ex.Message}"); + return defaultValue; + } + } + return defaultValue; + } + } + + /// + /// 获取所有配置键值对 + /// + public Dictionary GetAllValues() + { + //lock (js_fileLock) + //{ + // return JsonConvert.SerializeObject(js_configData, Formatting.Indented); + //} + return js_configData.ToObject>(); + } + + /// + /// 检查配置键是否存在 + /// + public bool ContainsKey(string key) + { + if (string.IsNullOrWhiteSpace(key)) + return false; + + lock (js_fileLock) + { + return js_configData.ContainsKey(key); + } + } + + /// + /// 删除指定配置键 + /// + public bool RemoveKey(string key) + { + if (string.IsNullOrWhiteSpace(key)) + return false; + + lock (js_fileLock) + { + bool removed = js_configData.Remove(key); + if (removed) + { + SaveToFile(); + } + return removed; + } + } + + public string ShowAllValues() + { + return JsonConvert.SerializeObject(js_configData, Formatting.Indented); + } + + /// + /// 保存配置到文件 + /// + private void SaveToFile() + { + try + { + string json = JsonConvert.SerializeObject(js_configData, Formatting.Indented); + File.WriteAllText(js_filePath, json); + //Console.WriteLine("配置保存成功"); + } + catch (Exception ex) + { + Console.WriteLine($"配置保存失败: {ex.Message}"); + throw; // 可以根据需要改为更温和的错误处理 + } + } + } + + + + +} + +/* + * 使用示例 + +// 初始化配置 +var config = new JsonConfig("config.json"); + +// 设置值(自动创建文件) +config.SetValue("ServerIP", "192.168.1.100"); +config.SetValue("Port", 502); +config.SetValue("Enabled", true); + +// 读取值 +string ip = config.GetValue("ServerIP"); +int port = config.GetValue("Port", 5020); // 带默认值 +bool enabled = config.GetValue("Enabled"); + +// 获取所有配置 +var allSettings = config.GetAllValues(); +foreach (var setting in allSettings) +{ + Console.WriteLine($"{setting.Key}: {setting.Value}"); +} + + */ \ No newline at end of file diff --git a/SLC1-N/LeakCompensate.Designer.cs b/SLC1-N/LeakCompensate.Designer.cs new file mode 100644 index 0000000..dcdf638 --- /dev/null +++ b/SLC1-N/LeakCompensate.Designer.cs @@ -0,0 +1,273 @@ + +namespace SLC1_N +{ + partial class LeakCompensate + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LeakCompensate)); + this.uiGroupBox16 = new Sunny.UI.UIGroupBox(); + this.CH2PreCompensation = new Sunny.UI.UITextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.Compensation = new Sunny.UI.UIButton(); + this.CH1PreCompensation = new Sunny.UI.UITextBox(); + this.label120 = new System.Windows.Forms.Label(); + this.uiGroupBox1 = new Sunny.UI.UIGroupBox(); + this.CH2LeakCompe = new Sunny.UI.UITextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.Save = new Sunny.UI.UIButton(); + this.CH1LeakCompe = new Sunny.UI.UITextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.SendText = new System.Windows.Forms.TextBox(); + this.uiGroupBox16.SuspendLayout(); + this.uiGroupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // uiGroupBox16 + // + this.uiGroupBox16.Controls.Add(this.CH2PreCompensation); + this.uiGroupBox16.Controls.Add(this.label3); + this.uiGroupBox16.Controls.Add(this.Compensation); + this.uiGroupBox16.Controls.Add(this.CH1PreCompensation); + this.uiGroupBox16.Controls.Add(this.label120); + this.uiGroupBox16.FillColor = System.Drawing.Color.LightBlue; + this.uiGroupBox16.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiGroupBox16.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox16.Location = new System.Drawing.Point(230, 14); + this.uiGroupBox16.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox16.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox16.Name = "uiGroupBox16"; + this.uiGroupBox16.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox16.Size = new System.Drawing.Size(192, 296); + this.uiGroupBox16.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox16.TabIndex = 239; + this.uiGroupBox16.Text = "压力系数"; + this.uiGroupBox16.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // CH2PreCompensation + // + this.CH2PreCompensation.ButtonSymbol = 61761; + this.CH2PreCompensation.Cursor = System.Windows.Forms.Cursors.IBeam; + this.CH2PreCompensation.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.CH2PreCompensation.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.CH2PreCompensation.Location = new System.Drawing.Point(35, 118); + this.CH2PreCompensation.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.CH2PreCompensation.Maximum = 2147483647D; + this.CH2PreCompensation.Minimum = -2147483648D; + this.CH2PreCompensation.MinimumSize = new System.Drawing.Size(1, 16); + this.CH2PreCompensation.Name = "CH2PreCompensation"; + this.CH2PreCompensation.Size = new System.Drawing.Size(128, 29); + this.CH2PreCompensation.Style = Sunny.UI.UIStyle.Custom; + this.CH2PreCompensation.TabIndex = 244; + this.CH2PreCompensation.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("宋体", 12F); + this.label3.Location = new System.Drawing.Point(32, 98); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(95, 16); + this.label3.TabIndex = 243; + this.label3.Text = "CH2压力系数"; + // + // Compensation + // + this.Compensation.Cursor = System.Windows.Forms.Cursors.Hand; + this.Compensation.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Compensation.Location = new System.Drawing.Point(35, 190); + this.Compensation.MinimumSize = new System.Drawing.Size(1, 1); + this.Compensation.Name = "Compensation"; + this.Compensation.Size = new System.Drawing.Size(128, 35); + this.Compensation.Style = Sunny.UI.UIStyle.Custom; + this.Compensation.TabIndex = 242; + this.Compensation.Text = "应用设置"; + this.Compensation.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Compensation.Click += new System.EventHandler(this.Compensation_Click); + // + // CH1PreCompensation + // + this.CH1PreCompensation.ButtonSymbol = 61761; + this.CH1PreCompensation.Cursor = System.Windows.Forms.Cursors.IBeam; + this.CH1PreCompensation.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.CH1PreCompensation.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.CH1PreCompensation.Location = new System.Drawing.Point(35, 60); + this.CH1PreCompensation.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.CH1PreCompensation.Maximum = 2147483647D; + this.CH1PreCompensation.Minimum = -2147483648D; + this.CH1PreCompensation.MinimumSize = new System.Drawing.Size(1, 16); + this.CH1PreCompensation.Name = "CH1PreCompensation"; + this.CH1PreCompensation.Size = new System.Drawing.Size(128, 29); + this.CH1PreCompensation.Style = Sunny.UI.UIStyle.Custom; + this.CH1PreCompensation.TabIndex = 241; + this.CH1PreCompensation.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label120 + // + this.label120.AutoSize = true; + this.label120.Font = new System.Drawing.Font("宋体", 12F); + this.label120.Location = new System.Drawing.Point(32, 40); + this.label120.Name = "label120"; + this.label120.Size = new System.Drawing.Size(95, 16); + this.label120.TabIndex = 228; + this.label120.Text = "CH1压力系数"; + // + // uiGroupBox1 + // + this.uiGroupBox1.Controls.Add(this.CH2LeakCompe); + this.uiGroupBox1.Controls.Add(this.label2); + this.uiGroupBox1.Controls.Add(this.Save); + this.uiGroupBox1.Controls.Add(this.CH1LeakCompe); + this.uiGroupBox1.Controls.Add(this.label1); + this.uiGroupBox1.FillColor = System.Drawing.Color.LightBlue; + this.uiGroupBox1.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiGroupBox1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox1.Location = new System.Drawing.Point(13, 14); + this.uiGroupBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox1.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox1.Name = "uiGroupBox1"; + this.uiGroupBox1.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox1.Size = new System.Drawing.Size(192, 296); + this.uiGroupBox1.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox1.TabIndex = 243; + this.uiGroupBox1.Text = "系数设置"; + this.uiGroupBox1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // CH2LeakCompe + // + this.CH2LeakCompe.ButtonSymbol = 61761; + this.CH2LeakCompe.Cursor = System.Windows.Forms.Cursors.IBeam; + this.CH2LeakCompe.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.CH2LeakCompe.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.CH2LeakCompe.Location = new System.Drawing.Point(35, 118); + this.CH2LeakCompe.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.CH2LeakCompe.Maximum = 2147483647D; + this.CH2LeakCompe.Minimum = -2147483648D; + this.CH2LeakCompe.MinimumSize = new System.Drawing.Size(1, 16); + this.CH2LeakCompe.Name = "CH2LeakCompe"; + this.CH2LeakCompe.Size = new System.Drawing.Size(128, 29); + this.CH2LeakCompe.Style = Sunny.UI.UIStyle.Custom; + this.CH2LeakCompe.TabIndex = 243; + this.CH2LeakCompe.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("宋体", 12F); + this.label2.Location = new System.Drawing.Point(32, 98); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(63, 16); + this.label2.TabIndex = 242; + this.label2.Text = "CH2系数"; + // + // Save + // + this.Save.Cursor = System.Windows.Forms.Cursors.Hand; + this.Save.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Save.Location = new System.Drawing.Point(35, 190); + this.Save.MinimumSize = new System.Drawing.Size(1, 1); + this.Save.Name = "Save"; + this.Save.Size = new System.Drawing.Size(128, 35); + this.Save.Style = Sunny.UI.UIStyle.Custom; + this.Save.TabIndex = 242; + this.Save.Text = "应用设置"; + this.Save.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Save.Click += new System.EventHandler(this.Save_Click); + // + // CH1LeakCompe + // + this.CH1LeakCompe.ButtonSymbol = 61761; + this.CH1LeakCompe.Cursor = System.Windows.Forms.Cursors.IBeam; + this.CH1LeakCompe.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.CH1LeakCompe.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.CH1LeakCompe.Location = new System.Drawing.Point(35, 60); + this.CH1LeakCompe.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.CH1LeakCompe.Maximum = 2147483647D; + this.CH1LeakCompe.Minimum = -2147483648D; + this.CH1LeakCompe.MinimumSize = new System.Drawing.Size(1, 16); + this.CH1LeakCompe.Name = "CH1LeakCompe"; + this.CH1LeakCompe.Size = new System.Drawing.Size(128, 29); + this.CH1LeakCompe.Style = Sunny.UI.UIStyle.Custom; + this.CH1LeakCompe.TabIndex = 241; + this.CH1LeakCompe.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("宋体", 12F); + this.label1.Location = new System.Drawing.Point(32, 40); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(63, 16); + this.label1.TabIndex = 228; + this.label1.Text = "CH1系数"; + // + // SendText + // + this.SendText.Location = new System.Drawing.Point(113, 344); + this.SendText.Name = "SendText"; + this.SendText.Size = new System.Drawing.Size(152, 21); + this.SendText.TabIndex = 244; + this.SendText.Visible = false; + // + // LeakCompensate + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.LightBlue; + this.ClientSize = new System.Drawing.Size(446, 334); + this.Controls.Add(this.SendText); + this.Controls.Add(this.uiGroupBox1); + this.Controls.Add(this.uiGroupBox16); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "LeakCompensate"; + this.Text = "系数设置"; + this.Load += new System.EventHandler(this.LeakCompensate_Load); + this.uiGroupBox16.ResumeLayout(false); + this.uiGroupBox16.PerformLayout(); + this.uiGroupBox1.ResumeLayout(false); + this.uiGroupBox1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private Sunny.UI.UIGroupBox uiGroupBox16; + private Sunny.UI.UIButton Compensation; + private Sunny.UI.UITextBox CH1PreCompensation; + private System.Windows.Forms.Label label120; + private Sunny.UI.UIGroupBox uiGroupBox1; + private Sunny.UI.UITextBox CH2LeakCompe; + private System.Windows.Forms.Label label2; + private Sunny.UI.UIButton Save; + private Sunny.UI.UITextBox CH1LeakCompe; + private System.Windows.Forms.Label label1; + private Sunny.UI.UITextBox CH2PreCompensation; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox SendText; + } +} \ No newline at end of file diff --git a/SLC1-N/LeakCompensate.cs b/SLC1-N/LeakCompensate.cs new file mode 100644 index 0000000..f036cee --- /dev/null +++ b/SLC1-N/LeakCompensate.cs @@ -0,0 +1,161 @@ +using System; +using System.Linq; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class LeakCompensate : Form + { + public LeakCompensate() + { + InitializeComponent(); + } + + private void LeakCompensate_Load(object sender, EventArgs e) + { + //string dialog = Form1.f1.machine; + //ConfigINI config = new ConfigINI("Model", dialog); + //CH1LeakCompe.Text = config.IniReadValue("Compensate", "CH1LeakCompe"); + //CH2LeakCompe.Text = config.IniReadValue("Compensate", "CH2LeakCompe"); + //CH1PreCompensation.Text = config.IniReadValue("Compensate", "CH1PreCompensation"); + //CH2PreCompensation.Text = config.IniReadValue("Compensate", "CH2PreCompensation"); + //string chkcompe = config.IniReadValue("Compensate", "CHKLeakCompe"); + //if (String.IsNullOrEmpty(chkcompe)) + //{ + // CHKCompe.Checked = false; + //} + //else + //{ + // CHKCompe.Checked = Convert.ToBoolean(chkcompe); + //} + } + + private void Save_Click(object sender, EventArgs e) + { + if (CH1LeakCompe.Text.Length > 0) + { + //Form1.f1.CH1IsRun.Stop(); + byte[] leak_comp = BitConverter.GetBytes(Convert.ToSingle(CH1LeakCompe.Text)); + string str_leakcomp = BitConverter.ToString(leak_comp.Reverse().ToArray()).Replace("-", ""); + string ch1hex_leakcomp = str_leakcomp.Substring(4, 4) + str_leakcomp.Substring(0, 4); + //SendText.Text = ""; + //SendText.Text += hex_presscomp; + //switch (MachineNum.SelectedIndex) + //{ + // case 0: + string ch1sendstr = "01 10 04 3E 00 02 04" + ch1hex_leakcomp; + //Form1.f1.left_ch1tcp.ClientSendMsgAsync(ch1sendstr); + //Form1.f1.ch1client.btnSendData(ch1sendstr); + //Form1.f1.ch1stage = 10; + //Form1.f1.CH1IsRun.Interval = 1000; + //Form1.f1.CH1IsRun.Start(); + //Form1.f1.ch1stage = 1; + //Form1.f1.ch1readpara = true; + } + if (CH2LeakCompe.Text.Length > 0) + { + //Form1.f1.CH2IsRun.Stop(); + + // break; + //case 1: + byte[] leak_comp2 = BitConverter.GetBytes(Convert.ToSingle(CH2LeakCompe.Text)); + string str_leakcomp2 = BitConverter.ToString(leak_comp2.Reverse().ToArray()).Replace("-", ""); + string ch2hex_leakcomp = str_leakcomp2.Substring(4, 4) + str_leakcomp2.Substring(0, 4); + string ch2sendstr = "02 10 04 3E 00 02 04" + ch2hex_leakcomp; + //Form1.f1.left_ch2tcp.ClientSendMsgAsync(ch2sendstr); + //Form1.f1.ch2client.btnSendData(ch2sendstr); + //Form1.f1.ch2stage = 10; + //Form1.f1.CH2IsRun.Interval = 1000; + //Form1.f1.CH2IsRun.Start(); + //Form1.f1.ch2stage = 1; + //Form1.f1.ch2readpara = true; + } + SetLeakCompen(); + } + /// + /// 写入泄漏补偿 + /// + /// + private void SetLeakCompen() + { + //if (String.IsNullOrEmpty(CH1LeakCompe.Text)) + //{ + // Form1.f1.CH1LeakCompe = 0; + //} + //else + //{ + // Form1.f1.CH1LeakCompe = Convert.ToDouble(CH1LeakCompe.Text); + //} + //if (String.IsNullOrEmpty(CH2LeakCompe.Text)) + //{ + // Form1.f1.CH2LeakCompe = 0; + //} + //else + //{ + // Form1.f1.CH2LeakCompe = Convert.ToDouble(CH2LeakCompe.Text); + //} + //Form1.f1.CHKLeakCompe = CHKCompe.Checked; + + //string dialog = Form1.f1.machine; + //ConfigINI mesconfig = new ConfigINI("Model", dialog); + //mesconfig.IniWriteValue("Compensate", "CH1LeakCompe", CH1LeakCompe.Text); + ////mesconfig.IniWriteValue("Compensate", "CHKLeakCompe", CHKCompe.Checked.ToString()); + //mesconfig.IniWriteValue("Compensate", "CH2LeakCompe", CH2LeakCompe.Text); + } + private void Compensation_Click(object sender, EventArgs e) + { + if (CH1PreCompensation.Text.Length > 0) + { + //Form1.f1.CH1IsRun.Stop(); + byte[] press_comp = BitConverter.GetBytes(Convert.ToSingle(CH1PreCompensation.Text)); + string str_presscomp = BitConverter.ToString(press_comp.Reverse().ToArray()).Replace("-", ""); + string ch1hex_presscomp = str_presscomp.Substring(4, 4) + str_presscomp.Substring(0, 4); + //SendText.Text = ""; + //SendText.Text += hex_presscomp; + //switch (MachineNum.SelectedIndex) + //{ + // case 0: + string ch1sendstr = "01 10 04 05 00 02 04" + ch1hex_presscomp; + //Form1.f1.left_ch1tcp.ClientSendMsgAsync(ch1sendstr); + //Form1.f1.ch1client.btnSendData(ch1sendstr); + //Form1.f1.ch1stage = 10; + //Form1.f1.CH1IsRun.Interval = 1000; + //Form1.f1.CH1IsRun.Start(); + //Form1.f1.ch1stage = 1; + //Form1.f1.ch1readpara = true; + } + if (CH2PreCompensation.Text.Length > 0) + { + //Form1.f1.CH2IsRun.Stop(); + + // break; + //case 1: + byte[] press_comp2 = BitConverter.GetBytes(Convert.ToSingle(CH2PreCompensation.Text)); + string str_presscomp2 = BitConverter.ToString(press_comp2.Reverse().ToArray()).Replace("-", ""); + string ch2hex_presscomp = str_presscomp2.Substring(4, 4) + str_presscomp2.Substring(0, 4); + string ch2sendstr = "02 10 04 05 00 02 04" + ch2hex_presscomp; + //Form1.f1.left_ch2tcp.ClientSendMsgAsync(ch2sendstr); + //Form1.f1.ch2client.btnSendData(ch2sendstr); + //Form1.f1.ch2stage = 10; + //Form1.f1.CH2IsRun.Interval = 1000; + //Form1.f1.CH2IsRun.Start(); + //Form1.f1.ch2stage = 1; + //Form1.f1.ch2readpara = true; + } + SetPressCompen(); + // break; + //} + } + /// + /// 写入压力补偿 + /// + /// + private void SetPressCompen() + { + //string dialog = Form1.f1.machine; + //ConfigINI mesconfig = new ConfigINI("Model", dialog); + //mesconfig.IniWriteValue("Compensate", "CH1presscompensation", CH1PreCompensation.Text); + //mesconfig.IniWriteValue("Compensate", "CH2presscompensation", CH2PreCompensation.Text); + } + } +} diff --git a/SLC1-N/LeakCompensate.resx b/SLC1-N/LeakCompensate.resx new file mode 100644 index 0000000..8951e3d --- /dev/null +++ b/SLC1-N/LeakCompensate.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAACq + qnqHeoqqgAAAAAAAAAAAAAAAAAAACqiAAAAAAAAAeqgAAAAAAAAAAAAAAAAKqAAAAAAAAAAAAAqoAAAA + AAAAAAAAAAegAAAAAAAAAAAAAAAIoAAAAAAAAAAAAKcAAAAAAAAAAAAAAAAACqAAAAAAAAAACgAIenqq + qqqqqqqqqqAAAIoAAAAAAAAAoAAAAKqqqqqqqqqqqqgAAAigAAAAAAAKAAAAiqqqqqqqqqqqqqoAAACK + AAAAAAB3AAAAeHiqqqqqqqqqqqoAAAAKAAAAAACgAAAAAAqqqqqqqqqqqqoAAAAAoAAAAAqAAAAAAKqq + qqqqoAAAAAAAAAAAgAAAAAoAAAAAAAAIqqqqpwAAAAAAAAAACgAAAAoAAAAAAAAKqqqqqgAAAAAAAAAA + CgAAAAgAAAAAAAiqqqqqqqAAAAAAAAAABwAAAAoAAAAAAAAACKqqqqAAAAAAAAAACgAAAAgAAAAAAAAA + qqqqqqgAAAAAAAAACgAAAAoAAAAAAAAKqqqqqqoAAAAAAAAACgAAAAoAAAAAAAAAAAqqqqpwAAAAAAAA + CgAAAAoAAAAAAAAAAKqqqqqgAAAAAAAAiAAAAACAAAAAAAAAB6iqqqqoAAAAAAAAoAAAAACgAAAAAAAA + AACKqqqqAAAAAAAIoAAAAAAKAAAAAAAAAAqqqqqqgAAAAAAKAAAAAAAAoAAAAAAAAIqKiqqqoAAAAACg + AAAAAAAAigAAAAAAAAAAqqqqqAAAAAoAAAAAAAAACKAAAAAAAAAKqqqqqgAAAKAAAAAAAAAAAAqAAAAA + AAAAAAAAAAAAqgAAAAAAAAAAAACqgAAAAAAAAAAAAAB6gAAAAAAAAAAAAAAAeqAAAAAAAAAAAKqAAAAA + AAAAAAAAAAAAAAenoAAAAAB6qAAAAAAAAAAAAAAAAAAAAAAAinqqqqhwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////P///AAD//8AAf/8AAP/+H/8P/wAA//j//+P/ + AAD/5///+f8AAP/P///+fwAA/7gAAB8/AAD/fwAAD58AAP78AAAPzwAA/PwAAA/vAAD9/4AAD/cAAPn/ + AB//9wAA+//gD//7AAD7/+AP//sAAPv/gAf/+wAA+//4B//7AAD7//AD//sAAPv/4AP/+wAA+//+Af/7 + AAD7//wB//MAAP3/+AD/9wAA/f//AP/nAAD+//4Af+8AAP9//AB/3wAA/z//wD+/AAD/n/+AP38AAP/n + ///8/wAA//H///H/AAD//H//x/8AAP//h/w//wAA///wAf//AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAACKqAAAenAAAAAAAAAAAACoAAAAAAAAegAAAAAAAAB3AAAAAAAAAACKAAAAAA + AKAAqqqqqqqqoAAIAAAAAAoAAIqqqqqqqqoAAKAAAACAAAinqqqqqqqqAAAIAAAAoAAACqqqqqeqigAA + CgAACAAAAAiKqqoAAAAAAAAAAAoAAAAAqqqqoAAAAAAAgAAKAAAAAACqqqAAAAAAAKAACAAAAAAIqqqq + AAAAAABwAAoAAAAAAAqqqgAAAAAAcAAAAAAAAACqqqqgAAAAAAAAAHAAAAAAAKqqoAAAAAoAAAAIAAAA + AAqqqqgAAACAAAAACgAAAAAACKqqAAAIAAAAAACHAAAAAKqqqqAAoAAAAAAAAKAAAAAAAAAACAAAAAAA + AAAAdwAAAAAAigAAAAAAAAAAAAAHqKeooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////+Hj//+f/n/+f/+f/cAB7/vAAPf3gAD79+AA++/g + P//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/Ad//f/+//8/8///4B/////////////// + //////////////////8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqoAAAAAAKqoAAAAAAAAiqoA + AAAAAAAKqgAAAAAAAAiqgAAAAAAAAHqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAP//AAD//wAA//8AAP//AAD4DwAA/D8AAPw/AAD+PwAA/h8AAP8fAAD//wAA//8AAP// + AAD//wAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAAP4AAAX+ + BQAJ/wkADf4NABH/EQAW/hYAGf8ZAB3+HQAh/iEAJv4mACr+KgAt/i0AMf4xADX+NQA5/jkAPf49AEH+ + QQBF/kUAS/9LAE3+TQBR/lEAVf5VAFn+WQBe/14AYf5hAGX+ZQBp/mkAbv9uAHD/cAB1/nUAef55AH7+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFggIDhMXFxsXFxIOBgobAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFgwSIAAAAAAAAAAAAAAAAAAdEQwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMHQAA + AAAAAAAAAAAAAAAAAAAAAAAbDBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAbCAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAB0IAAAAAAAAAAAAAAAAAAAAAAAAAAwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREA + AAAAAAAAAAAAAAAAAAAACgAAACAbFgwBAQEBAQEBAQEBAQEBAQEBAQEAAAAAABsOAAAAAAAAAAAAAAAA + AAAKAAAAAAAAAAwBAQEBAQEBAQEBAQEBAQEBAQEbAAAAAAAgDgAAAAAAAAAAAAAAAA4AAAAAAAAdBAEB + AQEBAQEBAQEBAQEBAQEBAQEOAAAAAAAAGxIAAAAAAAAAAAAAGxYAAAAAAAAgICAgCgEBAQEBAQEBAQEB + AQEBAQEBAAAAAAAAAA4AAAAAAAAAAAAADAAAAAAAAAAAAAAWAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAA + AAAKAAAAAAAAAAAWHQAAAAAAAAAAAAwBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAK + AAAAAAAAAAAAAAAAACAGAQEBAQEBFgAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAOAAAAAAAAAAAAAAAA + AAgBAQEBAQEBBAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAATAAAAAAAAAAAAAAAXAQEBAQEBAQEBARYA + AAAAAAAAAAAAAAAAAAAADAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAFwEBAQEBAQYAAAAAAAAAAAAAAAAA + AAAADAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAWAQEBAQEBAQEXAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAS + AAAAAAAAAAAAAAAAAAoBBAQBAQEBAQEEAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAA + AAAAAAAOAQEBAQEBGwAAAAAAAAAAAAAAAAAAEQAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAYBAQEBAQEB + BAAAAAAAAAAAAAAAAAAbFwAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAEQwODAQBAQEBAR0AAAAAAAAAAAAA + AAAKAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAIAQBAQEBAQgAAAAAAAAAAAAAAB0WAAAAAAAAAAAA + AAoAAAAAAAAAAAAAAAAAAAARAQEBAQEBAQEdAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAMAAAAAAAAAAAA + AAAAABsbFxsRAQEBAQEKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAbEQAAAAAAAAAAAAAAAAAAAAAMAQEB + AQEBIAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAGw4AAAAAAAAAAAAAAAAAAAYBAQEBAQEBCAAAAAAAAAoA + AAAAAAAAAAAAAAAAAAAAAAAIGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCgAAAAAAAAAAAAAAAAAA + AAAAAAAAFwgdAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXDBMA + AAAAAAAAAAAAAAAAAAAAABIMGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODhIXAAAAAAAAAAAA + FxEMEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEw4IBAQECA4WIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///z///wAA///AAH//AAD//h//D/8AAP/4///j/wAA/+f///n/ + AAD/z////n8AAP+4AAAfPwAA/38AAA+fAAD+/AAAD88AAPz8AAAP7wAA/f+AAA/3AAD5/wAf//cAAPv/ + 4A//+wAA+//gD//7AAD7/4AH//sAAPv/+Af/+wAA+//wA//7AAD7/+AD//sAAPv//gH/+wAA+//8Af/z + AAD9//gA//cAAP3//wD/5wAA/v/+AH/vAAD/f/wAf98AAP8//8A/vwAA/5//gD9/AAD/5////P8AAP/x + ///x/wAA//x//8f/AAD//4f8P/8AAP//8AH//wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA/gAABf4FAAn+CQAP/g8AHv4eACv+KwAs/ywAM/8zADT/ + NAA+/j4AQv5CAEX+RQBJ/kkATP5MAFD+UABV/lUAWf9ZAF7+XgBh/mEAZf5lAGj+aABt/m0Acv5yAHX+ + dQB5/nkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkODhcAAAAAFg4O + AAAAAAAAAAAAAAAAAAAAAAAAAA8WAAAAAAAAAAAAAAAAExEAAAAAAAAAAAAAAAAAABMWAAAAAAAAAAAA + AAAAAAAAABEXAAAAAAAAAAAAAAANAAAADQQEAgQCBAIEAgQCBAAAAAAPAAAAAAAAAAAADQAAAAARAgIC + AgICAgICAgICCgAAAAAPAAAAAAAAABMAAAAAGREPBAICAgICAgICAgICAAAAAAAZAAAAAAAAFgAAAAAA + ABECAgICAgIGBwgICAgAAAAAAA8AAAAAABMAAAAAAAAAFxYFAgICAgAAAAAAAAAAAAAAAAAAAAAADgAA + AAAAAAAADwICAgICBwAAAAAAAAAAAAAADwAAAAANAAAAAAAAAAAAAAcCAgICAAAAAAAAAAAAAAANAAAA + AA0AAAAAAAAAAAAOAgICAgIHAAAAAAAAAAAAAA0AAAAADgAAAAAAAAAAAAAACgICAgIAAAAAAAAAAAAA + EwAAAAAAAAAAAAAAAAAAAA0CAgICAggAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAgICAgAAAAAA + AAAADQAAAAAAAAAXAAAAAAAAAAAADQICAgICCgAAAAAAABEAAAAAAAAAABcAAAAAAAAAAAAAABMCAgIC + AAAAAAAXAAAAAAAAAAAAABkTAAAAAAAAAAAOBAICAgQOAAAADwAAAAAAAAAAAAAAAAAOAAAAAAAAAAAA + AAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAADhMAAAAAAAAAAAAAEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAT + Dg0KCg0OEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////+Hj//+f + /n/+f/+f/cAB7/vAAPf3gAD79+AA++/gP//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/ + Ad//f/+//8/8///4B/////////////////////////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAB + AAAAAAAAAAAAAAABAAAAAQAAAAAAAAD+AAAE/wQAC/4LAAz/DAAR/hEAFf8VACP/IwA6/zoAQ/5DAFL/ + UgBb/1sAb/5vAHb+dgB5/3kAfv9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgICAgIFAAAAAAAA + AAAAAAcCAg4AAAAAAAAAAAAAAAALAwIMAAAAAAAAAAAAAAAAAAgCAwAAAAAAAAAAAAAAAAANBQIOAAAA + AAAAAAAAAAAAAAoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAPgP + AAD8PwAA/D8AAP4/AAD+HwAA/x8AAP//AAD//wAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/AEUA/wBjAP8AdgD+AIMA/wCGAP8AfAD/AHIA/wBeAP8AQAD+ + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/AAIA/wAnAP4AZgD/AKkA/wDiAP8A5QD/AMkA/wC0AP8ApQD+AJ4A/wCZAP8AnwD/ + AKgA/wC4AP8AzAD+AOkA/wDaAP8AmwD/AFwA/wAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAQAP8ATgD/AKwA/wDRAP4AuwD/AIAA/wBCAP8AIgD/ABUA/wAMAP8ABQD+ + AAIAAAAAAP8AAwD/AAYA/wANAP8AFwD+ACQA/wBMAP8AjQD/AMAA/wDTAP8AnAD+AD8A/wAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ACAD+AEQA/gC5AP4A0QD+AIcA/gA3AP4ACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABEA/gA+AP4AmwD+ + ANQA/gCmAP4AOAD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAZAP4AlgD/AOcA/wB2AP8AGQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+ACcA/wCQAP8A5gD/AH4A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD8A/wDTAP4AqwD/ACEA/wAGAP8AMAD/ + AF8A/wByAP4AcgD/AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+ + AHIA/wByAP8AcgD/AHIA/wByAP8ACwAAAAAAAAAAAP8AMQD/AMYA/wDBAP8AKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wACAP8ATAD/ANsA/wB3AP4AHwD/ + AEsA/wCHAP8AnAD/AKoA/wDSAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8ATAAAAAAAAAAAAAAAAAD/ABMA/wCYAP8AywD+ + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wA/AP8A3AD/ + AGMA/wAGAAAAAAAAAAAAAAAAAP8ACAD/AFQA/wDVAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AlAD+AAMAAAAAAAAAAAAA + AAAA/wAMAP8AhgD+AMwA/wAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ACIA/wDKAP8AfAD/AAIAAAAAAAAAAAAAAAAA/wARAP8AjgD/APIA/wD/AP4A/gD/AP8A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AzgD+ + ABQAAAAAAAAAAAAAAAAAAAAAAP8ADAD+AJkA/wC8AP8ACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD+AJ8A/gCpAP4AAwAAAAAAAAAAAAAAAAAAAAAA/gBPAP4AgAD+AIAA/gCAAP4AhAD+ + AN0A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4A+wD+ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABAA/gDJAP4AdQD+AAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ASAD/ANEA/wAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAiAP4AqwD/APkA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBCAP8A3AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AqAD/AI4A/wACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABgD/AFAA/wDRAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AHQA/wAyAP8AMgD+ADIA/wAyAP8AMgD/ADIA/wAyAP8AMgD+AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP8AuAD/AHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAWAP4A3wD/ADsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AEQA/wBTAP4AUwD/AFYA/wCDAP8A7gD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AK0A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AYAD/AL4A/wANAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBIAP4AxwD/ + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAQD/AGIA/wDkAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/APIA/wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ALwD/AMwA/wAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wBoAP4AsAD/AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAcAP4ApgD/ + APoA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wCuAP8ABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADgD/ANAA/wBDAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wB1AP4AqAD/AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAKAP4AJQD/ACYA/wAmAP8ANwD/AKEA/wD9AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wDsAP8AQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAgD/ + ANIA/wBMAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBvAP4AqwD+AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAEA/gAtAP4ArgD+APoA/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4ApQD+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABwD+ANEA/gBIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBYAP4AuwD/ABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AFMA/wDXAP8A+QD/APkA/wD5AP8A/QD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A8QD+AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AHgD/AM0A/wA4AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wApAP4A2AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wA8AP8AzQD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/gD+AJ0A/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ARwD/AMYA/wAaAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP4AzAD/AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ADQD/AHMA/wDuAP8A/gD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+APMA/wAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AkAD/AKAA/wACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AbwD/AL8A/wASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAMAP8AdgD/AMUA/wDLAP8AywD+ANIA/wD3AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wCPAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAbAP8A3wD/ + AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AGwD/AMgA/wBrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AIQA/wDxAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wDkAP8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAUA/wCOAP8ArgD/AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AFEA/gDeAP4AMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAzAP4AwwD+ + AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4AigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+AE4A/gDoAP4AKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AAYA/wB9AP8A1AD/ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ABsA/wCPAP8AngD+AJ4A/wCfAP8AvgD/APsA/wD/AP8A/wD+AP4A/wD/AP8A3wD/ACkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AQgD+ANgA/wBdAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAOAP8AmAD/AMMA/wAyAP4AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAUA/wBHAP8A1QD/AP0A/wD/AP8A/wD+AP4A/wD/AP8A/QD/ + AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wBMAP8AzgD+AHwA/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADQD/AJYA/wDNAP4AUgD/AAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AH4A/wDtAP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AN8A/wAcAAAAAAAAAAAAAAAAAP8ACwD/AGoA/wDYAP8AdQD+AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAQA/wBqAP4A4QD/ + AJwA/wAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ANQD+AHAA/wBxAP8AcQD/ + AHEA/wBxAP8AcQD+AHEA/wBxAP8AcQD/AG4A/wAmAAAAAAAAAAAA/wAqAP8ArAD/AN0A/wBMAP8AAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4AJAD/AKEA/wDnAP8AhwD/AC0A/wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wABAP8APQD+AJ4A/wDjAP8AkgD/ + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAgA/gBCAP4AqQD+ANMA/gCzAP4AXQD+AC0A/gANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gASAP4ANAD+AGsA/gC+AP4A0QD+ + AJcA/gA0AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/ADUA/wB7AP4AyAD/ + AMwA/wC/AP8AoAD/AHQA/wBVAP8APgD+ADMA/wArAP8ANAD/AEEA/wBaAP8AegD+AKcA/wDCAP8AzwD/ + AL4A/wBwAP8AKQD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD/AC8A/wBbAP8AhwD/AK8A/wDPAP8A5AD+APEA/wD1AP8A8AD/AOAA/wDJAP8AqgD+ + AIAA/wBTAP8AJQD/AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//+AB//8AAP/+AAAf/wAA//gAQAP/AAD/4D//gP8AAP/B///wfwAA/4AAAAw/AAD+AAAADh8AAPwc + AAAHDwAA/DgAAAeHAAD4eAAAB8MAAPj/AAAH4wAA+PwAAAfjAADx/AAH//EAAPH/gAf/8QAA8f8AA//x + AADx/wAD//EAAPH/wAH/8QAA8f/AAf/xAADx//wA//EAAPH/8AD/8QAA+P/gAH/jAAD4//4Af8MAAPx/ + /AB/xwAA/D/4AD+HAAD+D/8APg8AAP8H/gAcHwAA/4P+ABg/AAD/4H//wP8AAP/wD/4B/wAA//wAAAf/ + AAD//4AAP/8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA8A/gAzAP4ASwD/AFgA/gBVAP4ASQD+ + ADAA/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAEAP4ANwD+AIcA/wCzAP4AtAD+AI8A/gB1AP8AaQD+ + AGoA/gB4AP4AkgD/ALcA/gCvAP4AfwD+AC4A/wACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gADAP8ARAD+AK4A/gCWAP4AQQD/ABMA/gABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AAQD+ABYA/gBKAP4AnwD/AKYA/gA5AP4AAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD/AJsA/wCVAP8AHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AKgD/AKEA/wCMAP8ADAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ACMA/gC5AP4AUQD/AD8A/gB+AP4AuQD+ + APAA/wD2AP4A9gD+APYA/gD2AP8A9gD+APYA/gD2AP4A9gD/APYA/gD2AP4A9gD+AHkAAAAAAP4AAgD+ + AF0A/gCvAP8AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAXAP4AuAD+AC8AAAAAAAAAAAD+ + ABYA/gCfAP4A+gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+AP4A/gD+AP8A/wD+AP4A/gD+AP4AwQD/ + AAUAAAAAAAAAAAD+AEYA/wCvAP4ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD/AJwA/gBHAAAAAAAA + AAAA/wALAP4AhQD+AKoA/gCsAP8A8AD+AP4A/gD+AP4A/gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+ + AP4A/gD1AP8AHQAAAAAAAAAAAAAAAAD/AF0A/gCHAP4AAQAAAAAAAAAAAAAAAAAAAAAA/wBAAP8AlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AGgD/AKgA/wD8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDUAP8AywD/ + AMwA/wDLAP8AywD/AMsA/wBGAAAAAAAAAAAAAAAAAP8AAgD/AK0A/wAnAAAAAAAAAAAAAAAAAAAAAAD+ + AJcA/wA0AAAAAAAAAAAAAAAAAAAAAAD+AAcA/gBmAP4AjAD/AJIA/gDhAP4A/gD+AP4A/wD/AP4A/gD+ + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4ATgD+AHsAAAAAAAAAAAAA + AAAAAAAAAP4AtwD/AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP8ArQD+AP0A/gD+AP4A/gD/ + AP8A/gD+AP4A1AD+AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP4AqwAA + AAAAAAAAAAAAAAAAAAAA/gC9AP8AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD+AFAA/wBuAP4AdgD+ + ANQA/gD+AP8A/wD+AP4A/gD9AP4AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAMA/gC9AAAAAAAAAAAAAAAAAAAAAAD/ALsA/wAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AB4A/wCvAP8A/QD/AP8A/wD/AP8A/wD/AP8A/wDTAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ACAD/ALkAAAAAAAAAAAAAAAAAAAAAAP4ArwD/ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ANwD+AFAA/gBWAP4AwwD/AP8A/gD+AP4A/gD+AP0A/wBXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/gAoAP4AnAAAAAAAAAAAAAAAAAAAAAAA/gB6AP8AVgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AIwD+ALgA/gD9AP8A/wD+AP4A/gD+AP4A/gD/AMgA/gAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AHIA/gBcAAAAAAAAAAAAAAAAAAAAAAD+AB8A/wCzAP4ACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAcAP4AMgD+ADsA/wCrAP4A/gD+AP4A/gD+AP8A/QD+ + AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAQAP4AuwD+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AGUA/wCJAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAkAP8AvQD/AP4A/wD/AP8A/wD/ + AP8A/wD/AP8AwQD/AAUAAAAAAAAAAAAAAAAAAAAAAP8ABgD/AJ8A/wBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABQD+AIsA/gB2AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAkA/gAUAP8AIAD+ + AJcA/gD8AP4A/gD/AP8A/gD6AP4ARwAAAAAAAAAAAAAAAAD+AAkA/gCMAP8AdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ABQD+AIQA/gCaAP8AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + ACAA/wC0AP4A9QD+APUA/gD1AP8A9gD+APUA/gCyAAAAAAAAAAAA/gAeAP4AqgD+AG8A/wADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AEkA/wC5AP4AbgD+ABQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAbAP8AfQD+ALUA/gA3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAwA/wBkAP8AswD/ + AJgA/wBVAP8AJQD/ABEA/wAGAP8AAQD/AAIA/wAIAP8AEwD/ACgA/wBeAP8AngD/AK8A/wBVAP8ACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/gAFAP4AMAD/AHAA/gCgAP4AsAD+ALoA/wDAAP4AwAD+ALkA/gCvAP8AnAD+AGcA/gArAP4AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////+Af//4AAf/4D8B/8P/8P+AAAh/GA + AGPjAABx58AAceeAH/nn4A/558AP+efwB/nn8Af55/gD+eP4A/Hx/AHj8PwBx/h+AYf+H/4f/wAAP//A + AP////////////////////////////////8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/ACsA/wAeAP8AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD4A/gBlAP8AXgD+AEEA/wA1AP4AQgD/ + AF8A/gBmAP8AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/AG4A/wBcAP8AagD/AHsA/wB7AP8AewD/ + AHsA/wB7AP8AWwD/ADMA/wBpAP8ABgAAAAAAAAAAAAAAAAD/AGwA/gAMAP8AKQD+ALwA/wD7AP4A/gD/ + AP8A/gD+AP8A/wD+AO0A/wAIAP4AEQD/AGcAAAAAAAAAAAD/ADYA/wAzAAAAAAD/AAEA/wBtAP8A3AD/ + AP8A/wD/AP8AgQD/AGYA/wBlAP8AEQAAAAAA/wA/AP8AKAAAAAAA/gBdAP8ABAAAAAAAAAAAAP4AGwD/ + AKQA/gD0AP8A/wD+AJAAAAAAAAAAAAAAAAAAAAAAAP8ABwD+AFoAAAAAAP8AWgD/AAYAAAAAAAAAAAAA + AAAA/wBVAP8AxQD/AP8A/wDzAP8AFwAAAAAAAAAAAAAAAAD/AAwA/wBVAAAAAAD+ACYA/wBFAAAAAAAA + AAAAAAAAAP8ADwD+AIkA/wDqAP4A/gD/AIYAAAAAAAAAAAAAAAAA/wBPAP4AGwAAAAAAAAAAAP8AXwD/ + AB8AAAAAAAAAAAAAAAAA/wBAAP8ArQD/AP4A/wDuAP8AEwAAAAAA/wAnAP8AWAAAAAAAAAAAAAAAAAD/ + AAEA/gBaAP8ATwD+AAUAAAAAAP4ACAD/AGoA/gB6AP8AegD+ADMA/wBUAP4AVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/ABwA/wBgAP8AYgD/AGEA/wBhAP8AYQD/AGIA/wBfAP8AFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA/B8AAPAHAADAAQAAwAEAAJAEAACYPAAAnBwAAJwcAADOCQAAwgMAAPAH + AAD//wAA//8AAP//AAA= + + + \ No newline at end of file diff --git a/SLC1-N/MES.cs b/SLC1-N/MES.cs new file mode 100644 index 0000000..5ae4edb --- /dev/null +++ b/SLC1-N/MES.cs @@ -0,0 +1,114 @@ +using Newtonsoft.Json; +using SLC1_N; + +//using NPOI.SS.Formula.Functions; +//using Org.BouncyCastle.Asn1.Ocsp; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; + +namespace C_Windows_1 +{ + class MES + { + static string ip; + static string port; + + public MES(string IP, string PORT) + { + ip = IP; + port = PORT; + } + + /// + /// 接口调用 + /// + public static string HTTPPost(string requstUrl, string requestParams) + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requstUrl); + + //Post请求方式 + request.Method = "POST"; + + // 内容类型 + request.ContentType = "application/json"; + byte[] data = Encoding.UTF8.GetBytes(requestParams);// JsonStringToObject + + request.ContentLength = data.Length; + + using (Stream reqStream = request.GetRequestStream()) + { + reqStream.Write(data, 0, data.Length); + reqStream.Close(); + } + + // 获得响应流 + HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse(); + StreamReader myreader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); + // 获得数据 + + string responseText = myreader.ReadToEnd(); + response.Close(); + myreader.Close(); + return responseText; + + } + + + /// + /// mes接口 + /// + public string UploadData(MES_IN_Data request) + { + string logtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + string requstUrl = string.Format("http://{0}:{1}/XX/XXX/XXXX", ip, port); + string requestParams = JsonConvert.SerializeObject(request); + + mxlLog.Instance.MESDebug($"UploadData [IN]Url:{requstUrl}"); + mxlLog.Instance.MESDebug($"UploadData [IN]data:{requestParams}"); + + string responseText = HTTPPost(requstUrl, requestParams); + mxlLog.Instance.MESDebug($"UploadData [IN]return:{responseText}"); + + return responseText; + } + + public string UploadData(MES_OUT_Data request) + { + string logtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + string requstUrl = string.Format("http://{0}:{1}/XX/XXX/XXXX", ip, port); + string requestParams = JsonConvert.SerializeObject(request); + + mxlLog.Instance.MESDebug($"UploadData [OUT]Url:{requstUrl}"); + mxlLog.Instance.MESDebug($"UploadData [OUT]data:{requestParams}"); + + string responseText = HTTPPost(requstUrl, requestParams); + mxlLog.Instance.MESDebug($"UploadData [OUT]return:{responseText}"); + + return responseText; + } + + public class MES_IN_Data + { + public string time { get; set; } + public string code { get; set; } + public string fulltime { get; set; } + public string balantime { get; set; } + public string testtime { get; set; } + public string exhausttime { get; set; } + } + + public class MES_OUT_Data + { + public string time { get; set; } + public string code { get; set; } + public string result { get; set; } + public string TestPressure { get; set; } + public string LeakValue { get; set; } + } + } +} diff --git a/SLC1-N/ModbusTCP_28.cs b/SLC1-N/ModbusTCP_28.cs new file mode 100644 index 0000000..d7d3971 --- /dev/null +++ b/SLC1-N/ModbusTCP_28.cs @@ -0,0 +1,952 @@ +using NetWorkHelper; +using NetWorkHelper.IModels; +using NetWorkHelper.TCP; +using SLC1_N; +using Sunny.UI; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Globalization; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml.Linq; +using static System.Net.Mime.MediaTypeNames; + +namespace SLC1_N +{ + public class ModbusTCP_28 // 28仪器线程类 + { + private Thread RunThread; // 线程 + + public bool[] ArrCoil = new bool[10]; + public uint[] ArrRegister = new uint[100]; + + public OriginClient chxclient; + public string IP; // ip + + public bool isthread = true; // 线程标志位 + private bool disposed = false; // 添加IDisposable接口 + public bool isRunning { get; set; } // 运行标志位 + private string CHX4; // 记录站号的4位十六进制 + //public bool isReadRegister = false; // 读取寄存器开关标志位 + + public ModbusTCP_28(int CH) + { + isRunning = false; + CHX4 = CH.ToString("X4"); + //Console.WriteLine($"将地址转为4位十六进制: {CHX4}和{CHX4.Substring(2, 2)}01"); + + // 初始化数组 + for (int i = 0; i < ArrCoil.Length; i++) + { + ArrCoil[i] = false; + } + + // 初始化数组 + for (int i = 0; i < ArrRegister.Length; i++) + { + ArrRegister[i] = 0; + } + + chxclient = new OriginClient(CH); + } + + // 连接 + public void Connect(string ip) + { + try + { + IP = ip; + + // 先取消事件订阅 + if (chxclient != null) + { + chxclient.OnDataReceived -= Slot_CH1DataReceived; + chxclient.Disconnect(); + } + + // 新连接 + chxclient.Connect("2000", IP, "9999"); + chxclient.OnDataReceived += Slot_CH1DataReceived; + } + catch (Exception ex) + { + mxlLog.Instance.Error($"ModbusTCP_28[{CHX4}]重连失败: {ex.Message}"); + } + } + + // 断开 + public void Disconnect() + { + if (chxclient.IsConnect) + { + chxclient.Disconnect(); + } + } + + /* + * 连接标志位仅检查TCP连接是否建立 + * 但Modbus设备可能还未准备好通信(设备启动延迟、端口未完全初始化等 + * 加点延时 + */ + // 启动通信线程 + public void Start() + { + if (RunThread == null || !RunThread.IsAlive) + { + isthread = true; + RunThread = new Thread(() => + { + Thread.Sleep(500); // 首次启动延迟(重要) + run(); + }); + RunThread.IsBackground = true; // 设为后台线程 + RunThread.Start(); + } + } + + ~ModbusTCP_28() + { + Dispose(false); + } + + // 通信主循环 + private void run() + { + int sleepcount = 2; + while (isthread) + { + try + { + if (chxclient.IsConnect) + { + //Console.WriteLine($"{CHX4}-[读取]主循环 T: {chxclient.IsConnect}"); + if (sleepcount > 0) // 防止刚开始连接 不稳定 加延时 + { + sleepcount--; + Thread.Sleep(250); + } + + Thread.Sleep(250); + readCoil(); + + Thread.Sleep(250); + readRegister(); + } + else + { + //Console.WriteLine($"{CHX4}-[读取]主循环 F: {chxclient.IsConnect}"); + isRunning = false; + } + } + catch + { + mxlLog.Instance.Error($"ModbusTCP_28[{CHX4}]-[读取] 异常: {chxclient.IsConnect}"); + isRunning = false; + Thread.Sleep(1000); + } + } + } + + // 停止方法 + public void Stop() + { + isthread = false; + if (RunThread != null && RunThread.IsAlive) + { + RunThread.Join(1000); // 等待线程结束,最多1秒 + } + } + + // 实现IDisposable + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + // 释放资源 + protected virtual void Dispose(bool disposing) + { + if (!disposed) + { + if (disposing) + { + Stop(); + Disconnect(); + chxclient?.Dispose(); + } + disposed = true; + } + } + + // 接收函数 + private void Slot_CH1DataReceived(string str, int idata) + { + //Console.WriteLine($"{CHX4}-[接收]数据:{str} idata:{idata}"); + + isRunning = true; // 收到数据才算通讯正常。可以排除ip正确,但通道不正确的情况 + + if (str.Length > 6 && str.Substring(0, 4) == $"{CHX4.Substring(2, 2)}01") + { + ParseCoilResponse(str, ref ArrCoil); + } + else if (str.Length > 6 && str.Substring(0, 4) == $"{CHX4.Substring(2, 2)}03") + { + ParseRegisterResponse(str, ref ArrRegister); + } + } + + // 解析线圈状态响应 + private void ParseCoilResponse(string response, ref bool[] targetArray) + { + try + { + if (response.Length < 6 || !response.StartsWith($"{CHX4.Substring(2, 2)}01")) + return; + + int byteCount = Convert.ToInt32(response.Substring(4, 2), 16); // 提取字节数(第3字节) + + int dataIndex = 6; // 提取线圈数据(从第4字节开始) + for (int i = 0; i < byteCount; i++) + { + if (dataIndex + 2 > response.Length) break; + + byte coilData = Convert.ToByte(response.Substring(dataIndex, 2), 16); + dataIndex += 2; + + // 解析每个Bit(8个线圈) + for (int bit = 0; bit < 8; bit++) + { + int coilIndex = i * 8 + bit; // 计算线圈全局索引 + if (coilIndex >= targetArray.Length) break; + + targetArray[coilIndex] = (coilData & (1 << bit)) != 0 ? true : false; + } + } + } + catch (Exception ex) + { + Console.WriteLine($"解析线圈状态出错: {ex.Message}"); + mxlLog.Instance.Error($"ModbusTCP_28[{CHX4}] 解析线圈状态出错", ex); + } + } + + // 解析寄存器响应 + private void ParseRegisterResponse(string response, ref uint[] targetArray) + { + try + { + if (response.Length < 250 || !response.StartsWith($"{CHX4.Substring(2, 2)}03")) // 实际正常收到长度254 + return; + + int dataIndex = 6; // 数据开始位置 + int registerIndex = 0; + + while (dataIndex + 4 <= response.Length && registerIndex < targetArray.Length) + { + // 每2字节(4个十六进制字符)表示一个寄存器值 + targetArray[registerIndex++] = Convert.ToUInt32(response.Substring(dataIndex, 4), 16); + dataIndex += 4; + } + } + catch (Exception ex) + { + Console.WriteLine($"解析寄存器值出错: {ex.Message}"); + mxlLog.Instance.Error($"ModbusTCP_28[{CHX4}] 解析寄存器值出错", ex); + } + } + + // 读取线圈 + public void readCoil() + { + if (!chxclient.IsConnect) + return; + + chxclient?.SendData($"{CHX4.Substring(2, 2)} 01 00 00 00 07"); // 0开始读7个 + } + + // 读取寄存器 + private void readRegister() + { + if (!chxclient.IsConnect) + return; + + chxclient?.SendData($"{CHX4.Substring(2, 2)} 03 03 E8 00 3D "); // 读取 1000 - 1061 + } + + // 读取浮点 + public string readFloat(int index) // addr 是十进制地址(如 1013) + { + try + { + ushort low = (ushort)ArrRegister[index]; // 低位 + ushort high = (ushort)ArrRegister[index + 1]; // 高位 + float fdata = TwoUInt16ToFloat(high, low); + + return fdata.ToString(); // 返回字符串形式的浮点数 + } + catch (Exception ex) + { + mxlLog.Instance.Error($"ModbusTCP_28[{CHX4}] 解析浮点数出错", ex); + } + return "0"; + } + + // 读取浮点 + public string readFloatF2(int index) // addr 是十进制地址(如 1013) + { + try + { + ushort low = (ushort)ArrRegister[index]; // 低位 + ushort high = (ushort)ArrRegister[index + 1]; // 高位 + float fdata = TwoUInt16ToFloat(high, low); + + return fdata.ToString("F2"); // 返回字符串形式的浮点数 + } + catch (Exception ex) + { + mxlLog.Instance.Error($"ModbusTCP_28[{CHX4}] 解析浮点数出错", ex); + } + return "0"; + } + + + // 写线圈 + public void writeCoil(string straddress, bool bdata) + { + if (!chxclient.IsConnect) + return; + + try + { + int address = Convert.ToInt32(straddress); + string hexAddress = address.ToString("X4"); // 将地址转为4位十六进制(如 "1" → "0001") + if(bdata) + { + chxclient?.SendData($"{CHX4.Substring(2, 2)} 05 00 {hexAddress.Substring(2, 2)} FF 00"); + } + else + { + chxclient?.SendData($"{CHX4.Substring(2, 2)} 05 00 {hexAddress.Substring(2, 2)} 00 00"); + } + } + catch (Exception ex) + { + MessageBox.Show($"输入错误: {ex.Message}"); + mxlLog.Instance.Error($"ModbusTCP_28[{CHX4}] writeCoil输入错误", ex); + } + } + + // 写入单个保持寄存器 + public void writeRegister(int address, int value) + { + if (!chxclient.IsConnect) + return; + + try + { + string hexAddress = address.ToString("X4"); // 将地址转为4位十六进制(如 "1" → "0001") + string hexValue = value.ToString("X4"); + string message = $"{CHX4.Substring(2, 2)} 06 {hexAddress.Substring(0, 2)} {hexAddress.Substring(2, 2)} {hexValue.Substring(0, 2)} {hexValue.Substring(2, 2)}"; + chxclient?.SendData(message); + } + catch (Exception ex) + { + MessageBox.Show($"输入错误: {ex.Message}"); + mxlLog.Instance.Error($"ModbusTCP_28[{CHX4}] writeRegister输入错误", ex); + } + } + + //// 写入多个保持寄存器(功能码16),每个int占用2个寄存器(32位) + //public void writeRegisters(int address, int[] values) + //{ + // if (!chxclient.IsConnect || values == null || values.Length == 0) + // return; + + // try + // { + // string hexAddress = address.ToString("X4"); + // int regCount = values.Length * 2; // 每个int占2个寄存器 + // string message = $"{CHX4.Substring(2, 2)} 10 " + // 站号 + 功能码 + // $"{hexAddress.Substring(0, 2)} {hexAddress.Substring(2, 2)} " + // 地址 + // //$"{(regCount >> 8):X2} {(regCount & 0xFF):X2} " + // 寄存器数量 + // $"{(regCount * 2):X2}"; // 字节数 + + // foreach (int val in values) + // { + // byte[] bytes = BitConverter.GetBytes(val); + // if (BitConverter.IsLittleEndian) + // Array.Reverse(bytes); // 转为大端序 + + // message += $" {bytes[0]:X2}{bytes[1]:X2}{bytes[2]:X2}{bytes[3]:X2}"; + // } + + // chxclient.SendData(message); + // } + // catch (Exception ex) + // { + // Console.WriteLine($"写入多寄存器(int)失败: {ex.Message}"); + // } + //} + + // 修改为:写入多个保持寄存器(功能码16),每个int对应1个寄存器 + public void writeRegisters(int address, int[] values) + { + if (!chxclient.IsConnect || values == null || values.Length == 0) + return; + + try + { + string hexAddress = address.ToString("X4"); + int regCount = values.Length; // 修正:每个int对应1个寄存器 + int byteCount = regCount * 2; + + // 构建报文头 + string message = $"{CHX4.Substring(2, 2)} 10 " + // 站号 + 功能码 + $"{hexAddress.Substring(0, 2)} {hexAddress.Substring(2, 2)} " + // 地址 + $"{(regCount >> 8):X2} {(regCount & 0xFF):X2} " + // 寄存器数量(关键修复!) + $"{byteCount:X2} "; // 字节数 + + // 添加所有数据 + foreach (int val in values) + { + // 将int拆分为两个字节(大端序) + ushort value = (ushort)val; // 只取低16位 + message += $"{(value >> 8):X2} {(value & 0xFF):X2} "; + } + + Console.WriteLine($"多个保持寄存器 writeRegisters(): {message}"); + chxclient?.SendData(message.Replace(" ", "")); // 移除空格 + } + catch (Exception ex) + { + Console.WriteLine($"写入多寄存器失败: {ex.Message}"); + mxlLog.Instance.Error($"ModbusTCP_28[{CHX4}] 写入多寄存器失败", ex); + } + } + + /* + 高16位(1014): 0x4048 + 低16位(1013): 0xF5C3 + 完整32位: 0x4048F5C3 + */ + // 写入浮点 + public void writeFloat(int address, float value) + { + if (!chxclient.IsConnect) + return; + + try + { + byte[] floatBytes = BitConverter.GetBytes(value); // float转换为4字节(IEEE 754格式) + + ushort highRegister = BitConverter.ToUInt16(floatBytes, 2); // 高16位 + ushort lowRegister = BitConverter.ToUInt16(floatBytes, 0); // 低16位 + + string hexAddress = address.ToString("X4"); // 4位十六进制地址 + string message = string.Format( + "{0} 10 {1} {2} 00 02 04 {3:X2}{4:X2} {5:X2}{6:X2}", + CHX4.Substring(2, 2), // 站号 + hexAddress.Substring(0, 2), // 起始地址高字节 + hexAddress.Substring(2, 2), // 起始地址低字节 + (byte)(lowRegister >> 8), // 低寄存器高字节 + (byte)lowRegister, // 低寄存器低字节 + (byte)(highRegister >> 8), // 高寄存器高字节 + (byte)highRegister // 高寄存器低字节 + ); + + // 4. 自动添加CRC校验(假设SendData会自动添加) + chxclient?.SendData(message); + //Console.WriteLine($"writeFloat(): {message}"); + //chxclient.SendData("01 10 03 F7 00 02 04 F5 C3 40 48"); // 数据是3.14 站号1功能10,1015写两个字节 1015-F5C3 1016-4048 + } + catch (Exception ex) + { + MessageBox.Show($"写入浮点数失败: {ex.Message}"); + mxlLog.Instance.Error($"ModbusTCP_28[{CHX4}] 写入浮点数失败", ex); + } + } + + // 写入多个浮点数(功能码16),每个float占用2个寄存器(32位) + public void writeFloats(int address, float[] values) + { + if (!chxclient.IsConnect || values == null || values.Length == 0) + return; + + try + { + // 构造报文头 + string hexAddress = address.ToString("X4"); + int regCount = values.Length * 2; // 每个float占2个寄存器 + string message = $"{CHX4.Substring(2, 2)} 10 " + // 站号 + 功能码 + $"{hexAddress.Substring(0, 2)} {hexAddress.Substring(2, 2)} " + // 地址 + $"{(regCount >> 8):X2} {(regCount & 0xFF):X2} " + // 寄存器数量 + $"{(regCount * 2):X2}"; // 字节数 + + foreach (float val in values) + { + byte[] bytes = BitConverter.GetBytes(val); + if (BitConverter.IsLittleEndian) + Array.Reverse(bytes); // 转为大端序 + + // 拆分为两个16位寄存器(高16位在前) + ushort high = BitConverter.ToUInt16(bytes, 0); + ushort low = BitConverter.ToUInt16(bytes, 2); + message += $" {(high >> 8):X2}{(high & 0xFF):X2} {(low >> 8):X2}{(low & 0xFF):X2}"; + } + + chxclient?.SendData(message); // 假设自动添加CRC + } + catch (Exception ex) + { + Console.WriteLine($"写入多浮点数失败: {ex.Message}"); + mxlLog.Instance.Error($"ModbusTCP_28[{CHX4}] 写入多浮点数失败", ex); + } + } + + //UInt16转float + public static float TwoUInt16ToFloat(UInt16 high, UInt16 low) + { + Int32 sum = (high << 16) + (low & 0xFFFF); + byte[] bs = BitConverter.GetBytes(sum); + float fs = BitConverter.ToSingle(bs, 0); + return fs; + } + } + + + public enum _28Addr + { + [Description("参数编号")] + ParameterNumber = 1000, // 03E8 + + [Description("当前参数名称")] + CurrentParameterName1 = 1001, // 3E9 + + [Description("当前参数名称")] + CurrentParameterName2 = 1002, // 3EA + + [Description("当前参数名称")] + CurrentParameterName3 = 1003, // 3EB + + [Description("当前参数名称")] + CurrentParameterName4 = 1004, // 3EC + + [Description("当前参数名称")] + CurrentParameterName5 = 1005, // 3ED + + [Description("充气时间")] + InflationTime = 1006, // 3EE + + [Description("平衡时间")] + BalanceTime = 1007, // 3EF + + [Description("检测时间")] + DetectionTime = 1008, // 3F0 + + [Description("排气时间")] + ExhaustTime = 1009, // 3F1 + + [Description("解除输出2时间")] + ReleaseOutput2Time = 1010, // 3F2 + + [Description("延时1")] + Delay1 = 1011, // 3F3 + + [Description("延时2")] + Delay2 = 1012, // 3F4 + + [Description("充气压力上限低位")] + InflationPressureUpperLimitLow = 1013, // 3F5 + + [Description("充气压力上限高位")] + InflationPressureUpperLimitHigh = 1014, // 3F6 + + [Description("充气压力下限低位")] + InflationPressureLowerLimitLow = 1015, // 3F7 + + [Description("充气压力下限高位")] + InflationPressureLowerLimitHigh = 1016, // 3F8 + + [Description("平衡压差上限低位")] + BalancePressureDiffUpperLimitLow = 1017, // 3F9 + + [Description("平衡压差上限高位")] + BalancePressureDiffUpperLimitHigh = 1018, // 3FA + + [Description("平衡压差下限低位")] + BalancePressureDiffLowerLimitLow = 1019, // 3FB + + [Description("平衡压差下限高位")] + BalancePressureDiffLowerLimitHigh = 1020, // 3FC + + [Description("允许泄漏量上限低位")] + AllowableLeakageUpperLimitLow = 1021, // 3FD + + [Description("允许泄漏量上限高位")] + AllowableLeakageUpperLimitHigh = 1022, // 3FE + + [Description("允许泄漏量下限低位")] + AllowableLeakageLowerLimitLow = 1023, // 3FF + + [Description("允许泄漏量下限高位")] + AllowableLeakageLowerLimitHigh = 1024, // 400 + + [Description("等效容积低位")] + EquivalentVolumeLow = 1025, // 401 + + [Description("等效容积高位")] + EquivalentVolumeHigh = 1026, // 402 + + [Description("压力单位")] + PressureUnit = 1027, // 403 + + [Description("泄漏量单位")] + LeakageUnit = 1028, // 404 + + [Description("仪器状态")] + DeviceStatus = 1034, // 40A + + [Description("大漏泄漏量低位(平衡压差)")] + LargeLeakageLow = 1035, // 40B + + [Description("大漏泄漏量高位(平衡压差)")] + LargeLeakageHigh = 1036, // 40C + + [Description("大漏泄漏量单位(压差单位)")] + LargeLeakageUnit = 1037, // 40D + + [Description("微漏泄漏量低位(泄漏量)")] + MicroLeakageLow = 1038, // 40E + + [Description("微漏泄漏量高位(泄漏量)")] + MicroLeakageHigh = 1039, // 40F + + [Description("微漏泄漏量单位(泄漏量)")] + MicroLeakageUnit = 1040, // 410 + + [Description("测试结果")] + TestResult = 1041, // 411 + + [Description("后台压力低位")] + BackgroundPressureLow = 1048, // 418 + + [Description("后台压力高位")] + BackgroundPressureHigh = 1049, // 419 + + [Description("后台压差低位")] + BackgroundPressureDiffLow = 1050, // 41A + + [Description("后台压差高位")] + BackgroundPressureDiffHigh = 1051, // 41B + + [Description("记录-测试压力低位")] + RecordTestPressureLow = 1057, // 421 + + [Description("记录-测试压力高位")] + RecordTestPressureHigh = 1058, // 422 + + [Description("记录-压力单位")] + RecordPressureUnit1 = 1059, // 423 + [Description("记录-压力单位")] + RecordPressureUnit2 = 1060, // 424 + [Description("记录-压力单位")] + RecordPressureUnit3 = 1061, // 0425 + + + // 下面地址无法读取 + + [Description("记录-测试泄漏量低位")] + RecordTestLeakageLow = 1062, // 426 + [Description("记录-测试泄漏量高位")] + RecordTestLeakageHigh = 1063, // 427 + [Description("记录-泄漏量单位")] + RecordLeakageUnit1 = 1064, // 428 + [Description("记录-泄漏量单位")] + RecordLeakageUnit2 = 1065, // 429 + [Description("记录-泄漏量单位")] + RecordLeakageUnit3 = 1066, // 42A + [Description("记录-泄漏量单位")] + RecordLeakageUnit4 = 1067 // 42B + } + + + // 原FrmClient类 + #region 原FrmClient类 + public class OriginClient + { + private SocketState _connectState { get; set; }// 连接状态 + + private ITcpClient _client { get; set; }// 连接对象 + + private System.Timers.Timer _timer { get; set; } // 定时器 + + public bool IsConnect { get; private set; } = false;// 连接状态标志 + + public int ChannelId { get; private set; }// 通道标识 + + public event Action OnDataReceived;// 数据接收事件 + + public event Action OnConnectionStateChanged;// 连接状态变化事件 + + /// + /// 初始化客户端 + /// + /// 通道标识 + public OriginClient(int channelId) + { + ChannelId = channelId; + InitializeClient(); + } + + private void InitializeClient() + { + _client = new ITcpClient + { + IsReconnection = true + }; + + _client.OnStateInfo += Client_OnStateInfo; + _client.OnRecevice += Client_OnRecevice; + _client.OnErrorMsg += Client_OnErrorMsg; + } + + /// + /// 将字符串转换为十六进制字节数组 + /// + private static byte[] StrtoHexbyte(string hexstring) + { + int i; + hexstring = hexstring.Replace(" ", ""); + + if ((hexstring.Length % 2) != 0) + { + byte[] returnbytes = new byte[(hexstring.Length + 1) / 2]; + + for (i = 0; i < (hexstring.Length - 1) / 2; i++) + { + returnbytes[i] = Convert.ToByte(hexstring.Substring(i * 2, 2), 16); + } + returnbytes[returnbytes.Length - 1] = Convert.ToByte(hexstring.Substring(hexstring.Length - 1, 1).PadLeft(2, '0'), 16); + + return returnbytes; + } + else + { + byte[] returnBytes = new byte[hexstring.Length / 2]; + + for (i = 0; i < returnBytes.Length; i++) + { + returnBytes[i] = Convert.ToByte(hexstring.Substring(i * 2, 2), 16); + } + + return returnBytes; + } + } + + /// + /// 计算CRC冗余码 + /// + private int Crc16_Modbus(byte[] modbusdata, int length) + { + int i, j; + int crc = 0xffff; // 0xffff or 0 + for (i = 0; i < length; i++) + { + crc ^= modbusdata[i] & 0xff; + for (j = 0; j < 8; j++) + { + if ((crc & 0x01) == 1) + { + crc = (crc >> 1) ^ 0xa001; + } + else + { + crc >>= 1; + } + } + } + + return crc; + } + + /// + /// 连接服务器 + /// connectinterval:心跳包发送间隔 0不发 + /// + public void Connect(string connectinterval, string ipaddress, string port) + { + try + { + if (!_client.IsStart) + { + _client.IsReconnection = true; + + int interval = int.Parse(connectinterval); + + _timer = new System.Timers.Timer + { + Interval = 1000 * interval + }; + _timer.Elapsed += Timer_Elapsed; + _timer.Start(); + + _client.ServerIp = ipaddress; + _client.ServerPort = int.Parse(port); + + _client.StartConnect(); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + MessageBox.Show(ex.StackTrace); + + Disconnect(); + throw; + } + } + + private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + // 可以在这里实现定时发送逻辑 + } + + /// + /// 连接错误处理 + /// + private void Client_OnErrorMsg(object sender, NetWorkHelper.ICommond.TcpClientErrorEventArgs e) + { + IsConnect = false; + OnConnectionStateChanged?.Invoke(IsConnect, ChannelId); + } + + /// + /// 接收数据处理 + /// + private void Client_OnRecevice(object sender, NetWorkHelper.ICommond.TcpClientReceviceEventArgs e) + { + var len = e.Data.Length; + if (len > 0) + { + string returnStr = ""; + + for (int i = 0; i < len; i++) + { + returnStr += e.Data[i].ToString("X2"); + } + + var message = returnStr; + string value = message.Replace(" ", ""); + + OnDataReceived?.Invoke(message, ChannelId); + } + } + + /// + /// 连接状态处理 + /// + private void Client_OnStateInfo(object sender, NetWorkHelper.ICommond.TcpClientStateEventArgs e) + { + _connectState = e.State; + + if (e.StateInfo.Contains("已断开服务器连接")) + { + Disconnect(); + } + else if (e.StateInfo.Contains("已连接")) + { + IsConnect = true; + OnConnectionStateChanged?.Invoke(IsConnect, ChannelId); + } + else + { + IsConnect = false; + OnConnectionStateChanged?.Invoke(IsConnect, ChannelId); + } + } + + + object sendLock = new object(); + /// + /// 发送数据 + /// + public void SendData(string sendMsg) + { + if (!string.IsNullOrWhiteSpace(sendMsg) && IsConnect) + { + try + { + byte[] byt = StrtoHexbyte(sendMsg); + int str2 = Crc16_Modbus(byt, byt.Length); + string str3 = Convert.ToString((str2 >> 8) & 0xff, 16); + string str4 = Convert.ToString(str2 & 0xff, 16); + + if (str3.Length == 1) + { + str3 = "0" + str3; + } + if (str4.Length == 1) + { + str4 = "0" + str4; + } + + sendMsg = sendMsg + str4 + str3; + var message = StrtoHexbyte(sendMsg); + + if (_client != null) + { + lock (sendLock) + { + _client?.SendData(message); + } + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + MessageBox.Show(ex.StackTrace); + throw; + } + } + } + + /// + /// 断开连接 + /// + public void Disconnect() + { + if (_timer != null) + { + _timer.Stop(); + _timer.Dispose(); + _timer = null; + } + + if (_client != null) + { + _client.IsReconnection = false; + _client.StopConnect(); + _client.Dispose(); + } + + IsConnect = false; + OnConnectionStateChanged?.Invoke(IsConnect, ChannelId); + } + + /// + /// 释放资源 + /// + public void Dispose() + { + Disconnect(); + } + + } + #endregion +} diff --git a/SLC1-N/NGDatabase.cs b/SLC1-N/NGDatabase.cs new file mode 100644 index 0000000..0d39839 --- /dev/null +++ b/SLC1-N/NGDatabase.cs @@ -0,0 +1,183 @@ +using ADOX; +using System; +using System.Data.OleDb; +using System.IO; + +namespace SLC1_N +{ + class NGDatabase + { + /// + /// 判断是否有数据库,没有就新建 + /// + public static void AddDatabase() + { + //判断所选路径是否有文件 + string filepath = System.Environment.CurrentDirectory + "\\Config\\NGCode\\CheckCode.mdb"; + if (!File.Exists(filepath)) + { + string constr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + System.Environment.CurrentDirectory + "\\Config\\NGCode\\CheckCode.mdb;"; + OleDbConnection con = new OleDbConnection(constr); + + string filepath2 = System.Environment.CurrentDirectory + "\\Config\\NGCode\\"; + Directory.CreateDirectory(filepath2);//新建文件夹 + + Catalog Product = new Catalog(); + Product.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Environment.CurrentDirectory + "\\Config\\NGCode\\CheckCode.mdb;Jet OLEDB:Engine Type=5;"); + + con.Open(); + + string sql = "CREATE TABLE NGCode ([条码] VarChar(50),[NG次数] VarChar(20))"; + OleDbCommand cmd = new OleDbCommand(sql, con); + + cmd.ExecuteNonQuery(); + con.Close(); + } + } + /// + /// NG的条码,添加进数据库里 + /// + /// + public static int ADDDATA(string NGCode) + { + //Boolean add = true; + //List code = new List(); + //string filepath = System.Environment.CurrentDirectory + "\\Config\\NGCode\\NGCode.mdb"; + + string constr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + System.Environment.CurrentDirectory + "\\Config\\NGCode\\CheckCode.mdb;"; + OleDbConnection con = new OleDbConnection(constr); + con.Open(); + + //string sql2 = "SELECT * FROM NGCode"; + string sql2 = "SELECT * FROM NGCode WHERE 条码='" + NGCode + "'"; + + OleDbCommand cmd2 = new OleDbCommand(sql2, con); + OleDbDataReader ngcodeinform = cmd2.ExecuteReader(); + string ngnum = null; + while (ngcodeinform.Read()) + { + //Account.Text = Convert.ToString(ngcodeinform["条码"]); + ngnum = Convert.ToString(ngcodeinform["NG次数"]); + } + + ngcodeinform.Close(); + con.Close(); + if (String.IsNullOrEmpty(ngnum)) + { + con.Open(); + string sql3 = " INSERT INTO NGCode(条码, NG次数) VALUES('" + NGCode + "', '" + 1 + "')"; + OleDbCommand cmd3 = new OleDbCommand(sql3, con); + cmd3.ExecuteNonQuery(); + con.Close(); + return 1; + } + else + { + int num = Convert.ToInt32(ngnum); + if (num == 1) + { + con.Open(); + string sql4 = " UPDATE NGCode SET NG次数='" + 2 + "' where 条码='" + NGCode + "'"; + OleDbCommand cmd4 = new OleDbCommand(sql4, con); + cmd4.ExecuteNonQuery(); + con.Close(); + return 2; + } + else if (num == 2) + { + con.Open(); + string sql5 = "DELETE FROM NGCode WHERE 条码='" + NGCode + "'"; + OleDbCommand cmd5 = new OleDbCommand(sql5, con); + cmd5.ExecuteNonQuery(); + con.Close(); + return 3; + } + else + { + return num; + } + } + //OleDbDataReader codeinform = cmd2.ExecuteReader(); + + ////下移游标,读取一行,如果没有数据了则返回false + //while (codeinform.Read()) + //{ + // code.Add(Convert.ToString(codeinform["条码"])); + //} + //codeinform.Close(); + //con.Close(); + ////遍历账户,查看是否有重复的账号 + //foreach (string ng in code) + //{ + // if (NGCode == ng) + // { + // //add = false; + // CheckData(); + // return; + // } + //} + + //if (add is true) + //{ + + ////string filepath = System.Environment.CurrentDirectory + "\\Config\\NGCode.mdb"; + //string constr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + System.Environment.CurrentDirectory + "\\Config\\Users\\UsersInfo.mdb;"; + //OleDbConnection con = new OleDbConnection(constr); + + + //} + } + + /// + /// OK的条码,判断是否在数据库中有NG记录 + /// + public static bool SelectData(string Code) + { + string constr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + System.Environment.CurrentDirectory + "\\Config\\NGCode\\CheckCode.mdb;"; + OleDbConnection con = new OleDbConnection(constr); + con.Open(); + + //string sql2 = "SELECT * FROM NGCode"; + string sql2 = "SELECT * FROM NGCode WHERE 条码='" + Code + "'"; + + OleDbCommand cmd2 = new OleDbCommand(sql2, con); + OleDbDataReader ngcodeinform = cmd2.ExecuteReader(); + string ngnum = null; + while (ngcodeinform.Read()) + { + //Account.Text = Convert.ToString(ngcodeinform["条码"]); + ngnum = Convert.ToString(ngcodeinform["NG次数"]); + } + + ngcodeinform.Close(); + con.Close(); + if (String.IsNullOrEmpty(ngnum)) + { + //con.Open(); + //string sql3 = " INSERT INTO NGCode(条码, NG次数) VALUES('" + Code + "', " + 1 + ")"; + //OleDbCommand cmd3 = new OleDbCommand(sql3, con); + //cmd3.ExecuteNonQuery(); + //con.Close(); + return true; + } + else + { + int num = Convert.ToInt32(ngnum); + if (num > 0) + { + con.Open(); + string sql4 = "DELETE FROM NGCode WHERE 条码='" + Code + "'"; + OleDbCommand cmd4 = new OleDbCommand(sql4, con); + cmd4.ExecuteNonQuery(); + con.Close(); + return false; + + } + else + { + return true; + } + } + } + } +} diff --git a/SLC1-N/ProductionData.cs b/SLC1-N/ProductionData.cs new file mode 100644 index 0000000..b116485 --- /dev/null +++ b/SLC1-N/ProductionData.cs @@ -0,0 +1,236 @@ +using System; +using System.Collections.Generic; + +namespace SLC1_N +{ + public class ProductionRecord // 记录产能 + { + private readonly JsonConfig config; + private readonly string configKey; + + public ProductionRecord(string configFilePath = "productiondata.json") + { + config = new JsonConfig(configFilePath); + configKey = "ProductionData"; + } + + // 产能数据 + private class ProductionData + { + public int Total { get; set; } + public int OK { get; set; } + public int NG { get; set; } + public DateTime LastUpdate { get; set; } + + public double OKRate => Total > 0 ? Math.Round(OK * 100.0 / Total, 2) : 0; + public double NGRate => Total > 0 ? Math.Round(NG * 100.0 / Total, 2) : 0; + } + + #region 公共接口 + + /// + /// OK加1 + /// + public void AddOK() + { + var data = GetProductionData(); + data.Total++; + data.OK++; + data.LastUpdate = DateTime.Now; + SaveProductionData(data); + } + + /// + /// NG加1 + /// + public void AddNG() + { + var data = GetProductionData(); + data.Total++; + data.NG++; + data.LastUpdate = DateTime.Now; + SaveProductionData(data); + } + + /// + /// 获取总产能 + /// + public int GetTotal() + { + return GetProductionData().Total; + } + + /// + /// 获取OK产能 + /// + public int GetOK() + { + return GetProductionData().OK; + } + + /// + /// 获取NG产能 + /// + public int GetNG() + { + return GetProductionData().NG; + } + + /// + /// 获取合格率 + /// + public double GetOKRate() + { + return GetProductionData().OKRate; + } + + /// + /// 获取不合格率 + /// + public double GetNGRate() + { + return GetProductionData().NGRate; + } + + /// + /// 获取最后更新时间 + /// + public DateTime GetLastUpdate() + { + return GetProductionData().LastUpdate; + } + + /// + /// 清除所有产能数据 + /// + public void Clear() + { + var data = new ProductionData + { + Total = 0, + OK = 0, + NG = 0, + LastUpdate = DateTime.Now + }; + SaveProductionData(data); + } + + /// + /// 获取所有产能信息 + /// + public Dictionary GetAllInfo() + { + var data = GetProductionData(); + return new Dictionary + { + { "Total", data.Total }, + { "OK", data.OK }, + { "NG", data.NG }, + { "OKRate", data.OKRate }, + { "NGRate", data.NGRate }, + { "LastUpdate", data.LastUpdate } + }; + } + + #endregion + + #region 私有方法 + + private ProductionData GetProductionData() + { + // 从配置中获取数据,如果不存在则创建新的 + if (config.ContainsKey(configKey)) + { + var data = config.GetValue(configKey); + if (data != null) + return data; + } + + return new ProductionData(); + } + + private void SaveProductionData(ProductionData data) + { + config.SetValue(configKey, data); + } + + #endregion + } + + + //public class MultiChannelProductionRecorder + //{ + // private readonly Dictionary _channelRecorders; + + // public MultiChannelProductionRecorder(string baseConfigPath = "production") + // { + // _channelRecorders = new Dictionary(); + + // // 初始化4个通道 + // for (int i = 1; i <= 4; i++) + // { + // string configPath = $"{baseConfigPath}_channel{i}.json"; + // _channelRecorders[i] = new ProductionRecorder(configPath); + // } + // } + + // public void AddOK(int channel) + // { + // if (_channelRecorders.ContainsKey(channel)) + // _channelRecorders[channel].AddOK(); + // } + + // public void AddNG(int channel) + // { + // if (_channelRecorders.ContainsKey(channel)) + // _channelRecorders[channel].AddNG(); + // } + + // public Dictionary GetChannelInfo(int channel) + // { + // return _channelRecorders.ContainsKey(channel) + // ? _channelRecorders[channel].GetAllInfo() + // : new Dictionary(); + // } + + // public void ClearChannel(int channel) + // { + // if (_channelRecorders.ContainsKey(channel)) + // _channelRecorders[channel].Clear(); + // } + + // public void ClearAll() + // { + // foreach (var recorder in _channelRecorders.Values) + // { + // recorder.Clear(); + // } + // } + + // // 获取总计信息 + // public Dictionary GetSummaryInfo() + // { + // int total = 0, ok = 0, ng = 0; + + // foreach (var recorder in _channelRecorders.Values) + // { + // var info = recorder.GetAllInfo(); + // total += (int)info["Total"]; + // ok += (int)info["OK"]; + // ng += (int)info["NG"]; + // } + + // double okRate = total > 0 ? Math.Round(ok * 100.0 / total, 2) : 0; + // double ngRate = total > 0 ? Math.Round(ng * 100.0 / total, 2) : 0; + + // return new Dictionary + // { + // { "Total", total }, + // { "OK", ok }, + // { "NG", ng }, + // { "OKRate", okRate }, + // { "NGRate", ngRate } + // }; + // } + //} +} \ No newline at end of file diff --git a/SLC1-N/Program.cs b/SLC1-N/Program.cs new file mode 100644 index 0000000..749d37f --- /dev/null +++ b/SLC1-N/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Windows.Forms; + +namespace SLC1_N +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/SLC1-N/Properties/AssemblyInfo.cs b/SLC1-N/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..50da1b0 --- /dev/null +++ b/SLC1-N/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("SLC1-N")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SLC1-N")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("f7f71589-095a-45c2-975c-739be2d1ce15")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/SLC1-N/Properties/Resources.Designer.cs b/SLC1-N/Properties/Resources.Designer.cs new file mode 100644 index 0000000..d72c49f --- /dev/null +++ b/SLC1-N/Properties/Resources.Designer.cs @@ -0,0 +1,243 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace SLC1_N.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SLC1_N.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _1 { + get { + object obj = ResourceManager.GetObject("1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _10 { + get { + object obj = ResourceManager.GetObject("10", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _11 { + get { + object obj = ResourceManager.GetObject("11", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _12 { + get { + object obj = ResourceManager.GetObject("12", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _13 { + get { + object obj = ResourceManager.GetObject("13", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _131 { + get { + object obj = ResourceManager.GetObject("131", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _15 { + get { + object obj = ResourceManager.GetObject("15", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _151 { + get { + object obj = ResourceManager.GetObject("151", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _16 { + get { + object obj = ResourceManager.GetObject("16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _2 { + get { + object obj = ResourceManager.GetObject("2", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _3 { + get { + object obj = ResourceManager.GetObject("3", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _4 { + get { + object obj = ResourceManager.GetObject("4", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _5 { + get { + object obj = ResourceManager.GetObject("5", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _6 { + get { + object obj = ResourceManager.GetObject("6", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _7 { + get { + object obj = ResourceManager.GetObject("7", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _8 { + get { + object obj = ResourceManager.GetObject("8", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap _9 { + get { + object obj = ResourceManager.GetObject("9", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap 微信图片_20200407085137 { + get { + object obj = ResourceManager.GetObject("微信图片_20200407085137", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/SLC1-N/Properties/Resources.resx b/SLC1-N/Properties/Resources.resx new file mode 100644 index 0000000..b07b2cd --- /dev/null +++ b/SLC1-N/Properties/Resources.resx @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\5.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\12.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\10.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\8.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\15.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\9.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\7.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\11.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\6.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\4.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\151.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\13.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\131.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\微信图片_20200407085137.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/SLC1-N/Properties/Settings.Designer.cs b/SLC1-N/Properties/Settings.Designer.cs new file mode 100644 index 0000000..e7126e8 --- /dev/null +++ b/SLC1-N/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace SLC1_N.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.6.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/SLC1-N/Properties/Settings.settings b/SLC1-N/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/SLC1-N/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SLC1-N/Resources/1.png b/SLC1-N/Resources/1.png new file mode 100644 index 0000000..68ed1d9 Binary files /dev/null and b/SLC1-N/Resources/1.png differ diff --git a/SLC1-N/Resources/10.jpg b/SLC1-N/Resources/10.jpg new file mode 100644 index 0000000..93c236e Binary files /dev/null and b/SLC1-N/Resources/10.jpg differ diff --git a/SLC1-N/Resources/11.png b/SLC1-N/Resources/11.png new file mode 100644 index 0000000..cf3be33 Binary files /dev/null and b/SLC1-N/Resources/11.png differ diff --git a/SLC1-N/Resources/12.png b/SLC1-N/Resources/12.png new file mode 100644 index 0000000..6e83418 Binary files /dev/null and b/SLC1-N/Resources/12.png differ diff --git a/SLC1-N/Resources/13.png b/SLC1-N/Resources/13.png new file mode 100644 index 0000000..4630072 Binary files /dev/null and b/SLC1-N/Resources/13.png differ diff --git a/SLC1-N/Resources/131.png b/SLC1-N/Resources/131.png new file mode 100644 index 0000000..4630072 Binary files /dev/null and b/SLC1-N/Resources/131.png differ diff --git a/SLC1-N/Resources/15.png b/SLC1-N/Resources/15.png new file mode 100644 index 0000000..846a13d Binary files /dev/null and b/SLC1-N/Resources/15.png differ diff --git a/SLC1-N/Resources/151.png b/SLC1-N/Resources/151.png new file mode 100644 index 0000000..5a9c16a Binary files /dev/null and b/SLC1-N/Resources/151.png differ diff --git a/SLC1-N/Resources/16.png b/SLC1-N/Resources/16.png new file mode 100644 index 0000000..0dc54bb Binary files /dev/null and b/SLC1-N/Resources/16.png differ diff --git a/SLC1-N/Resources/2.png b/SLC1-N/Resources/2.png new file mode 100644 index 0000000..616ec08 Binary files /dev/null and b/SLC1-N/Resources/2.png differ diff --git a/SLC1-N/Resources/3.png b/SLC1-N/Resources/3.png new file mode 100644 index 0000000..5c8a42a Binary files /dev/null and b/SLC1-N/Resources/3.png differ diff --git a/SLC1-N/Resources/4.png b/SLC1-N/Resources/4.png new file mode 100644 index 0000000..32d66a8 Binary files /dev/null and b/SLC1-N/Resources/4.png differ diff --git a/SLC1-N/Resources/5.jpg b/SLC1-N/Resources/5.jpg new file mode 100644 index 0000000..b0bf5ab Binary files /dev/null and b/SLC1-N/Resources/5.jpg differ diff --git a/SLC1-N/Resources/6.png b/SLC1-N/Resources/6.png new file mode 100644 index 0000000..de043a1 Binary files /dev/null and b/SLC1-N/Resources/6.png differ diff --git a/SLC1-N/Resources/7.jpg b/SLC1-N/Resources/7.jpg new file mode 100644 index 0000000..b581b85 Binary files /dev/null and b/SLC1-N/Resources/7.jpg differ diff --git a/SLC1-N/Resources/8.png b/SLC1-N/Resources/8.png new file mode 100644 index 0000000..d5534fc Binary files /dev/null and b/SLC1-N/Resources/8.png differ diff --git a/SLC1-N/Resources/9.png b/SLC1-N/Resources/9.png new file mode 100644 index 0000000..c680cf7 Binary files /dev/null and b/SLC1-N/Resources/9.png differ diff --git a/SLC1-N/Resources/微信图片_20200407085137.png b/SLC1-N/Resources/微信图片_20200407085137.png new file mode 100644 index 0000000..72a4675 Binary files /dev/null and b/SLC1-N/Resources/微信图片_20200407085137.png differ diff --git a/SLC1-N/SLC1-N.csproj b/SLC1-N/SLC1-N.csproj new file mode 100644 index 0000000..e4431f5 --- /dev/null +++ b/SLC1-N/SLC1-N.csproj @@ -0,0 +1,407 @@ + + + + + Debug + AnyCPU + {F7F71589-095A-45C2-975C-739BE2D1CE15} + WinExe + SLC1_N + LL28-V25111302-c + v4.8 + 512 + true + true + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + 图标一号.ico + + + + False + bin\Debug\ClosedXML.dll + + + False + DLL\DocumentFormat.OpenXml.dll + + + ..\packages\EasyModbusTCP.5.6.0\lib\net40\EasyModbus.dll + + + DLL\Guna.UI.dll + + + DLL\Guna.UI2.dll + + + False + DLL\HslCommunication.dll + + + ..\packages\Microsoft.Office.Interop.Excel.15.0.4795.1001\lib\net20\Microsoft.Office.Interop.Excel.dll + True + + + + ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll + + + False + DLL\Spire.XLS.dll + + + DLL\SunnyUI.dll + + + DLL\SunnyUI.Common.dll + + + + + + + + + + + + + + + + + + + + + + Form + + + Form_Alarm.cs + + + Form + + + Form_hbMESset.cs + + + Form + + + Form_HQMESconfig.cs + + + Form + + + Form_NetworkSet.cs + + + + Form + + + Electricity.cs + + + Form + + + Form1.cs + + + Form + + + Form_PLC_Serialport.cs + + + Form + + + Form_PLCcontrol.cs + + + Form + + + Form_PLC_TCP.cs + + + Form + + + Form_RootSet.cs + + + + + + Form + + + LeakCompensate.cs + + + Form + + + Form_LogOn.cs + + + + + + + Form + + + Form_SaomaSet.cs + + + + + + + Form + + + Form_Save.cs + + + + Form + + + UserManagement.cs + + + Form + + + UserPassword.cs + + + Form + + + Warning.cs + + + + + Form_Alarm.cs + + + Form_hbMESset.cs + + + Form_HQMESconfig.cs + + + Form_NetworkSet.cs + + + Electricity.cs + + + Form1.cs + Designer + + + Form_PLC_Serialport.cs + + + Form_PLCcontrol.cs + + + Form_PLC_TCP.cs + + + Form_RootSet.cs + + + LeakCompensate.cs + + + Form_LogOn.cs + + + Form_SaomaSet.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + Form_Save.cs + + + UserManagement.cs + Designer + + + UserPassword.cs + + + Warning.cs + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {00000600-0000-0010-8000-00AA006D2EA4} + 2 + 8 + 0 + tlbimp + False + True + + + + + + + + {fb7970fd-f699-4093-83d0-509501b7863c} + NetWorkHelper + + + + + False + Microsoft .NET Framework 4.7.2 %28x86 和 x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + + \ No newline at end of file diff --git a/SLC1-N/SaomaClient.cs b/SLC1-N/SaomaClient.cs new file mode 100644 index 0000000..0b7ebd6 --- /dev/null +++ b/SLC1-N/SaomaClient.cs @@ -0,0 +1,192 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using System.Net.Sockets; +using System.Threading; + +namespace SLC1_N +{ + public class SaomaClient : IDisposable // TCP扫码枪客户端类 + { + private TcpClient tcpClient; + private NetworkStream networkStream; + private string ipAddress; + private int port; + public int codeLength; + private readonly Action onDataReceived; + private readonly Action onErrorReceived; + private readonly Action onStatusUpdate; + public bool isRunning { get; set; } + + public bool IsConnected + { + get + { + return tcpClient?.Client != null && + tcpClient.Connected && + networkStream?.CanRead == true; + } + } + + public SaomaClient(string ip, int iport, int icodeLength, + Action ionDataReceived, + Action ionError, + Action ionStatusUpdate) + { + ipAddress = ip; + port = iport; + codeLength = icodeLength; + onDataReceived = ionDataReceived; + onErrorReceived = ionError; + onStatusUpdate = ionStatusUpdate; + } + + public bool Connect() + { + try + { + tcpClient = new TcpClient(); + tcpClient.Connect(ipAddress, port); + networkStream = tcpClient.GetStream(); + isRunning = true; + + // 启动接收线程 + Thread receiveThread = new Thread(ReceiveData); + receiveThread.IsBackground = true; + receiveThread.Start(); + + onStatusUpdate?.Invoke("TCP扫码枪连接成功"); + return true; + } + catch (Exception ex) + { + onStatusUpdate?.Invoke($"连接TCP扫码枪失败: {ex.Message}"); + return false; + } + } + + public bool Reconnect(string newIp, int newPort) + { + // 先断开当前连接 + Disconnect(); + + // 更新IP和端口 + ipAddress = newIp; + port = newPort; + + // 重新连接 + return Connect(); + } + + public void Disconnect() + { + isRunning = false; + networkStream?.Close(); + tcpClient?.Close(); + onStatusUpdate?.Invoke("TCP扫码枪已断开"); + } + + public void SendStartCommand() + { + try + { + if (IsConnected) + { + string data = "73 74 61 72 74"; + byte[] byt = StrtoHexbyte(data); + networkStream.Write(byt, 0, byt.Length); + } + else + { + onErrorReceived?.Invoke("发送扫码启动失败: 连接已断开"); + } + } + catch (Exception ex) + { + onErrorReceived?.Invoke($"发送扫码启动失败: {ex.Message}"); + Connect_Error(); + } + } + + private void ReceiveData() + { + byte[] buffer = new byte[1024]; + + while (isRunning) + { + try + { + // 检查真实连接状态 + if (!IsConnected) + { + onStatusUpdate?.Invoke("扫码枪连接已断开,尝试重连..."); + Reconnect(ipAddress, port); // 自动重连 + Thread.Sleep(2000); + continue; + } + + if (networkStream?.DataAvailable == true) + { + int bytesRead = networkStream.Read(buffer, 0, buffer.Length); + if (bytesRead > 0) + { + string code = Encoding.Default.GetString(buffer, 0, bytesRead); + string cleanCode = code.Replace("\r\n", "").Trim(); + //Console.WriteLine("扫码枪1网口收到:" + cleanCode); + onDataReceived?.Invoke(cleanCode); + + if (cleanCode.Length == codeLength) + { + // 相当于原来的 CH1Code.Text = CODE; + // Slot_PLC_WriteCoil(502, true); + //onStatusUpdate?.Invoke("扫码完成"); + } + else + { + onStatusUpdate?.Invoke($"当前条形码长度为{cleanCode.Length},所设置的条码长度为{codeLength}"); + } + } + } + Thread.Sleep(50); // 稍微延迟以减少CPU占用 + } + catch (Exception ex) + { + onErrorReceived?.Invoke($"扫码枪接收数据异常: {ex.Message} 行号{ex.StackTrace}"); + Console.WriteLine($"扫码枪接收数据异常: {ex.Message} 行号{ex.StackTrace}"); + Connect_Error(); + Thread.Sleep(1000); + } + } + } + + // l连接异常 + private void Connect_Error() + { + isRunning = false; + networkStream?.Close(); + tcpClient?.Close(); + onStatusUpdate?.Invoke("扫码枪连接异常,已断开"); + } + + private byte[] StrtoHexbyte(string hexString) + { + hexString = hexString.Replace(" ", ""); + byte[] returnBytes = new byte[hexString.Length / 2]; + for (int i = 0; i < returnBytes.Length; i++) + { + returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); + } + return returnBytes; + } + + public void Dispose() + { + Disconnect(); + tcpClient?.Dispose(); + networkStream?.Dispose(); + } + } +} \ No newline at end of file diff --git a/SLC1-N/UDPBroadcast.cs b/SLC1-N/UDPBroadcast.cs new file mode 100644 index 0000000..2d8b2c7 --- /dev/null +++ b/SLC1-N/UDPBroadcast.cs @@ -0,0 +1,83 @@ +using System; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading; + +namespace SLC1_N +{ + class UDPBroadcast + { + //UDP广播获取仪器IP地址 + private static Socket sock; + private static IPEndPoint iep1; + private static byte[] data; + Thread UDPlisten; + + public string[] ch_ipaddress; + /// + /// UDP广播获取仪器IP地址 + /// + public void UDP_Broadcast() + { + ch_ipaddress = new string[3]; + string PrefixIP = new GetIP().GetLocalIP(); + int IP_index = PrefixIP.LastIndexOf("."); + PrefixIP = PrefixIP.Remove(IP_index + 1); + PrefixIP += "255"; + + sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); + //255.255.255.255 + //iep1 = new IPEndPoint(IPAddress.Broadcast, 9999); + IPAddress ip; + ip = IPAddress.Parse(PrefixIP); + iep1 = new IPEndPoint(ip, 9999); + + string hostname = Dns.GetHostName(); + data = Encoding.ASCII.GetBytes("hello,udp server"); + + sock.SetSocketOption(SocketOptionLevel.Socket, + SocketOptionName.Broadcast, 1); + + UDPlisten = new Thread(UDP_Listening); + UDPlisten.Start(); + sock.SendTo(data, iep1); + + } + public void UDP_Listening() + { + while (true) + { + byte[] data = new byte[1024]; + int recv = sock.Receive(data); + string RecvData = Encoding.ASCII.GetString(data, 0, recv); + string[] IPData = RecvData.Split('\n'); + int ip_num = IPData.Length; + if (ip_num > 0) + { + int i; + for (i = 0; i < ip_num; i++) + { + string[] ipaddress = IPData[i].Split(':'); + int ch_station = Convert.ToInt32(ipaddress[0]); + switch (ch_station) + { + case 1: + ch_ipaddress[0] = ipaddress[1]; + break; + case 2: + ch_ipaddress[1] = ipaddress[1]; + break; + case 3: + ch_ipaddress[2] = ipaddress[1]; + break; + case 4: + ch_ipaddress[3] = ipaddress[1]; + break; + } + } + } + } + } + } +} diff --git a/SLC1-N/UserManagement.Designer.cs b/SLC1-N/UserManagement.Designer.cs new file mode 100644 index 0000000..1101fbd --- /dev/null +++ b/SLC1-N/UserManagement.Designer.cs @@ -0,0 +1,133 @@ +namespace SLC1_N +{ + partial class UserManagement + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UserManagement)); + this.label3 = new System.Windows.Forms.Label(); + this.Characters = new System.Windows.Forms.ComboBox(); + this.Account = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.Add = new System.Windows.Forms.Button(); + this.Delete = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("宋体", 13F); + this.label3.Location = new System.Drawing.Point(136, 85); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(44, 18); + this.label3.TabIndex = 62; + this.label3.Text = "权限"; + // + // Characters + // + this.Characters.Font = new System.Drawing.Font("宋体", 15F); + this.Characters.FormattingEnabled = true; + this.Characters.Items.AddRange(new object[] { + "工程师"}); + this.Characters.Location = new System.Drawing.Point(60, 106); + this.Characters.Name = "Characters"; + this.Characters.Size = new System.Drawing.Size(196, 28); + this.Characters.TabIndex = 61; + this.Characters.TabStop = false; + this.Characters.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Characters_KeyDown); + // + // Account + // + this.Account.Font = new System.Drawing.Font("宋体", 15F); + this.Account.FormattingEnabled = true; + this.Account.Location = new System.Drawing.Point(60, 40); + this.Account.Name = "Account"; + this.Account.Size = new System.Drawing.Size(196, 28); + this.Account.TabIndex = 58; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("宋体", 13F); + this.label2.Location = new System.Drawing.Point(91, 14); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(134, 18); + this.label2.TabIndex = 57; + this.label2.Text = "请选择账户名称"; + // + // Add + // + this.Add.Font = new System.Drawing.Font("宋体", 12F); + this.Add.Location = new System.Drawing.Point(104, 222); + this.Add.Name = "Add"; + this.Add.Size = new System.Drawing.Size(108, 49); + this.Add.TabIndex = 56; + this.Add.Text = "新建"; + this.Add.UseVisualStyleBackColor = true; + this.Add.Click += new System.EventHandler(this.Add_Click); + // + // Delete + // + this.Delete.Font = new System.Drawing.Font("宋体", 12F); + this.Delete.Location = new System.Drawing.Point(104, 167); + this.Delete.Name = "Delete"; + this.Delete.Size = new System.Drawing.Size(108, 49); + this.Delete.TabIndex = 55; + this.Delete.Text = "删除"; + this.Delete.UseVisualStyleBackColor = true; + this.Delete.Click += new System.EventHandler(this.Delete_Click); + // + // UserManagement + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(317, 290); + this.Controls.Add(this.label3); + this.Controls.Add(this.Characters); + this.Controls.Add(this.Account); + this.Controls.Add(this.label2); + this.Controls.Add(this.Add); + this.Controls.Add(this.Delete); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "UserManagement"; + this.Text = "用户管理"; + this.Load += new System.EventHandler(this.UserManagement_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ComboBox Characters; + private System.Windows.Forms.ComboBox Account; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button Add; + private System.Windows.Forms.Button Delete; + } +} \ No newline at end of file diff --git a/SLC1-N/UserManagement.cs b/SLC1-N/UserManagement.cs new file mode 100644 index 0000000..858011b --- /dev/null +++ b/SLC1-N/UserManagement.cs @@ -0,0 +1,296 @@ +using ADOX; +using System; +using System.Data.OleDb; +using System.IO; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class UserManagement : Form + { + public UserManagement() + { + InitializeComponent(); + } + + private void UserManagement_Load(object sender, EventArgs e) + { + try + { + Characters.SelectedIndex = 0; + string filepath = System.Environment.CurrentDirectory + "\\Config\\Users\\UsersInfo.mdb"; + + if (File.Exists(filepath) == true)//判断所选路径是否有文件 + { + + string constr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + System.Environment.CurrentDirectory + "\\Config\\Users\\UsersInfo.mdb;"; + OleDbConnection con = new OleDbConnection(constr); + con.Open(); + + string sql2 = "SELECT * FROM UserInfo"; + + OleDbCommand cmd2 = new OleDbCommand(sql2, con); + OleDbDataReader userinformation = cmd2.ExecuteReader(); + + //下移游标,读取一行,如果没有数据了则返回false + + while (userinformation.Read()) + { + Account.Items.Add(Convert.ToString(userinformation["账户"])); + } + + + userinformation.Close(); + con.Close(); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + + //private void Update_Click(object sender, EventArgs e) + //{ + // if (Password.TextLength > 0) + // { + // if (Characters.Text == "操作员" || Characters.Text == "技术员") + // { + // try + // { + // string filepath = System.Environment.CurrentDirectory + "\\Config\\Users\\UsersInfo.mdb"; + + // if (File.Exists(filepath) == false)//判断所选路径是否有文件 + // { + + // MessageBox.Show("请先新建用户!"); + + // } + // else + // { + // string constr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + System.Environment.CurrentDirectory + "\\Config\\Users\\UsersInfo.mdb;"; + // OleDbConnection con = new OleDbConnection(constr); + // con.Open(); + + // string sql2 = " UPDATE UserInfo SET 密码='" + Password.Text + "' where 账户='" + Account.Text + "'"; + + // OleDbCommand cmd2 = new OleDbCommand(sql2, con); + + // cmd2.ExecuteNonQuery(); + + + // string sql3 = " UPDATE UserInfo SET 权限='" + Characters.Text + "' WHERE 账户='" + Account.Text + "'"; + + // OleDbCommand cmd3 = new OleDbCommand(sql3, con); + + // cmd3.ExecuteNonQuery(); + + + // con.Close(); + + + // MessageBox.Show("修改成功!"); + + // } + + + + // } + // catch (Exception ex) + // { + // MessageBox.Show(ex.Message); + // } + // } + // else + // { + // MessageBox.Show("权限输入非法!"); + // } + + // } + // else + // { + // MessageBox.Show("密码输入非法!"); + // } + //} + + private void Add_Click(object sender, EventArgs e) + { + //if (Password.TextLength > 0) + //{ + //if (Characters.Text == "操作员" || Characters.Text == "技术员") + if (Characters.Text == "技术员") + { + + Boolean add = true; + + //遍历账户,查看是否有重复的账号 + foreach (string oldaccount in Account.Items) + { + if (Account.Text == oldaccount) + { + MessageBox.Show("账户名称已存在!"); + add = false; + } + + } + if (add is true) + { + try + { + string filepath = System.Environment.CurrentDirectory + "\\Config\\Users\\UsersInfo.mdb"; + + + string constr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + System.Environment.CurrentDirectory + "\\Config\\Users\\UsersInfo.mdb;"; + OleDbConnection con = new OleDbConnection(constr); + + + if (File.Exists(filepath) == false)//判断所选路径是否有文件 + { + + string filepath2 = System.Environment.CurrentDirectory + "\\Config\\Users\\"; + Directory.CreateDirectory(filepath2);//新建文件夹 + + Catalog Product = new Catalog(); + Product.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Environment.CurrentDirectory + "\\Config\\Users\\UsersInfo.mdb;Jet OLEDB:Engine Type=5;"); + + con.Open(); + + //string sql = "CREATE TABLE UserInfo ([账户] VarChar(50),[密码] VarChar(50),[权限] VarChar(50))"; + string sql = "CREATE TABLE UserInfo ([账户] VarChar(50))"; + OleDbCommand cmd = new OleDbCommand(sql, con); + + cmd.ExecuteNonQuery(); + + con.Close(); + + } + + con.Open(); + + //string sql2 = " INSERT INTO UserInfo(账户, 密码, 权限) VALUES('" + Account.Text + "', '" + Password.Text + "', '" + Characters.Text + "')"; + string sql2 = " INSERT INTO UserInfo(账户) VALUES('" + Account.Text + "')"; + OleDbCommand cmd2 = new OleDbCommand(sql2, con); + + cmd2.ExecuteNonQuery(); + + con.Close(); + + + Account.Items.Add(Account.Text); + + MessageBox.Show("新建用户成功!"); + + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + + + } + } + else + { + MessageBox.Show("权限输入非法!"); + } + + //} + //else + //{ + // MessageBox.Show("密码输入非法!"); + //} + } + + private void Delete_Click(object sender, EventArgs e) + { + try + { + if (Account.Text.Length > 0) + { + DialogResult delete = MessageBox.Show("确认删除此用户", "删除用户", MessageBoxButtons.OKCancel); + + if (delete == DialogResult.OK) + { + string filepath = System.Environment.CurrentDirectory + "\\Config\\Users\\UsersInfo.mdb"; + + if (File.Exists(filepath) == false)//判断所选路径是否有文件 + { + + MessageBox.Show("请先新建用户!"); + + } + else + { + string constr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + System.Environment.CurrentDirectory + "\\Config\\Users\\UsersInfo.mdb;"; + OleDbConnection con = new OleDbConnection(constr); + con.Open(); + + string sql2 = "DELETE FROM UserInfo WHERE 账户='" + Account.Text + "'"; + + OleDbCommand cmd2 = new OleDbCommand(sql2, con); + + cmd2.ExecuteNonQuery(); + + + con.Close(); + + Account.Items.Remove(Account.Text); + Account.Text = ""; + //Password.Text = ""; + Characters.SelectedIndex = 0; + + MessageBox.Show("删除用户成功!"); + } + + } + } + else + { + MessageBox.Show("请选择需要被删除的账户!"); + } + + + + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + + } + + + private void Characters_KeyDown(object sender, KeyEventArgs e) + { + e.Handled = true; + } + + //private void UpdateReset_Click(object sender, EventArgs e) + //{ + // UserPassword u1 = new UserPassword(); + // OpenForm(u1); + //} + + ////防止打开多个相同的窗口 + //public void OpenForm(System.Windows.Forms.Form frm) + //{ + // if (frm == null) return; + // foreach (System.Windows.Forms.Form f in System.Windows.Forms.Application.OpenForms) + // { + // if (f.Name == frm.Name) + // { + // f.Activate(); + // f.Show(); + // frm.Dispose(); + // System.GC.Collect(); + // System.GC.WaitForPendingFinalizers(); + // return; + // } + // } + // frm.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + // frm.Show(); + // System.GC.Collect(); + // System.GC.WaitForPendingFinalizers(); + //} + } +} diff --git a/SLC1-N/UserManagement.resx b/SLC1-N/UserManagement.resx new file mode 100644 index 0000000..8951e3d --- /dev/null +++ b/SLC1-N/UserManagement.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAACq + qnqHeoqqgAAAAAAAAAAAAAAAAAAACqiAAAAAAAAAeqgAAAAAAAAAAAAAAAAKqAAAAAAAAAAAAAqoAAAA + AAAAAAAAAAegAAAAAAAAAAAAAAAIoAAAAAAAAAAAAKcAAAAAAAAAAAAAAAAACqAAAAAAAAAACgAIenqq + qqqqqqqqqqAAAIoAAAAAAAAAoAAAAKqqqqqqqqqqqqgAAAigAAAAAAAKAAAAiqqqqqqqqqqqqqoAAACK + AAAAAAB3AAAAeHiqqqqqqqqqqqoAAAAKAAAAAACgAAAAAAqqqqqqqqqqqqoAAAAAoAAAAAqAAAAAAKqq + qqqqoAAAAAAAAAAAgAAAAAoAAAAAAAAIqqqqpwAAAAAAAAAACgAAAAoAAAAAAAAKqqqqqgAAAAAAAAAA + CgAAAAgAAAAAAAiqqqqqqqAAAAAAAAAABwAAAAoAAAAAAAAACKqqqqAAAAAAAAAACgAAAAgAAAAAAAAA + qqqqqqgAAAAAAAAACgAAAAoAAAAAAAAKqqqqqqoAAAAAAAAACgAAAAoAAAAAAAAAAAqqqqpwAAAAAAAA + CgAAAAoAAAAAAAAAAKqqqqqgAAAAAAAAiAAAAACAAAAAAAAAB6iqqqqoAAAAAAAAoAAAAACgAAAAAAAA + AACKqqqqAAAAAAAIoAAAAAAKAAAAAAAAAAqqqqqqgAAAAAAKAAAAAAAAoAAAAAAAAIqKiqqqoAAAAACg + AAAAAAAAigAAAAAAAAAAqqqqqAAAAAoAAAAAAAAACKAAAAAAAAAKqqqqqgAAAKAAAAAAAAAAAAqAAAAA + AAAAAAAAAAAAqgAAAAAAAAAAAACqgAAAAAAAAAAAAAB6gAAAAAAAAAAAAAAAeqAAAAAAAAAAAKqAAAAA + AAAAAAAAAAAAAAenoAAAAAB6qAAAAAAAAAAAAAAAAAAAAAAAinqqqqhwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////P///AAD//8AAf/8AAP/+H/8P/wAA//j//+P/ + AAD/5///+f8AAP/P///+fwAA/7gAAB8/AAD/fwAAD58AAP78AAAPzwAA/PwAAA/vAAD9/4AAD/cAAPn/ + AB//9wAA+//gD//7AAD7/+AP//sAAPv/gAf/+wAA+//4B//7AAD7//AD//sAAPv/4AP/+wAA+//+Af/7 + AAD7//wB//MAAP3/+AD/9wAA/f//AP/nAAD+//4Af+8AAP9//AB/3wAA/z//wD+/AAD/n/+AP38AAP/n + ///8/wAA//H///H/AAD//H//x/8AAP//h/w//wAA///wAf//AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAACKqAAAenAAAAAAAAAAAACoAAAAAAAAegAAAAAAAAB3AAAAAAAAAACKAAAAAA + AKAAqqqqqqqqoAAIAAAAAAoAAIqqqqqqqqoAAKAAAACAAAinqqqqqqqqAAAIAAAAoAAACqqqqqeqigAA + CgAACAAAAAiKqqoAAAAAAAAAAAoAAAAAqqqqoAAAAAAAgAAKAAAAAACqqqAAAAAAAKAACAAAAAAIqqqq + AAAAAABwAAoAAAAAAAqqqgAAAAAAcAAAAAAAAACqqqqgAAAAAAAAAHAAAAAAAKqqoAAAAAoAAAAIAAAA + AAqqqqgAAACAAAAACgAAAAAACKqqAAAIAAAAAACHAAAAAKqqqqAAoAAAAAAAAKAAAAAAAAAACAAAAAAA + AAAAdwAAAAAAigAAAAAAAAAAAAAHqKeooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////+Hj//+f/n/+f/+f/cAB7/vAAPf3gAD79+AA++/g + P//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/Ad//f/+//8/8///4B/////////////// + //////////////////8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqoAAAAAAKqoAAAAAAAAiqoA + AAAAAAAKqgAAAAAAAAiqgAAAAAAAAHqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAP//AAD//wAA//8AAP//AAD4DwAA/D8AAPw/AAD+PwAA/h8AAP8fAAD//wAA//8AAP// + AAD//wAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAAP4AAAX+ + BQAJ/wkADf4NABH/EQAW/hYAGf8ZAB3+HQAh/iEAJv4mACr+KgAt/i0AMf4xADX+NQA5/jkAPf49AEH+ + QQBF/kUAS/9LAE3+TQBR/lEAVf5VAFn+WQBe/14AYf5hAGX+ZQBp/mkAbv9uAHD/cAB1/nUAef55AH7+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFggIDhMXFxsXFxIOBgobAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFgwSIAAAAAAAAAAAAAAAAAAdEQwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMHQAA + AAAAAAAAAAAAAAAAAAAAAAAbDBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAbCAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAB0IAAAAAAAAAAAAAAAAAAAAAAAAAAwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREA + AAAAAAAAAAAAAAAAAAAACgAAACAbFgwBAQEBAQEBAQEBAQEBAQEBAQEAAAAAABsOAAAAAAAAAAAAAAAA + AAAKAAAAAAAAAAwBAQEBAQEBAQEBAQEBAQEBAQEbAAAAAAAgDgAAAAAAAAAAAAAAAA4AAAAAAAAdBAEB + AQEBAQEBAQEBAQEBAQEBAQEOAAAAAAAAGxIAAAAAAAAAAAAAGxYAAAAAAAAgICAgCgEBAQEBAQEBAQEB + AQEBAQEBAAAAAAAAAA4AAAAAAAAAAAAADAAAAAAAAAAAAAAWAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAA + AAAKAAAAAAAAAAAWHQAAAAAAAAAAAAwBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAK + AAAAAAAAAAAAAAAAACAGAQEBAQEBFgAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAOAAAAAAAAAAAAAAAA + AAgBAQEBAQEBBAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAATAAAAAAAAAAAAAAAXAQEBAQEBAQEBARYA + AAAAAAAAAAAAAAAAAAAADAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAFwEBAQEBAQYAAAAAAAAAAAAAAAAA + AAAADAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAWAQEBAQEBAQEXAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAS + AAAAAAAAAAAAAAAAAAoBBAQBAQEBAQEEAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAA + AAAAAAAOAQEBAQEBGwAAAAAAAAAAAAAAAAAAEQAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAYBAQEBAQEB + BAAAAAAAAAAAAAAAAAAbFwAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAEQwODAQBAQEBAR0AAAAAAAAAAAAA + AAAKAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAIAQBAQEBAQgAAAAAAAAAAAAAAB0WAAAAAAAAAAAA + AAoAAAAAAAAAAAAAAAAAAAARAQEBAQEBAQEdAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAMAAAAAAAAAAAA + AAAAABsbFxsRAQEBAQEKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAbEQAAAAAAAAAAAAAAAAAAAAAMAQEB + AQEBIAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAGw4AAAAAAAAAAAAAAAAAAAYBAQEBAQEBCAAAAAAAAAoA + AAAAAAAAAAAAAAAAAAAAAAAIGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCgAAAAAAAAAAAAAAAAAA + AAAAAAAAFwgdAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXDBMA + AAAAAAAAAAAAAAAAAAAAABIMGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODhIXAAAAAAAAAAAA + FxEMEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEw4IBAQECA4WIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///z///wAA///AAH//AAD//h//D/8AAP/4///j/wAA/+f///n/ + AAD/z////n8AAP+4AAAfPwAA/38AAA+fAAD+/AAAD88AAPz8AAAP7wAA/f+AAA/3AAD5/wAf//cAAPv/ + 4A//+wAA+//gD//7AAD7/4AH//sAAPv/+Af/+wAA+//wA//7AAD7/+AD//sAAPv//gH/+wAA+//8Af/z + AAD9//gA//cAAP3//wD/5wAA/v/+AH/vAAD/f/wAf98AAP8//8A/vwAA/5//gD9/AAD/5////P8AAP/x + ///x/wAA//x//8f/AAD//4f8P/8AAP//8AH//wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA/gAABf4FAAn+CQAP/g8AHv4eACv+KwAs/ywAM/8zADT/ + NAA+/j4AQv5CAEX+RQBJ/kkATP5MAFD+UABV/lUAWf9ZAF7+XgBh/mEAZf5lAGj+aABt/m0Acv5yAHX+ + dQB5/nkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkODhcAAAAAFg4O + AAAAAAAAAAAAAAAAAAAAAAAAAA8WAAAAAAAAAAAAAAAAExEAAAAAAAAAAAAAAAAAABMWAAAAAAAAAAAA + AAAAAAAAABEXAAAAAAAAAAAAAAANAAAADQQEAgQCBAIEAgQCBAAAAAAPAAAAAAAAAAAADQAAAAARAgIC + AgICAgICAgICCgAAAAAPAAAAAAAAABMAAAAAGREPBAICAgICAgICAgICAAAAAAAZAAAAAAAAFgAAAAAA + ABECAgICAgIGBwgICAgAAAAAAA8AAAAAABMAAAAAAAAAFxYFAgICAgAAAAAAAAAAAAAAAAAAAAAADgAA + AAAAAAAADwICAgICBwAAAAAAAAAAAAAADwAAAAANAAAAAAAAAAAAAAcCAgICAAAAAAAAAAAAAAANAAAA + AA0AAAAAAAAAAAAOAgICAgIHAAAAAAAAAAAAAA0AAAAADgAAAAAAAAAAAAAACgICAgIAAAAAAAAAAAAA + EwAAAAAAAAAAAAAAAAAAAA0CAgICAggAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAgICAgAAAAAA + AAAADQAAAAAAAAAXAAAAAAAAAAAADQICAgICCgAAAAAAABEAAAAAAAAAABcAAAAAAAAAAAAAABMCAgIC + AAAAAAAXAAAAAAAAAAAAABkTAAAAAAAAAAAOBAICAgQOAAAADwAAAAAAAAAAAAAAAAAOAAAAAAAAAAAA + AAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAADhMAAAAAAAAAAAAAEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAT + Dg0KCg0OEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////+Hj//+f + /n/+f/+f/cAB7/vAAPf3gAD79+AA++/gP//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/ + Ad//f/+//8/8///4B/////////////////////////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAB + AAAAAAAAAAAAAAABAAAAAQAAAAAAAAD+AAAE/wQAC/4LAAz/DAAR/hEAFf8VACP/IwA6/zoAQ/5DAFL/ + UgBb/1sAb/5vAHb+dgB5/3kAfv9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgICAgIFAAAAAAAA + AAAAAAcCAg4AAAAAAAAAAAAAAAALAwIMAAAAAAAAAAAAAAAAAAgCAwAAAAAAAAAAAAAAAAANBQIOAAAA + AAAAAAAAAAAAAAoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAPgP + AAD8PwAA/D8AAP4/AAD+HwAA/x8AAP//AAD//wAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/AEUA/wBjAP8AdgD+AIMA/wCGAP8AfAD/AHIA/wBeAP8AQAD+ + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/AAIA/wAnAP4AZgD/AKkA/wDiAP8A5QD/AMkA/wC0AP8ApQD+AJ4A/wCZAP8AnwD/ + AKgA/wC4AP8AzAD+AOkA/wDaAP8AmwD/AFwA/wAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAQAP8ATgD/AKwA/wDRAP4AuwD/AIAA/wBCAP8AIgD/ABUA/wAMAP8ABQD+ + AAIAAAAAAP8AAwD/AAYA/wANAP8AFwD+ACQA/wBMAP8AjQD/AMAA/wDTAP8AnAD+AD8A/wAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ACAD+AEQA/gC5AP4A0QD+AIcA/gA3AP4ACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABEA/gA+AP4AmwD+ + ANQA/gCmAP4AOAD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAZAP4AlgD/AOcA/wB2AP8AGQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+ACcA/wCQAP8A5gD/AH4A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD8A/wDTAP4AqwD/ACEA/wAGAP8AMAD/ + AF8A/wByAP4AcgD/AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+ + AHIA/wByAP8AcgD/AHIA/wByAP8ACwAAAAAAAAAAAP8AMQD/AMYA/wDBAP8AKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wACAP8ATAD/ANsA/wB3AP4AHwD/ + AEsA/wCHAP8AnAD/AKoA/wDSAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8ATAAAAAAAAAAAAAAAAAD/ABMA/wCYAP8AywD+ + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wA/AP8A3AD/ + AGMA/wAGAAAAAAAAAAAAAAAAAP8ACAD/AFQA/wDVAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AlAD+AAMAAAAAAAAAAAAA + AAAA/wAMAP8AhgD+AMwA/wAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ACIA/wDKAP8AfAD/AAIAAAAAAAAAAAAAAAAA/wARAP8AjgD/APIA/wD/AP4A/gD/AP8A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AzgD+ + ABQAAAAAAAAAAAAAAAAAAAAAAP8ADAD+AJkA/wC8AP8ACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD+AJ8A/gCpAP4AAwAAAAAAAAAAAAAAAAAAAAAA/gBPAP4AgAD+AIAA/gCAAP4AhAD+ + AN0A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4A+wD+ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABAA/gDJAP4AdQD+AAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ASAD/ANEA/wAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAiAP4AqwD/APkA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBCAP8A3AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AqAD/AI4A/wACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABgD/AFAA/wDRAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AHQA/wAyAP8AMgD+ADIA/wAyAP8AMgD/ADIA/wAyAP8AMgD+AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP8AuAD/AHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAWAP4A3wD/ADsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AEQA/wBTAP4AUwD/AFYA/wCDAP8A7gD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AK0A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AYAD/AL4A/wANAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBIAP4AxwD/ + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAQD/AGIA/wDkAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/APIA/wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ALwD/AMwA/wAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wBoAP4AsAD/AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAcAP4ApgD/ + APoA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wCuAP8ABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADgD/ANAA/wBDAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wB1AP4AqAD/AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAKAP4AJQD/ACYA/wAmAP8ANwD/AKEA/wD9AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wDsAP8AQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAgD/ + ANIA/wBMAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBvAP4AqwD+AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAEA/gAtAP4ArgD+APoA/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4ApQD+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABwD+ANEA/gBIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBYAP4AuwD/ABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AFMA/wDXAP8A+QD/APkA/wD5AP8A/QD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A8QD+AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AHgD/AM0A/wA4AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wApAP4A2AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wA8AP8AzQD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/gD+AJ0A/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ARwD/AMYA/wAaAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP4AzAD/AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ADQD/AHMA/wDuAP8A/gD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+APMA/wAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AkAD/AKAA/wACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AbwD/AL8A/wASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAMAP8AdgD/AMUA/wDLAP8AywD+ANIA/wD3AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wCPAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAbAP8A3wD/ + AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AGwD/AMgA/wBrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AIQA/wDxAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wDkAP8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAUA/wCOAP8ArgD/AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AFEA/gDeAP4AMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAzAP4AwwD+ + AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4AigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+AE4A/gDoAP4AKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AAYA/wB9AP8A1AD/ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ABsA/wCPAP8AngD+AJ4A/wCfAP8AvgD/APsA/wD/AP8A/wD+AP4A/wD/AP8A3wD/ACkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AQgD+ANgA/wBdAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAOAP8AmAD/AMMA/wAyAP4AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAUA/wBHAP8A1QD/AP0A/wD/AP8A/wD+AP4A/wD/AP8A/QD/ + AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wBMAP8AzgD+AHwA/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADQD/AJYA/wDNAP4AUgD/AAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AH4A/wDtAP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AN8A/wAcAAAAAAAAAAAAAAAAAP8ACwD/AGoA/wDYAP8AdQD+AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAQA/wBqAP4A4QD/ + AJwA/wAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ANQD+AHAA/wBxAP8AcQD/ + AHEA/wBxAP8AcQD+AHEA/wBxAP8AcQD/AG4A/wAmAAAAAAAAAAAA/wAqAP8ArAD/AN0A/wBMAP8AAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4AJAD/AKEA/wDnAP8AhwD/AC0A/wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wABAP8APQD+AJ4A/wDjAP8AkgD/ + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAgA/gBCAP4AqQD+ANMA/gCzAP4AXQD+AC0A/gANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gASAP4ANAD+AGsA/gC+AP4A0QD+ + AJcA/gA0AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/ADUA/wB7AP4AyAD/ + AMwA/wC/AP8AoAD/AHQA/wBVAP8APgD+ADMA/wArAP8ANAD/AEEA/wBaAP8AegD+AKcA/wDCAP8AzwD/ + AL4A/wBwAP8AKQD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD/AC8A/wBbAP8AhwD/AK8A/wDPAP8A5AD+APEA/wD1AP8A8AD/AOAA/wDJAP8AqgD+ + AIAA/wBTAP8AJQD/AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//+AB//8AAP/+AAAf/wAA//gAQAP/AAD/4D//gP8AAP/B///wfwAA/4AAAAw/AAD+AAAADh8AAPwc + AAAHDwAA/DgAAAeHAAD4eAAAB8MAAPj/AAAH4wAA+PwAAAfjAADx/AAH//EAAPH/gAf/8QAA8f8AA//x + AADx/wAD//EAAPH/wAH/8QAA8f/AAf/xAADx//wA//EAAPH/8AD/8QAA+P/gAH/jAAD4//4Af8MAAPx/ + /AB/xwAA/D/4AD+HAAD+D/8APg8AAP8H/gAcHwAA/4P+ABg/AAD/4H//wP8AAP/wD/4B/wAA//wAAAf/ + AAD//4AAP/8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA8A/gAzAP4ASwD/AFgA/gBVAP4ASQD+ + ADAA/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAEAP4ANwD+AIcA/wCzAP4AtAD+AI8A/gB1AP8AaQD+ + AGoA/gB4AP4AkgD/ALcA/gCvAP4AfwD+AC4A/wACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gADAP8ARAD+AK4A/gCWAP4AQQD/ABMA/gABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AAQD+ABYA/gBKAP4AnwD/AKYA/gA5AP4AAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD/AJsA/wCVAP8AHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AKgD/AKEA/wCMAP8ADAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ACMA/gC5AP4AUQD/AD8A/gB+AP4AuQD+ + APAA/wD2AP4A9gD+APYA/gD2AP8A9gD+APYA/gD2AP4A9gD/APYA/gD2AP4A9gD+AHkAAAAAAP4AAgD+ + AF0A/gCvAP8AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAXAP4AuAD+AC8AAAAAAAAAAAD+ + ABYA/gCfAP4A+gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+AP4A/gD+AP8A/wD+AP4A/gD+AP4AwQD/ + AAUAAAAAAAAAAAD+AEYA/wCvAP4ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD/AJwA/gBHAAAAAAAA + AAAA/wALAP4AhQD+AKoA/gCsAP8A8AD+AP4A/gD+AP4A/gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+ + AP4A/gD1AP8AHQAAAAAAAAAAAAAAAAD/AF0A/gCHAP4AAQAAAAAAAAAAAAAAAAAAAAAA/wBAAP8AlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AGgD/AKgA/wD8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDUAP8AywD/ + AMwA/wDLAP8AywD/AMsA/wBGAAAAAAAAAAAAAAAAAP8AAgD/AK0A/wAnAAAAAAAAAAAAAAAAAAAAAAD+ + AJcA/wA0AAAAAAAAAAAAAAAAAAAAAAD+AAcA/gBmAP4AjAD/AJIA/gDhAP4A/gD+AP4A/wD/AP4A/gD+ + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4ATgD+AHsAAAAAAAAAAAAA + AAAAAAAAAP4AtwD/AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP8ArQD+AP0A/gD+AP4A/gD/ + AP8A/gD+AP4A1AD+AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP4AqwAA + AAAAAAAAAAAAAAAAAAAA/gC9AP8AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD+AFAA/wBuAP4AdgD+ + ANQA/gD+AP8A/wD+AP4A/gD9AP4AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAMA/gC9AAAAAAAAAAAAAAAAAAAAAAD/ALsA/wAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AB4A/wCvAP8A/QD/AP8A/wD/AP8A/wD/AP8A/wDTAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ACAD/ALkAAAAAAAAAAAAAAAAAAAAAAP4ArwD/ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ANwD+AFAA/gBWAP4AwwD/AP8A/gD+AP4A/gD+AP0A/wBXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/gAoAP4AnAAAAAAAAAAAAAAAAAAAAAAA/gB6AP8AVgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AIwD+ALgA/gD9AP8A/wD+AP4A/gD+AP4A/gD/AMgA/gAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AHIA/gBcAAAAAAAAAAAAAAAAAAAAAAD+AB8A/wCzAP4ACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAcAP4AMgD+ADsA/wCrAP4A/gD+AP4A/gD+AP8A/QD+ + AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAQAP4AuwD+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AGUA/wCJAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAkAP8AvQD/AP4A/wD/AP8A/wD/ + AP8A/wD/AP8AwQD/AAUAAAAAAAAAAAAAAAAAAAAAAP8ABgD/AJ8A/wBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABQD+AIsA/gB2AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAkA/gAUAP8AIAD+ + AJcA/gD8AP4A/gD/AP8A/gD6AP4ARwAAAAAAAAAAAAAAAAD+AAkA/gCMAP8AdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ABQD+AIQA/gCaAP8AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + ACAA/wC0AP4A9QD+APUA/gD1AP8A9gD+APUA/gCyAAAAAAAAAAAA/gAeAP4AqgD+AG8A/wADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AEkA/wC5AP4AbgD+ABQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAbAP8AfQD+ALUA/gA3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAwA/wBkAP8AswD/ + AJgA/wBVAP8AJQD/ABEA/wAGAP8AAQD/AAIA/wAIAP8AEwD/ACgA/wBeAP8AngD/AK8A/wBVAP8ACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/gAFAP4AMAD/AHAA/gCgAP4AsAD+ALoA/wDAAP4AwAD+ALkA/gCvAP8AnAD+AGcA/gArAP4AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////+Af//4AAf/4D8B/8P/8P+AAAh/GA + AGPjAABx58AAceeAH/nn4A/558AP+efwB/nn8Af55/gD+eP4A/Hx/AHj8PwBx/h+AYf+H/4f/wAAP//A + AP////////////////////////////////8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/ACsA/wAeAP8AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD4A/gBlAP8AXgD+AEEA/wA1AP4AQgD/ + AF8A/gBmAP8AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/AG4A/wBcAP8AagD/AHsA/wB7AP8AewD/ + AHsA/wB7AP8AWwD/ADMA/wBpAP8ABgAAAAAAAAAAAAAAAAD/AGwA/gAMAP8AKQD+ALwA/wD7AP4A/gD/ + AP8A/gD+AP8A/wD+AO0A/wAIAP4AEQD/AGcAAAAAAAAAAAD/ADYA/wAzAAAAAAD/AAEA/wBtAP8A3AD/ + AP8A/wD/AP8AgQD/AGYA/wBlAP8AEQAAAAAA/wA/AP8AKAAAAAAA/gBdAP8ABAAAAAAAAAAAAP4AGwD/ + AKQA/gD0AP8A/wD+AJAAAAAAAAAAAAAAAAAAAAAAAP8ABwD+AFoAAAAAAP8AWgD/AAYAAAAAAAAAAAAA + AAAA/wBVAP8AxQD/AP8A/wDzAP8AFwAAAAAAAAAAAAAAAAD/AAwA/wBVAAAAAAD+ACYA/wBFAAAAAAAA + AAAAAAAAAP8ADwD+AIkA/wDqAP4A/gD/AIYAAAAAAAAAAAAAAAAA/wBPAP4AGwAAAAAAAAAAAP8AXwD/ + AB8AAAAAAAAAAAAAAAAA/wBAAP8ArQD/AP4A/wDuAP8AEwAAAAAA/wAnAP8AWAAAAAAAAAAAAAAAAAD/ + AAEA/gBaAP8ATwD+AAUAAAAAAP4ACAD/AGoA/gB6AP8AegD+ADMA/wBUAP4AVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/ABwA/wBgAP8AYgD/AGEA/wBhAP8AYQD/AGIA/wBfAP8AFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA/B8AAPAHAADAAQAAwAEAAJAEAACYPAAAnBwAAJwcAADOCQAAwgMAAPAH + AAD//wAA//8AAP//AAA= + + + \ No newline at end of file diff --git a/SLC1-N/UserPassword.Designer.cs b/SLC1-N/UserPassword.Designer.cs new file mode 100644 index 0000000..3868761 --- /dev/null +++ b/SLC1-N/UserPassword.Designer.cs @@ -0,0 +1,115 @@ +namespace SLC1_N +{ + partial class UserPassword + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UserPassword)); + this.label3 = new System.Windows.Forms.Label(); + this.New_Pwd2 = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.New_Pwd1 = new System.Windows.Forms.TextBox(); + this.Modify_pwd = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("宋体", 13F); + this.label3.Location = new System.Drawing.Point(74, 102); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(152, 18); + this.label3.TabIndex = 28; + this.label3.Text = "再输入一次新密码"; + // + // New_Pwd2 + // + this.New_Pwd2.Font = new System.Drawing.Font("宋体", 15F); + this.New_Pwd2.Location = new System.Drawing.Point(32, 123); + this.New_Pwd2.Name = "New_Pwd2"; + this.New_Pwd2.PasswordChar = '*'; + this.New_Pwd2.Size = new System.Drawing.Size(237, 30); + this.New_Pwd2.TabIndex = 27; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("宋体", 13F); + this.label2.Location = new System.Drawing.Point(92, 25); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(116, 18); + this.label2.TabIndex = 30; + this.label2.Text = "请输入新密码"; + // + // New_Pwd1 + // + this.New_Pwd1.Font = new System.Drawing.Font("宋体", 15F); + this.New_Pwd1.Location = new System.Drawing.Point(32, 46); + this.New_Pwd1.Name = "New_Pwd1"; + this.New_Pwd1.PasswordChar = '*'; + this.New_Pwd1.Size = new System.Drawing.Size(237, 30); + this.New_Pwd1.TabIndex = 26; + // + // Modify_pwd + // + this.Modify_pwd.Font = new System.Drawing.Font("宋体", 15F); + this.Modify_pwd.Location = new System.Drawing.Point(107, 184); + this.Modify_pwd.Name = "Modify_pwd"; + this.Modify_pwd.Size = new System.Drawing.Size(86, 43); + this.Modify_pwd.TabIndex = 29; + this.Modify_pwd.Text = "修改"; + this.Modify_pwd.UseVisualStyleBackColor = true; + this.Modify_pwd.Click += new System.EventHandler(this.Modify_pwd_Click); + // + // UserPassword + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(300, 252); + this.Controls.Add(this.label3); + this.Controls.Add(this.New_Pwd2); + this.Controls.Add(this.label2); + this.Controls.Add(this.New_Pwd1); + this.Controls.Add(this.Modify_pwd); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "UserPassword"; + this.Text = "修改工程师密码"; + this.Load += new System.EventHandler(this.UserPassword_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox New_Pwd2; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox New_Pwd1; + private System.Windows.Forms.Button Modify_pwd; + } +} \ No newline at end of file diff --git a/SLC1-N/UserPassword.cs b/SLC1-N/UserPassword.cs new file mode 100644 index 0000000..f0f0287 --- /dev/null +++ b/SLC1-N/UserPassword.cs @@ -0,0 +1,55 @@ +using Microsoft.Win32; +using System; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class UserPassword : Form + { + public UserPassword() + { + InitializeComponent(); + } + + private void UserPassword_Load(object sender, EventArgs e) + { + New_Pwd1.Focus(); + } + + private void Modify_pwd_Click(object sender, EventArgs e) + { + if (New_Pwd1.Text == New_Pwd2.Text) + { + SetParameters(); + this.Close(); + } + else + { + MessageBox.Show("两次输入的密码不一致!"); + } + } + + + //写入注册表内容 + private void SetParameters() + { + + RegistryKey regName; + + regName = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\PMD\\1.0\\User-LL28-Set", true); + + if (regName is null) + { + regName = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\PMD\\1.0\\User-LL28-Set"); + } + + regName.SetValue("log_pwd", New_Pwd1.Text); + + + + regName.Close(); + } + + + } +} diff --git a/SLC1-N/UserPassword.resx b/SLC1-N/UserPassword.resx new file mode 100644 index 0000000..8951e3d --- /dev/null +++ b/SLC1-N/UserPassword.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAACq + qnqHeoqqgAAAAAAAAAAAAAAAAAAACqiAAAAAAAAAeqgAAAAAAAAAAAAAAAAKqAAAAAAAAAAAAAqoAAAA + AAAAAAAAAAegAAAAAAAAAAAAAAAIoAAAAAAAAAAAAKcAAAAAAAAAAAAAAAAACqAAAAAAAAAACgAIenqq + qqqqqqqqqqAAAIoAAAAAAAAAoAAAAKqqqqqqqqqqqqgAAAigAAAAAAAKAAAAiqqqqqqqqqqqqqoAAACK + AAAAAAB3AAAAeHiqqqqqqqqqqqoAAAAKAAAAAACgAAAAAAqqqqqqqqqqqqoAAAAAoAAAAAqAAAAAAKqq + qqqqoAAAAAAAAAAAgAAAAAoAAAAAAAAIqqqqpwAAAAAAAAAACgAAAAoAAAAAAAAKqqqqqgAAAAAAAAAA + CgAAAAgAAAAAAAiqqqqqqqAAAAAAAAAABwAAAAoAAAAAAAAACKqqqqAAAAAAAAAACgAAAAgAAAAAAAAA + qqqqqqgAAAAAAAAACgAAAAoAAAAAAAAKqqqqqqoAAAAAAAAACgAAAAoAAAAAAAAAAAqqqqpwAAAAAAAA + CgAAAAoAAAAAAAAAAKqqqqqgAAAAAAAAiAAAAACAAAAAAAAAB6iqqqqoAAAAAAAAoAAAAACgAAAAAAAA + AACKqqqqAAAAAAAIoAAAAAAKAAAAAAAAAAqqqqqqgAAAAAAKAAAAAAAAoAAAAAAAAIqKiqqqoAAAAACg + AAAAAAAAigAAAAAAAAAAqqqqqAAAAAoAAAAAAAAACKAAAAAAAAAKqqqqqgAAAKAAAAAAAAAAAAqAAAAA + AAAAAAAAAAAAqgAAAAAAAAAAAACqgAAAAAAAAAAAAAB6gAAAAAAAAAAAAAAAeqAAAAAAAAAAAKqAAAAA + AAAAAAAAAAAAAAenoAAAAAB6qAAAAAAAAAAAAAAAAAAAAAAAinqqqqhwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////P///AAD//8AAf/8AAP/+H/8P/wAA//j//+P/ + AAD/5///+f8AAP/P///+fwAA/7gAAB8/AAD/fwAAD58AAP78AAAPzwAA/PwAAA/vAAD9/4AAD/cAAPn/ + AB//9wAA+//gD//7AAD7/+AP//sAAPv/gAf/+wAA+//4B//7AAD7//AD//sAAPv/4AP/+wAA+//+Af/7 + AAD7//wB//MAAP3/+AD/9wAA/f//AP/nAAD+//4Af+8AAP9//AB/3wAA/z//wD+/AAD/n/+AP38AAP/n + ///8/wAA//H///H/AAD//H//x/8AAP//h/w//wAA///wAf//AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAACKqAAAenAAAAAAAAAAAACoAAAAAAAAegAAAAAAAAB3AAAAAAAAAACKAAAAAA + AKAAqqqqqqqqoAAIAAAAAAoAAIqqqqqqqqoAAKAAAACAAAinqqqqqqqqAAAIAAAAoAAACqqqqqeqigAA + CgAACAAAAAiKqqoAAAAAAAAAAAoAAAAAqqqqoAAAAAAAgAAKAAAAAACqqqAAAAAAAKAACAAAAAAIqqqq + AAAAAABwAAoAAAAAAAqqqgAAAAAAcAAAAAAAAACqqqqgAAAAAAAAAHAAAAAAAKqqoAAAAAoAAAAIAAAA + AAqqqqgAAACAAAAACgAAAAAACKqqAAAIAAAAAACHAAAAAKqqqqAAoAAAAAAAAKAAAAAAAAAACAAAAAAA + AAAAdwAAAAAAigAAAAAAAAAAAAAHqKeooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////+Hj//+f/n/+f/+f/cAB7/vAAPf3gAD79+AA++/g + P//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/Ad//f/+//8/8///4B/////////////// + //////////////////8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqoAAAAAAKqoAAAAAAAAiqoA + AAAAAAAKqgAAAAAAAAiqgAAAAAAAAHqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAP//AAD//wAA//8AAP//AAD4DwAA/D8AAPw/AAD+PwAA/h8AAP8fAAD//wAA//8AAP// + AAD//wAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAAP4AAAX+ + BQAJ/wkADf4NABH/EQAW/hYAGf8ZAB3+HQAh/iEAJv4mACr+KgAt/i0AMf4xADX+NQA5/jkAPf49AEH+ + QQBF/kUAS/9LAE3+TQBR/lEAVf5VAFn+WQBe/14AYf5hAGX+ZQBp/mkAbv9uAHD/cAB1/nUAef55AH7+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFggIDhMXFxsXFxIOBgobAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFgwSIAAAAAAAAAAAAAAAAAAdEQwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMHQAA + AAAAAAAAAAAAAAAAAAAAAAAbDBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAbCAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAB0IAAAAAAAAAAAAAAAAAAAAAAAAAAwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREA + AAAAAAAAAAAAAAAAAAAACgAAACAbFgwBAQEBAQEBAQEBAQEBAQEBAQEAAAAAABsOAAAAAAAAAAAAAAAA + AAAKAAAAAAAAAAwBAQEBAQEBAQEBAQEBAQEBAQEbAAAAAAAgDgAAAAAAAAAAAAAAAA4AAAAAAAAdBAEB + AQEBAQEBAQEBAQEBAQEBAQEOAAAAAAAAGxIAAAAAAAAAAAAAGxYAAAAAAAAgICAgCgEBAQEBAQEBAQEB + AQEBAQEBAAAAAAAAAA4AAAAAAAAAAAAADAAAAAAAAAAAAAAWAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAA + AAAKAAAAAAAAAAAWHQAAAAAAAAAAAAwBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAK + AAAAAAAAAAAAAAAAACAGAQEBAQEBFgAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAOAAAAAAAAAAAAAAAA + AAgBAQEBAQEBBAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAATAAAAAAAAAAAAAAAXAQEBAQEBAQEBARYA + AAAAAAAAAAAAAAAAAAAADAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAFwEBAQEBAQYAAAAAAAAAAAAAAAAA + AAAADAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAWAQEBAQEBAQEXAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAS + AAAAAAAAAAAAAAAAAAoBBAQBAQEBAQEEAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAA + AAAAAAAOAQEBAQEBGwAAAAAAAAAAAAAAAAAAEQAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAYBAQEBAQEB + BAAAAAAAAAAAAAAAAAAbFwAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAEQwODAQBAQEBAR0AAAAAAAAAAAAA + AAAKAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAIAQBAQEBAQgAAAAAAAAAAAAAAB0WAAAAAAAAAAAA + AAoAAAAAAAAAAAAAAAAAAAARAQEBAQEBAQEdAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAMAAAAAAAAAAAA + AAAAABsbFxsRAQEBAQEKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAbEQAAAAAAAAAAAAAAAAAAAAAMAQEB + AQEBIAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAGw4AAAAAAAAAAAAAAAAAAAYBAQEBAQEBCAAAAAAAAAoA + AAAAAAAAAAAAAAAAAAAAAAAIGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCgAAAAAAAAAAAAAAAAAA + AAAAAAAAFwgdAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXDBMA + AAAAAAAAAAAAAAAAAAAAABIMGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODhIXAAAAAAAAAAAA + FxEMEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEw4IBAQECA4WIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///z///wAA///AAH//AAD//h//D/8AAP/4///j/wAA/+f///n/ + AAD/z////n8AAP+4AAAfPwAA/38AAA+fAAD+/AAAD88AAPz8AAAP7wAA/f+AAA/3AAD5/wAf//cAAPv/ + 4A//+wAA+//gD//7AAD7/4AH//sAAPv/+Af/+wAA+//wA//7AAD7/+AD//sAAPv//gH/+wAA+//8Af/z + AAD9//gA//cAAP3//wD/5wAA/v/+AH/vAAD/f/wAf98AAP8//8A/vwAA/5//gD9/AAD/5////P8AAP/x + ///x/wAA//x//8f/AAD//4f8P/8AAP//8AH//wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA/gAABf4FAAn+CQAP/g8AHv4eACv+KwAs/ywAM/8zADT/ + NAA+/j4AQv5CAEX+RQBJ/kkATP5MAFD+UABV/lUAWf9ZAF7+XgBh/mEAZf5lAGj+aABt/m0Acv5yAHX+ + dQB5/nkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkODhcAAAAAFg4O + AAAAAAAAAAAAAAAAAAAAAAAAAA8WAAAAAAAAAAAAAAAAExEAAAAAAAAAAAAAAAAAABMWAAAAAAAAAAAA + AAAAAAAAABEXAAAAAAAAAAAAAAANAAAADQQEAgQCBAIEAgQCBAAAAAAPAAAAAAAAAAAADQAAAAARAgIC + AgICAgICAgICCgAAAAAPAAAAAAAAABMAAAAAGREPBAICAgICAgICAgICAAAAAAAZAAAAAAAAFgAAAAAA + ABECAgICAgIGBwgICAgAAAAAAA8AAAAAABMAAAAAAAAAFxYFAgICAgAAAAAAAAAAAAAAAAAAAAAADgAA + AAAAAAAADwICAgICBwAAAAAAAAAAAAAADwAAAAANAAAAAAAAAAAAAAcCAgICAAAAAAAAAAAAAAANAAAA + AA0AAAAAAAAAAAAOAgICAgIHAAAAAAAAAAAAAA0AAAAADgAAAAAAAAAAAAAACgICAgIAAAAAAAAAAAAA + EwAAAAAAAAAAAAAAAAAAAA0CAgICAggAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAgICAgAAAAAA + AAAADQAAAAAAAAAXAAAAAAAAAAAADQICAgICCgAAAAAAABEAAAAAAAAAABcAAAAAAAAAAAAAABMCAgIC + AAAAAAAXAAAAAAAAAAAAABkTAAAAAAAAAAAOBAICAgQOAAAADwAAAAAAAAAAAAAAAAAOAAAAAAAAAAAA + AAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAADhMAAAAAAAAAAAAAEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAT + Dg0KCg0OEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////+Hj//+f + /n/+f/+f/cAB7/vAAPf3gAD79+AA++/gP//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/ + Ad//f/+//8/8///4B/////////////////////////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAB + AAAAAAAAAAAAAAABAAAAAQAAAAAAAAD+AAAE/wQAC/4LAAz/DAAR/hEAFf8VACP/IwA6/zoAQ/5DAFL/ + UgBb/1sAb/5vAHb+dgB5/3kAfv9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgICAgIFAAAAAAAA + AAAAAAcCAg4AAAAAAAAAAAAAAAALAwIMAAAAAAAAAAAAAAAAAAgCAwAAAAAAAAAAAAAAAAANBQIOAAAA + AAAAAAAAAAAAAAoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAPgP + AAD8PwAA/D8AAP4/AAD+HwAA/x8AAP//AAD//wAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/AEUA/wBjAP8AdgD+AIMA/wCGAP8AfAD/AHIA/wBeAP8AQAD+ + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/AAIA/wAnAP4AZgD/AKkA/wDiAP8A5QD/AMkA/wC0AP8ApQD+AJ4A/wCZAP8AnwD/ + AKgA/wC4AP8AzAD+AOkA/wDaAP8AmwD/AFwA/wAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAQAP8ATgD/AKwA/wDRAP4AuwD/AIAA/wBCAP8AIgD/ABUA/wAMAP8ABQD+ + AAIAAAAAAP8AAwD/AAYA/wANAP8AFwD+ACQA/wBMAP8AjQD/AMAA/wDTAP8AnAD+AD8A/wAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ACAD+AEQA/gC5AP4A0QD+AIcA/gA3AP4ACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABEA/gA+AP4AmwD+ + ANQA/gCmAP4AOAD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAZAP4AlgD/AOcA/wB2AP8AGQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+ACcA/wCQAP8A5gD/AH4A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD8A/wDTAP4AqwD/ACEA/wAGAP8AMAD/ + AF8A/wByAP4AcgD/AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+ + AHIA/wByAP8AcgD/AHIA/wByAP8ACwAAAAAAAAAAAP8AMQD/AMYA/wDBAP8AKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wACAP8ATAD/ANsA/wB3AP4AHwD/ + AEsA/wCHAP8AnAD/AKoA/wDSAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8ATAAAAAAAAAAAAAAAAAD/ABMA/wCYAP8AywD+ + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wA/AP8A3AD/ + AGMA/wAGAAAAAAAAAAAAAAAAAP8ACAD/AFQA/wDVAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AlAD+AAMAAAAAAAAAAAAA + AAAA/wAMAP8AhgD+AMwA/wAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ACIA/wDKAP8AfAD/AAIAAAAAAAAAAAAAAAAA/wARAP8AjgD/APIA/wD/AP4A/gD/AP8A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AzgD+ + ABQAAAAAAAAAAAAAAAAAAAAAAP8ADAD+AJkA/wC8AP8ACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD+AJ8A/gCpAP4AAwAAAAAAAAAAAAAAAAAAAAAA/gBPAP4AgAD+AIAA/gCAAP4AhAD+ + AN0A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4A+wD+ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABAA/gDJAP4AdQD+AAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ASAD/ANEA/wAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAiAP4AqwD/APkA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBCAP8A3AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AqAD/AI4A/wACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABgD/AFAA/wDRAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AHQA/wAyAP8AMgD+ADIA/wAyAP8AMgD/ADIA/wAyAP8AMgD+AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP8AuAD/AHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAWAP4A3wD/ADsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AEQA/wBTAP4AUwD/AFYA/wCDAP8A7gD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AK0A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AYAD/AL4A/wANAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBIAP4AxwD/ + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAQD/AGIA/wDkAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/APIA/wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ALwD/AMwA/wAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wBoAP4AsAD/AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAcAP4ApgD/ + APoA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wCuAP8ABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADgD/ANAA/wBDAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wB1AP4AqAD/AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAKAP4AJQD/ACYA/wAmAP8ANwD/AKEA/wD9AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wDsAP8AQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAgD/ + ANIA/wBMAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBvAP4AqwD+AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAEA/gAtAP4ArgD+APoA/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4ApQD+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABwD+ANEA/gBIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBYAP4AuwD/ABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AFMA/wDXAP8A+QD/APkA/wD5AP8A/QD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A8QD+AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AHgD/AM0A/wA4AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wApAP4A2AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wA8AP8AzQD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/gD+AJ0A/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ARwD/AMYA/wAaAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP4AzAD/AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ADQD/AHMA/wDuAP8A/gD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+APMA/wAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AkAD/AKAA/wACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AbwD/AL8A/wASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAMAP8AdgD/AMUA/wDLAP8AywD+ANIA/wD3AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wCPAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAbAP8A3wD/ + AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AGwD/AMgA/wBrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AIQA/wDxAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wDkAP8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAUA/wCOAP8ArgD/AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AFEA/gDeAP4AMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAzAP4AwwD+ + AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4AigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+AE4A/gDoAP4AKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AAYA/wB9AP8A1AD/ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ABsA/wCPAP8AngD+AJ4A/wCfAP8AvgD/APsA/wD/AP8A/wD+AP4A/wD/AP8A3wD/ACkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AQgD+ANgA/wBdAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAOAP8AmAD/AMMA/wAyAP4AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAUA/wBHAP8A1QD/AP0A/wD/AP8A/wD+AP4A/wD/AP8A/QD/ + AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wBMAP8AzgD+AHwA/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADQD/AJYA/wDNAP4AUgD/AAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AH4A/wDtAP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AN8A/wAcAAAAAAAAAAAAAAAAAP8ACwD/AGoA/wDYAP8AdQD+AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAQA/wBqAP4A4QD/ + AJwA/wAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ANQD+AHAA/wBxAP8AcQD/ + AHEA/wBxAP8AcQD+AHEA/wBxAP8AcQD/AG4A/wAmAAAAAAAAAAAA/wAqAP8ArAD/AN0A/wBMAP8AAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4AJAD/AKEA/wDnAP8AhwD/AC0A/wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wABAP8APQD+AJ4A/wDjAP8AkgD/ + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAgA/gBCAP4AqQD+ANMA/gCzAP4AXQD+AC0A/gANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gASAP4ANAD+AGsA/gC+AP4A0QD+ + AJcA/gA0AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/ADUA/wB7AP4AyAD/ + AMwA/wC/AP8AoAD/AHQA/wBVAP8APgD+ADMA/wArAP8ANAD/AEEA/wBaAP8AegD+AKcA/wDCAP8AzwD/ + AL4A/wBwAP8AKQD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD/AC8A/wBbAP8AhwD/AK8A/wDPAP8A5AD+APEA/wD1AP8A8AD/AOAA/wDJAP8AqgD+ + AIAA/wBTAP8AJQD/AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//+AB//8AAP/+AAAf/wAA//gAQAP/AAD/4D//gP8AAP/B///wfwAA/4AAAAw/AAD+AAAADh8AAPwc + AAAHDwAA/DgAAAeHAAD4eAAAB8MAAPj/AAAH4wAA+PwAAAfjAADx/AAH//EAAPH/gAf/8QAA8f8AA//x + AADx/wAD//EAAPH/wAH/8QAA8f/AAf/xAADx//wA//EAAPH/8AD/8QAA+P/gAH/jAAD4//4Af8MAAPx/ + /AB/xwAA/D/4AD+HAAD+D/8APg8AAP8H/gAcHwAA/4P+ABg/AAD/4H//wP8AAP/wD/4B/wAA//wAAAf/ + AAD//4AAP/8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA8A/gAzAP4ASwD/AFgA/gBVAP4ASQD+ + ADAA/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAEAP4ANwD+AIcA/wCzAP4AtAD+AI8A/gB1AP8AaQD+ + AGoA/gB4AP4AkgD/ALcA/gCvAP4AfwD+AC4A/wACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gADAP8ARAD+AK4A/gCWAP4AQQD/ABMA/gABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AAQD+ABYA/gBKAP4AnwD/AKYA/gA5AP4AAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD/AJsA/wCVAP8AHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AKgD/AKEA/wCMAP8ADAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ACMA/gC5AP4AUQD/AD8A/gB+AP4AuQD+ + APAA/wD2AP4A9gD+APYA/gD2AP8A9gD+APYA/gD2AP4A9gD/APYA/gD2AP4A9gD+AHkAAAAAAP4AAgD+ + AF0A/gCvAP8AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAXAP4AuAD+AC8AAAAAAAAAAAD+ + ABYA/gCfAP4A+gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+AP4A/gD+AP8A/wD+AP4A/gD+AP4AwQD/ + AAUAAAAAAAAAAAD+AEYA/wCvAP4ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD/AJwA/gBHAAAAAAAA + AAAA/wALAP4AhQD+AKoA/gCsAP8A8AD+AP4A/gD+AP4A/gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+ + AP4A/gD1AP8AHQAAAAAAAAAAAAAAAAD/AF0A/gCHAP4AAQAAAAAAAAAAAAAAAAAAAAAA/wBAAP8AlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AGgD/AKgA/wD8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDUAP8AywD/ + AMwA/wDLAP8AywD/AMsA/wBGAAAAAAAAAAAAAAAAAP8AAgD/AK0A/wAnAAAAAAAAAAAAAAAAAAAAAAD+ + AJcA/wA0AAAAAAAAAAAAAAAAAAAAAAD+AAcA/gBmAP4AjAD/AJIA/gDhAP4A/gD+AP4A/wD/AP4A/gD+ + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4ATgD+AHsAAAAAAAAAAAAA + AAAAAAAAAP4AtwD/AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP8ArQD+AP0A/gD+AP4A/gD/ + AP8A/gD+AP4A1AD+AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP4AqwAA + AAAAAAAAAAAAAAAAAAAA/gC9AP8AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD+AFAA/wBuAP4AdgD+ + ANQA/gD+AP8A/wD+AP4A/gD9AP4AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAMA/gC9AAAAAAAAAAAAAAAAAAAAAAD/ALsA/wAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AB4A/wCvAP8A/QD/AP8A/wD/AP8A/wD/AP8A/wDTAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ACAD/ALkAAAAAAAAAAAAAAAAAAAAAAP4ArwD/ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ANwD+AFAA/gBWAP4AwwD/AP8A/gD+AP4A/gD+AP0A/wBXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/gAoAP4AnAAAAAAAAAAAAAAAAAAAAAAA/gB6AP8AVgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AIwD+ALgA/gD9AP8A/wD+AP4A/gD+AP4A/gD/AMgA/gAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AHIA/gBcAAAAAAAAAAAAAAAAAAAAAAD+AB8A/wCzAP4ACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAcAP4AMgD+ADsA/wCrAP4A/gD+AP4A/gD+AP8A/QD+ + AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAQAP4AuwD+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AGUA/wCJAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAkAP8AvQD/AP4A/wD/AP8A/wD/ + AP8A/wD/AP8AwQD/AAUAAAAAAAAAAAAAAAAAAAAAAP8ABgD/AJ8A/wBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABQD+AIsA/gB2AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAkA/gAUAP8AIAD+ + AJcA/gD8AP4A/gD/AP8A/gD6AP4ARwAAAAAAAAAAAAAAAAD+AAkA/gCMAP8AdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ABQD+AIQA/gCaAP8AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + ACAA/wC0AP4A9QD+APUA/gD1AP8A9gD+APUA/gCyAAAAAAAAAAAA/gAeAP4AqgD+AG8A/wADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AEkA/wC5AP4AbgD+ABQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAbAP8AfQD+ALUA/gA3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAwA/wBkAP8AswD/ + AJgA/wBVAP8AJQD/ABEA/wAGAP8AAQD/AAIA/wAIAP8AEwD/ACgA/wBeAP8AngD/AK8A/wBVAP8ACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/gAFAP4AMAD/AHAA/gCgAP4AsAD+ALoA/wDAAP4AwAD+ALkA/gCvAP8AnAD+AGcA/gArAP4AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////+Af//4AAf/4D8B/8P/8P+AAAh/GA + AGPjAABx58AAceeAH/nn4A/558AP+efwB/nn8Af55/gD+eP4A/Hx/AHj8PwBx/h+AYf+H/4f/wAAP//A + AP////////////////////////////////8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/ACsA/wAeAP8AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD4A/gBlAP8AXgD+AEEA/wA1AP4AQgD/ + AF8A/gBmAP8AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/AG4A/wBcAP8AagD/AHsA/wB7AP8AewD/ + AHsA/wB7AP8AWwD/ADMA/wBpAP8ABgAAAAAAAAAAAAAAAAD/AGwA/gAMAP8AKQD+ALwA/wD7AP4A/gD/ + AP8A/gD+AP8A/wD+AO0A/wAIAP4AEQD/AGcAAAAAAAAAAAD/ADYA/wAzAAAAAAD/AAEA/wBtAP8A3AD/ + AP8A/wD/AP8AgQD/AGYA/wBlAP8AEQAAAAAA/wA/AP8AKAAAAAAA/gBdAP8ABAAAAAAAAAAAAP4AGwD/ + AKQA/gD0AP8A/wD+AJAAAAAAAAAAAAAAAAAAAAAAAP8ABwD+AFoAAAAAAP8AWgD/AAYAAAAAAAAAAAAA + AAAA/wBVAP8AxQD/AP8A/wDzAP8AFwAAAAAAAAAAAAAAAAD/AAwA/wBVAAAAAAD+ACYA/wBFAAAAAAAA + AAAAAAAAAP8ADwD+AIkA/wDqAP4A/gD/AIYAAAAAAAAAAAAAAAAA/wBPAP4AGwAAAAAAAAAAAP8AXwD/ + AB8AAAAAAAAAAAAAAAAA/wBAAP8ArQD/AP4A/wDuAP8AEwAAAAAA/wAnAP8AWAAAAAAAAAAAAAAAAAD/ + AAEA/gBaAP8ATwD+AAUAAAAAAP4ACAD/AGoA/gB6AP8AegD+ADMA/wBUAP4AVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/ABwA/wBgAP8AYgD/AGEA/wBhAP8AYQD/AGIA/wBfAP8AFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA/B8AAPAHAADAAQAAwAEAAJAEAACYPAAAnBwAAJwcAADOCQAAwgMAAPAH + AAD//wAA//8AAP//AAA= + + + \ No newline at end of file diff --git a/SLC1-N/Warning.Designer.cs b/SLC1-N/Warning.Designer.cs new file mode 100644 index 0000000..19caec0 --- /dev/null +++ b/SLC1-N/Warning.Designer.cs @@ -0,0 +1,104 @@ +namespace SLC1_N +{ + partial class Warning + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Warning)); + this.Check = new System.Windows.Forms.Button(); + this.DataGridView1 = new System.Windows.Forms.DataGridView(); + ((System.ComponentModel.ISupportInitialize)(this.DataGridView1)).BeginInit(); + this.SuspendLayout(); + // + // Check + // + this.Check.Font = new System.Drawing.Font("宋体", 12F); + this.Check.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.Check.Location = new System.Drawing.Point(45, 85); + this.Check.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.Check.Name = "Check"; + this.Check.Size = new System.Drawing.Size(106, 44); + this.Check.TabIndex = 102; + this.Check.Text = "刷新查询"; + this.Check.UseVisualStyleBackColor = true; + this.Check.Click += new System.EventHandler(this.Check_Click); + // + // DataGridView1 + // + this.DataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.DataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("宋体", 11F); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.DataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.DataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.DataGridView1.Location = new System.Drawing.Point(212, 8); + this.DataGridView1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.DataGridView1.MultiSelect = false; + this.DataGridView1.Name = "DataGridView1"; + this.DataGridView1.ReadOnly = true; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 11F); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.DataGridView1.RowHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.DataGridView1.RowTemplate.Height = 23; + this.DataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.DataGridView1.Size = new System.Drawing.Size(506, 473); + this.DataGridView1.TabIndex = 97; + // + // Warning + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(730, 492); + this.Controls.Add(this.Check); + this.Controls.Add(this.DataGridView1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Warning"; + this.Text = "报警记录"; + this.Load += new System.EventHandler(this.Warning_Load); + ((System.ComponentModel.ISupportInitialize)(this.DataGridView1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button Check; + public System.Windows.Forms.DataGridView DataGridView1; + } +} \ No newline at end of file diff --git a/SLC1-N/Warning.cs b/SLC1-N/Warning.cs new file mode 100644 index 0000000..89c03f7 --- /dev/null +++ b/SLC1-N/Warning.cs @@ -0,0 +1,82 @@ +using System; +using System.Windows.Forms; + +namespace SLC1_N +{ + public partial class Warning : Form + { + //public static Warning wa; + private float X, Y; + public Warning() + { + InitializeComponent(); + //wa = this; + } + private void setTag(Control cons) + { + foreach (Control con in cons.Controls) + { + con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size; + if (con.Controls.Count > 0) + setTag(con); + } + } + private void setControls(float newx, float newy, Control cons) + { + foreach (Control con in cons.Controls) + { + string[] mytag = con.Tag.ToString().Split(new char[] { ':' }); + float a = Convert.ToSingle(mytag[0]) * newx; + con.Width = (int)a; + a = Convert.ToSingle(mytag[1]) * newy; + con.Height = (int)(a); + a = Convert.ToSingle(mytag[2]) * newx; + con.Left = (int)(a); + a = Convert.ToSingle(mytag[3]) * newy; + con.Top = (int)(a); + Single currentSize = Convert.ToSingle(mytag[4]) * newy; + con.Font = new System.Drawing.Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit); + if (con.Controls.Count > 0) + { + setControls(newx, newy, con); + } + } + } + private void SelectWarning_Resize(object sender, EventArgs e) + { + // throw new Exception("The method or operation is not implemented."); + float newx = (this.Width) / X; + // float newy = (this.Height - this.statusStrip1.Height) / (Y - y); + float newy = this.Height / Y; + setControls(newx, newy, this); + // this.Text = this.Width.ToString() + " " + this.Height.ToString(); + } + + private void Warning_Load(object sender, EventArgs e) + { + this.Resize += new EventHandler(SelectWarning_Resize); + X = this.Width; + Y = this.Height; + setTag(this); + try + { + //DataGridView1.DataSource = WarningInfo.SelectWarning(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + private void Check_Click(object sender, EventArgs e) + { + try + { + //DataGridView1.DataSource = WarningInfo.SelectWarning(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + } +} diff --git a/SLC1-N/Warning.resx b/SLC1-N/Warning.resx new file mode 100644 index 0000000..8951e3d --- /dev/null +++ b/SLC1-N/Warning.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA + CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg + AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAACq + qnqHeoqqgAAAAAAAAAAAAAAAAAAACqiAAAAAAAAAeqgAAAAAAAAAAAAAAAAKqAAAAAAAAAAAAAqoAAAA + AAAAAAAAAAegAAAAAAAAAAAAAAAIoAAAAAAAAAAAAKcAAAAAAAAAAAAAAAAACqAAAAAAAAAACgAIenqq + qqqqqqqqqqAAAIoAAAAAAAAAoAAAAKqqqqqqqqqqqqgAAAigAAAAAAAKAAAAiqqqqqqqqqqqqqoAAACK + AAAAAAB3AAAAeHiqqqqqqqqqqqoAAAAKAAAAAACgAAAAAAqqqqqqqqqqqqoAAAAAoAAAAAqAAAAAAKqq + qqqqoAAAAAAAAAAAgAAAAAoAAAAAAAAIqqqqpwAAAAAAAAAACgAAAAoAAAAAAAAKqqqqqgAAAAAAAAAA + CgAAAAgAAAAAAAiqqqqqqqAAAAAAAAAABwAAAAoAAAAAAAAACKqqqqAAAAAAAAAACgAAAAgAAAAAAAAA + qqqqqqgAAAAAAAAACgAAAAoAAAAAAAAKqqqqqqoAAAAAAAAACgAAAAoAAAAAAAAAAAqqqqpwAAAAAAAA + CgAAAAoAAAAAAAAAAKqqqqqgAAAAAAAAiAAAAACAAAAAAAAAB6iqqqqoAAAAAAAAoAAAAACgAAAAAAAA + AACKqqqqAAAAAAAIoAAAAAAKAAAAAAAAAAqqqqqqgAAAAAAKAAAAAAAAoAAAAAAAAIqKiqqqoAAAAACg + AAAAAAAAigAAAAAAAAAAqqqqqAAAAAoAAAAAAAAACKAAAAAAAAAKqqqqqgAAAKAAAAAAAAAAAAqAAAAA + AAAAAAAAAAAAqgAAAAAAAAAAAACqgAAAAAAAAAAAAAB6gAAAAAAAAAAAAAAAeqAAAAAAAAAAAKqAAAAA + AAAAAAAAAAAAAAenoAAAAAB6qAAAAAAAAAAAAAAAAAAAAAAAinqqqqhwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////P///AAD//8AAf/8AAP/+H/8P/wAA//j//+P/ + AAD/5///+f8AAP/P///+fwAA/7gAAB8/AAD/fwAAD58AAP78AAAPzwAA/PwAAA/vAAD9/4AAD/cAAPn/ + AB//9wAA+//gD//7AAD7/+AP//sAAPv/gAf/+wAA+//4B//7AAD7//AD//sAAPv/4AP/+wAA+//+Af/7 + AAD7//wB//MAAP3/+AD/9wAA/f//AP/nAAD+//4Af+8AAP9//AB/3wAA/z//wD+/AAD/n/+AP38AAP/n + ///8/wAA//H///H/AAD//H//x/8AAP//h/w//wAA///wAf//AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAACKqAAAenAAAAAAAAAAAACoAAAAAAAAegAAAAAAAAB3AAAAAAAAAACKAAAAAA + AKAAqqqqqqqqoAAIAAAAAAoAAIqqqqqqqqoAAKAAAACAAAinqqqqqqqqAAAIAAAAoAAACqqqqqeqigAA + CgAACAAAAAiKqqoAAAAAAAAAAAoAAAAAqqqqoAAAAAAAgAAKAAAAAACqqqAAAAAAAKAACAAAAAAIqqqq + AAAAAABwAAoAAAAAAAqqqgAAAAAAcAAAAAAAAACqqqqgAAAAAAAAAHAAAAAAAKqqoAAAAAoAAAAIAAAA + AAqqqqgAAACAAAAACgAAAAAACKqqAAAIAAAAAACHAAAAAKqqqqAAoAAAAAAAAKAAAAAAAAAACAAAAAAA + AAAAdwAAAAAAigAAAAAAAAAAAAAHqKeooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////+Hj//+f/n/+f/+f/cAB7/vAAPf3gAD79+AA++/g + P//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/Ad//f/+//8/8///4B/////////////// + //////////////////8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqoAAAAAAKqoAAAAAAAAiqoA + AAAAAAAKqgAAAAAAAAiqgAAAAAAAAHqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAP//AAD//wAA//8AAP//AAD4DwAA/D8AAPw/AAD+PwAA/h8AAP8fAAD//wAA//8AAP// + AAD//wAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAAP4AAAX+ + BQAJ/wkADf4NABH/EQAW/hYAGf8ZAB3+HQAh/iEAJv4mACr+KgAt/i0AMf4xADX+NQA5/jkAPf49AEH+ + QQBF/kUAS/9LAE3+TQBR/lEAVf5VAFn+WQBe/14AYf5hAGX+ZQBp/mkAbv9uAHD/cAB1/nUAef55AH7+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFggIDhMXFxsXFxIOBgobAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFgwSIAAAAAAAAAAAAAAAAAAdEQwbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMHQAA + AAAAAAAAAAAAAAAAAAAAAAAbDBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAbCAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAB0IAAAAAAAAAAAAAAAAAAAAAAAAAAwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREA + AAAAAAAAAAAAAAAAAAAACgAAACAbFgwBAQEBAQEBAQEBAQEBAQEBAQEAAAAAABsOAAAAAAAAAAAAAAAA + AAAKAAAAAAAAAAwBAQEBAQEBAQEBAQEBAQEBAQEbAAAAAAAgDgAAAAAAAAAAAAAAAA4AAAAAAAAdBAEB + AQEBAQEBAQEBAQEBAQEBAQEOAAAAAAAAGxIAAAAAAAAAAAAAGxYAAAAAAAAgICAgCgEBAQEBAQEBAQEB + AQEBAQEBAAAAAAAAAA4AAAAAAAAAAAAADAAAAAAAAAAAAAAWAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAA + AAAKAAAAAAAAAAAWHQAAAAAAAAAAAAwBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAK + AAAAAAAAAAAAAAAAACAGAQEBAQEBFgAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAOAAAAAAAAAAAAAAAA + AAgBAQEBAQEBBAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAATAAAAAAAAAAAAAAAXAQEBAQEBAQEBARYA + AAAAAAAAAAAAAAAAAAAADAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAFwEBAQEBAQYAAAAAAAAAAAAAAAAA + AAAADAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAWAQEBAQEBAQEXAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAS + AAAAAAAAAAAAAAAAAAoBBAQBAQEBAQEEAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAKAAAAAAAAAAAAAAAA + AAAAAAAOAQEBAQEBGwAAAAAAAAAAAAAAAAAAEQAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAYBAQEBAQEB + BAAAAAAAAAAAAAAAAAAbFwAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAEQwODAQBAQEBAR0AAAAAAAAAAAAA + AAAKAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAIAQBAQEBAQgAAAAAAAAAAAAAAB0WAAAAAAAAAAAA + AAoAAAAAAAAAAAAAAAAAAAARAQEBAQEBAQEdAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAMAAAAAAAAAAAA + AAAAABsbFxsRAQEBAQEKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAbEQAAAAAAAAAAAAAAAAAAAAAMAQEB + AQEBIAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAGw4AAAAAAAAAAAAAAAAAAAYBAQEBAQEBCAAAAAAAAAoA + AAAAAAAAAAAAAAAAAAAAAAAIGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWCgAAAAAAAAAAAAAAAAAA + AAAAAAAAFwgdAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXDBMA + AAAAAAAAAAAAAAAAAAAAABIMGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODhIXAAAAAAAAAAAA + FxEMEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEw4IBAQECA4WIAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///z///wAA///AAH//AAD//h//D/8AAP/4///j/wAA/+f///n/ + AAD/z////n8AAP+4AAAfPwAA/38AAA+fAAD+/AAAD88AAPz8AAAP7wAA/f+AAA/3AAD5/wAf//cAAPv/ + 4A//+wAA+//gD//7AAD7/4AH//sAAPv/+Af/+wAA+//wA//7AAD7/+AD//sAAPv//gH/+wAA+//8Af/z + AAD9//gA//cAAP3//wD/5wAA/v/+AH/vAAD/f/wAf98AAP8//8A/vwAA/5//gD9/AAD/5////P8AAP/x + ///x/wAA//x//8f/AAD//4f8P/8AAP//8AH//wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA/gAABf4FAAn+CQAP/g8AHv4eACv+KwAs/ywAM/8zADT/ + NAA+/j4AQv5CAEX+RQBJ/kkATP5MAFD+UABV/lUAWf9ZAF7+XgBh/mEAZf5lAGj+aABt/m0Acv5yAHX+ + dQB5/nkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkODhcAAAAAFg4O + AAAAAAAAAAAAAAAAAAAAAAAAAA8WAAAAAAAAAAAAAAAAExEAAAAAAAAAAAAAAAAAABMWAAAAAAAAAAAA + AAAAAAAAABEXAAAAAAAAAAAAAAANAAAADQQEAgQCBAIEAgQCBAAAAAAPAAAAAAAAAAAADQAAAAARAgIC + AgICAgICAgICCgAAAAAPAAAAAAAAABMAAAAAGREPBAICAgICAgICAgICAAAAAAAZAAAAAAAAFgAAAAAA + ABECAgICAgIGBwgICAgAAAAAAA8AAAAAABMAAAAAAAAAFxYFAgICAgAAAAAAAAAAAAAAAAAAAAAADgAA + AAAAAAAADwICAgICBwAAAAAAAAAAAAAADwAAAAANAAAAAAAAAAAAAAcCAgICAAAAAAAAAAAAAAANAAAA + AA0AAAAAAAAAAAAOAgICAgIHAAAAAAAAAAAAAA0AAAAADgAAAAAAAAAAAAAACgICAgIAAAAAAAAAAAAA + EwAAAAAAAAAAAAAAAAAAAA0CAgICAggAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAgICAgAAAAAA + AAAADQAAAAAAAAAXAAAAAAAAAAAADQICAgICCgAAAAAAABEAAAAAAAAAABcAAAAAAAAAAAAAABMCAgIC + AAAAAAAXAAAAAAAAAAAAABkTAAAAAAAAAAAOBAICAgQOAAAADwAAAAAAAAAAAAAAAAAOAAAAAAAAAAAA + AAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAADhMAAAAAAAAAAAAAEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAT + Dg0KCg0OEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////+Hj//+f + /n/+f/+f/cAB7/vAAPf3gAD79+AA++/gP//v8B/97/wf/e/4D/3v/g/9//wH//f/B/v7/gP3+/+D7/z/ + Ad//f/+//8/8///4B/////////////////////////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAB + AAAAAAAAAAAAAAABAAAAAQAAAAAAAAD+AAAE/wQAC/4LAAz/DAAR/hEAFf8VACP/IwA6/zoAQ/5DAFL/ + UgBb/1sAb/5vAHb+dgB5/3kAfv9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgICAgIFAAAAAAAA + AAAAAAcCAg4AAAAAAAAAAAAAAAALAwIMAAAAAAAAAAAAAAAAAAgCAwAAAAAAAAAAAAAAAAANBQIOAAAA + AAAAAAAAAAAAAAoCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD//wAA//8AAPgP + AAD8PwAA/D8AAP4/AAD+HwAA/x8AAP//AAD//wAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAgAAAA + AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/AEUA/wBjAP8AdgD+AIMA/wCGAP8AfAD/AHIA/wBeAP8AQAD+ + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/AAIA/wAnAP4AZgD/AKkA/wDiAP8A5QD/AMkA/wC0AP8ApQD+AJ4A/wCZAP8AnwD/ + AKgA/wC4AP8AzAD+AOkA/wDaAP8AmwD/AFwA/wAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAQAP8ATgD/AKwA/wDRAP4AuwD/AIAA/wBCAP8AIgD/ABUA/wAMAP8ABQD+ + AAIAAAAAAP8AAwD/AAYA/wANAP8AFwD+ACQA/wBMAP8AjQD/AMAA/wDTAP8AnAD+AD8A/wAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ACAD+AEQA/gC5AP4A0QD+AIcA/gA3AP4ACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABEA/gA+AP4AmwD+ + ANQA/gCmAP4AOAD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAZAP4AlgD/AOcA/wB2AP8AGQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+ACcA/wCQAP8A5gD/AH4A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD8A/wDTAP4AqwD/ACEA/wAGAP8AMAD/ + AF8A/wByAP4AcgD/AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+AHIA/wByAP8AcgD/AHIA/wByAP8AcgD+ + AHIA/wByAP8AcgD/AHIA/wByAP8ACwAAAAAAAAAAAP8AMQD/AMYA/wDBAP8AKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wACAP8ATAD/ANsA/wB3AP4AHwD/ + AEsA/wCHAP8AnAD/AKoA/wDSAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8ATAAAAAAAAAAAAAAAAAD/ABMA/wCYAP8AywD+ + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wA/AP8A3AD/ + AGMA/wAGAAAAAAAAAAAAAAAAAP8ACAD/AFQA/wDVAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AlAD+AAMAAAAAAAAAAAAA + AAAA/wAMAP8AhgD+AMwA/wAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ACIA/wDKAP8AfAD/AAIAAAAAAAAAAAAAAAAA/wARAP8AjgD/APIA/wD/AP4A/gD/AP8A/wD/AP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8AzgD+ + ABQAAAAAAAAAAAAAAAAAAAAAAP8ADAD+AJkA/wC8AP8ACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD+AJ8A/gCpAP4AAwAAAAAAAAAAAAAAAAAAAAAA/gBPAP4AgAD+AIAA/gCAAP4AhAD+ + AN0A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4A+wD+ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ABAA/gDJAP4AdQD+AAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ASAD/ANEA/wAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAiAP4AqwD/APkA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBCAP8A3AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AqAD/AI4A/wACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABgD/AFAA/wDRAP4A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/ + AHQA/wAyAP8AMgD+ADIA/wAyAP8AMgD/ADIA/wAyAP8AMgD+AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP8AuAD/AHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAWAP4A3wD/ADsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8ACQD/AEQA/wBTAP4AUwD/AFYA/wCDAP8A7gD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AK0A/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AYAD/AL4A/wANAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBIAP4AxwD/ + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAQD/AGIA/wDkAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/APIA/wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ALwD/AMwA/wAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wBoAP4AsAD/AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAcAP4ApgD/ + APoA/wD/AP8A/wD/AP8A/wD/AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wCuAP8ABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADgD/ANAA/wBDAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wB1AP4AqAD/AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wAKAP4AJQD/ACYA/wAmAP8ANwD/AKEA/wD9AP8A/wD+AP4A/wD/AP8A/wD/AP8A/wDsAP8AQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAgD/ + ANIA/wBMAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gBvAP4AqwD+AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAEA/gAtAP4ArgD+APoA/gD+AP4A/gD+AP4A/gD+AP4A/gD+ + AP4A/gD+AP4ApQD+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABwD+ANEA/gBIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wBYAP4AuwD/ABAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AFMA/wDXAP8A+QD/APkA/wD5AP8A/QD+ + AP4A/wD/AP8A/wD/AP8A/wD/AP8A8QD+AC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AHgD/AM0A/wA4AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wApAP4A2AD/ + ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wA8AP8AzQD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/gD+AJ0A/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ARwD/AMYA/wAaAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/wADAP4AzAD/AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ADQD/AHMA/wDuAP8A/gD+AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD+APMA/wAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AkAD/AKAA/wACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AbwD/AL8A/wASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAMAP8AdgD/AMUA/wDLAP8AywD+ANIA/wD3AP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wCPAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAbAP8A3wD/ + AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AGwD/AMgA/wBrAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AIQA/wDxAP8A/wD/ + AP8A/wD/AP8A/wD+AP4A/wDkAP8AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAUA/wCOAP8ArgD/AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AFEA/gDeAP4AMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAzAP4AwwD+ + AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4A/gD+AP4AigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD+AE4A/gDoAP4AKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AAYA/wB9AP8A1AD/ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + ABsA/wCPAP8AngD+AJ4A/wCfAP8AvgD/APsA/wD/AP8A/wD+AP4A/wD/AP8A3wD/ACkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AQgD+ANgA/wBdAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/wAOAP8AmAD/AMMA/wAyAP4AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAUA/wBHAP8A1QD/AP0A/wD/AP8A/wD+AP4A/wD/AP8A/QD/ + AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAEA/wBMAP8AzgD+AHwA/wAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ADQD/AJYA/wDNAP4AUgD/AAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD+AH4A/wDtAP8A/wD/AP8A/wD/AP8A/wD+ + AP4A/wD/AP8A/wD/AN8A/wAcAAAAAAAAAAAAAAAAAP8ACwD/AGoA/wDYAP8AdQD+AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAQA/wBqAP4A4QD/ + AJwA/wAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ANQD+AHAA/wBxAP8AcQD/ + AHEA/wBxAP8AcQD+AHEA/wBxAP8AcQD/AG4A/wAmAAAAAAAAAAAA/wAqAP8ArAD/AN0A/wBMAP8AAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4AJAD/AKEA/wDnAP8AhwD/AC0A/wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wABAP8APQD+AJ4A/wDjAP8AkgD/ + ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAgA/gBCAP4AqQD+ANMA/gCzAP4AXQD+AC0A/gANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gASAP4ANAD+AGsA/gC+AP4A0QD+ + AJcA/gA0AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/ADUA/wB7AP4AyAD/ + AMwA/wC/AP8AoAD/AHQA/wBVAP8APgD+ADMA/wArAP8ANAD/AEEA/wBaAP8AegD+AKcA/wDCAP8AzwD/ + AL4A/wBwAP8AKQD+AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP4ABQD/AC8A/wBbAP8AhwD/AK8A/wDPAP8A5AD+APEA/wD1AP8A8AD/AOAA/wDJAP8AqgD+ + AIAA/wBTAP8AJQD/AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//+AB//8AAP/+AAAf/wAA//gAQAP/AAD/4D//gP8AAP/B///wfwAA/4AAAAw/AAD+AAAADh8AAPwc + AAAHDwAA/DgAAAeHAAD4eAAAB8MAAPj/AAAH4wAA+PwAAAfjAADx/AAH//EAAPH/gAf/8QAA8f8AA//x + AADx/wAD//EAAPH/wAH/8QAA8f/AAf/xAADx//wA//EAAPH/8AD/8QAA+P/gAH/jAAD4//4Af8MAAPx/ + /AB/xwAA/D/4AD+HAAD+D/8APg8AAP8H/gAcHwAA/4P+ABg/AAD/4H//wP8AAP/wD/4B/wAA//wAAAf/ + AAD//4AAP/8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AA8A/gAzAP4ASwD/AFgA/gBVAP4ASQD+ + ADAA/wALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAEAP4ANwD+AIcA/wCzAP4AtAD+AI8A/gB1AP8AaQD+ + AGoA/gB4AP4AkgD/ALcA/gCvAP4AfwD+AC4A/wACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gADAP8ARAD+AK4A/gCWAP4AQQD/ABMA/gABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AAQD+ABYA/gBKAP4AnwD/AKYA/gA5AP4AAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AEwD/AJsA/wCVAP8AHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AKgD/AKEA/wCMAP8ADAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ACMA/gC5AP4AUQD/AD8A/gB+AP4AuQD+ + APAA/wD2AP4A9gD+APYA/gD2AP8A9gD+APYA/gD2AP4A9gD/APYA/gD2AP4A9gD+AHkAAAAAAP4AAgD+ + AF0A/gCvAP8AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAXAP4AuAD+AC8AAAAAAAAAAAD+ + ABYA/gCfAP4A+gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+AP4A/gD+AP8A/wD+AP4A/gD+AP4AwQD/ + AAUAAAAAAAAAAAD+AEYA/wCvAP4ACQAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD/AJwA/gBHAAAAAAAA + AAAA/wALAP4AhQD+AKoA/gCsAP8A8AD+AP4A/gD+AP4A/gD/AP8A/gD+AP4A/gD+AP4A/wD/AP4A/gD+ + AP4A/gD1AP8AHQAAAAAAAAAAAAAAAAD/AF0A/gCHAP4AAQAAAAAAAAAAAAAAAAAAAAAA/wBAAP8AlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAP8AGgD/AKgA/wD8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDUAP8AywD/ + AMwA/wDLAP8AywD/AMsA/wBGAAAAAAAAAAAAAAAAAP8AAgD/AK0A/wAnAAAAAAAAAAAAAAAAAAAAAAD+ + AJcA/wA0AAAAAAAAAAAAAAAAAAAAAAD+AAcA/gBmAP4AjAD/AJIA/gDhAP4A/gD+AP4A/wD/AP4A/gD+ + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4ATgD+AHsAAAAAAAAAAAAA + AAAAAAAAAP4AtwD/AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP8ArQD+AP0A/gD+AP4A/gD/ + AP8A/gD+AP4A1AD+AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAZAP4AqwAA + AAAAAAAAAAAAAAAAAAAA/gC9AP8AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAgD+AFAA/wBuAP4AdgD+ + ANQA/gD+AP8A/wD+AP4A/gD9AP4AYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + AAMA/gC9AAAAAAAAAAAAAAAAAAAAAAD/ALsA/wAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AB4A/wCvAP8A/QD/AP8A/wD/AP8A/wD/AP8A/wDTAP8ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ACAD/ALkAAAAAAAAAAAAAAAAAAAAAAP4ArwD/ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ANwD+AFAA/gBWAP4AwwD/AP8A/gD+AP4A/gD+AP0A/wBXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA/gAoAP4AnAAAAAAAAAAAAAAAAAAAAAAA/gB6AP8AVgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4AIwD+ALgA/gD9AP8A/wD+AP4A/gD+AP4A/gD/AMgA/gAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AHIA/gBcAAAAAAAAAAAAAAAAAAAAAAD+AB8A/wCzAP4ACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAcAP4AMgD+ADsA/wCrAP4A/gD+AP4A/gD+AP8A/QD+ + AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAQAP4AuwD+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ + AGUA/wCJAP8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAkAP8AvQD/AP4A/wD/AP8A/wD/ + AP8A/wD/AP8AwQD/AAUAAAAAAAAAAAAAAAAAAAAAAP8ABgD/AJ8A/wBKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP8ABQD+AIsA/gB2AP4ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAkA/gAUAP8AIAD+ + AJcA/gD8AP4A/gD/AP8A/gD6AP4ARwAAAAAAAAAAAAAAAAD+AAkA/gCMAP8AdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAP4ABQD+AIQA/gCaAP8AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+ + ACAA/wC0AP4A9QD+APUA/gD1AP8A9gD+APUA/gCyAAAAAAAAAAAA/gAeAP4AqgD+AG8A/wADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AEkA/wC5AP4AbgD+ABQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAbAP8AfQD+ALUA/gA3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAwA/wBkAP8AswD/ + AJgA/wBVAP8AJQD/ABEA/wAGAP8AAQD/AAIA/wAIAP8AEwD/ACgA/wBeAP8AngD/AK8A/wBVAP8ACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/gAFAP4AMAD/AHAA/gCgAP4AsAD+ALoA/wDAAP4AwAD+ALkA/gCvAP8AnAD+AGcA/gArAP4AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////+Af//4AAf/4D8B/8P/8P+AAAh/GA + AGPjAABx58AAceeAH/nn4A/558AP+efwB/nn8Af55/gD+eP4A/Hx/AHj8PwBx/h+AYf+H/4f/wAAP//A + AP////////////////////////////////8oAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wADAP8AHwD/ACsA/wAeAP8AAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AD4A/gBlAP8AXgD+AEEA/wA1AP4AQgD/ + AF8A/gBmAP8AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8ACAD/AG4A/wBcAP8AagD/AHsA/wB7AP8AewD/ + AHsA/wB7AP8AWwD/ADMA/wBpAP8ABgAAAAAAAAAAAAAAAAD/AGwA/gAMAP8AKQD+ALwA/wD7AP4A/gD/ + AP8A/gD+AP8A/wD+AO0A/wAIAP4AEQD/AGcAAAAAAAAAAAD/ADYA/wAzAAAAAAD/AAEA/wBtAP8A3AD/ + AP8A/wD/AP8AgQD/AGYA/wBlAP8AEQAAAAAA/wA/AP8AKAAAAAAA/gBdAP8ABAAAAAAAAAAAAP4AGwD/ + AKQA/gD0AP8A/wD+AJAAAAAAAAAAAAAAAAAAAAAAAP8ABwD+AFoAAAAAAP8AWgD/AAYAAAAAAAAAAAAA + AAAA/wBVAP8AxQD/AP8A/wDzAP8AFwAAAAAAAAAAAAAAAAD/AAwA/wBVAAAAAAD+ACYA/wBFAAAAAAAA + AAAAAAAAAP8ADwD+AIkA/wDqAP4A/gD/AIYAAAAAAAAAAAAAAAAA/wBPAP4AGwAAAAAAAAAAAP8AXwD/ + AB8AAAAAAAAAAAAAAAAA/wBAAP8ArQD/AP4A/wDuAP8AEwAAAAAA/wAnAP8AWAAAAAAAAAAAAAAAAAD/ + AAEA/gBaAP8ATwD+AAUAAAAAAP4ACAD/AGoA/gB6AP8AegD+ADMA/wBUAP4AVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD/ABwA/wBgAP8AYgD/AGEA/wBhAP8AYQD/AGIA/wBfAP8AFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP//AAD//wAA/B8AAPAHAADAAQAAwAEAAJAEAACYPAAAnBwAAJwcAADOCQAAwgMAAPAH + AAD//wAA//8AAP//AAA= + + + \ No newline at end of file diff --git a/SLC1-N/WindowAutoResizer.cs b/SLC1-N/WindowAutoResizer.cs new file mode 100644 index 0000000..52300d8 --- /dev/null +++ b/SLC1-N/WindowAutoResizer.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace WindowsFormsApp1 +{ + internal class WindowAutoResizer // 窗口大小自适应类 + { + private readonly Form _form; + private float originalWidth; + private float originalHeight; + + /// + /// 初始化窗口自适应调整器 + /// + /// 要自适应的窗体 + public WindowAutoResizer(Form form) + { + _form = form ?? throw new ArgumentNullException(nameof(form)); + Initialize(); + } + + private void Initialize() + { + originalWidth = _form.Width; + originalHeight = _form.Height; + + // 记录初始控件位置和大小 + SetTag(_form); + + // 注册窗口大小改变事件 + _form.Resize += async (sender, e) => await OnFormResizeAsync(); + } + + /// + /// 记录控件初始位置和大小信息 + /// 递归所有控件,存储宽、高、位置等到Tag + /// + /// 容器控件 + private void SetTag(Control container) + { + foreach (Control control in container.Controls) // 遍历容器(cons)所有子控件。 + { + control.Tag = $"{control.Width}:{control.Height}:{control.Left}:{control.Top}:{control.Font.Size}"; + if (control.Controls.Count > 0) + { + SetTag(control); + } + } + } + + /// + /// 窗体大小改变时异步调整控件 + /// + private async Task OnFormResizeAsync() + { + float widthRatio = _form.Width / originalWidth; + float heightRatio = _form.Height / originalHeight; + + await Task.Run(() => AdjustControls(widthRatio, heightRatio, _form)); + } + + /// + /// 根据比例调整控件大小和位置 + /// + /// 宽度比例 + /// 高度比例 + /// 容器控件 + private void AdjustControls(float widthRatio, float heightRatio, Control container) + { + if (container.InvokeRequired) // 检查是否在UI线程 + { + container.Invoke(new Action(() => AdjustControls(widthRatio, heightRatio, container))); + return; + } + + // 暂停控件的布局逻辑,直到所有更改完成后再一次性重新计算布局 + container.SuspendLayout(); + + try + { + // 拷贝一份,避免实时读取时被修改造成异常 + var controlsCopy = container.Controls.Cast().ToArray(); + + foreach (Control control in controlsCopy) + { + if (control.Tag == null) continue; + + string[] tagValues = control.Tag.ToString().Split(':'); + if (tagValues.Length != 5) continue; + + control.Width = (int)(float.Parse(tagValues[0]) * widthRatio); + control.Height = (int)(float.Parse(tagValues[1]) * heightRatio); + control.Left = (int)(float.Parse(tagValues[2]) * widthRatio); + control.Top = (int)(float.Parse(tagValues[3]) * heightRatio); + + float newFontSize = float.Parse(tagValues[4]) * heightRatio; + if (Math.Abs(control.Font.Size - newFontSize) > float.Epsilon) + { + control.Font = new Font(control.Font.Name, newFontSize, control.Font.Style); + } + + // 如果当前控件有子控件,递归调整子控件 + if (control.HasChildren) + { + AdjustControls(widthRatio, heightRatio, control); + } + } + } + finally + { + // 恢复控件的布局逻辑,并强制立即重新计算布局。 + container.ResumeLayout(true); + } + } + + /// + /// 重新初始化控件位置和大小信息(当动态添加控件后调用) + /// + public void RefreshTags() + { + SetTag(_form); + } + + private void AddNewControl() + { + //var newButton = new Button { Text = "New Button", ... }; + //this.Controls.Add(newButton); + //resizer.RefreshTags(); // 重新记录所有控件信息 + } + + + } +} diff --git a/SLC1-N/bin/Debug/._cache_LL28-N-V1.7.exe b/SLC1-N/bin/Debug/._cache_LL28-N-V1.7.exe new file mode 100644 index 0000000..30575e9 Binary files /dev/null and b/SLC1-N/bin/Debug/._cache_LL28-N-V1.7.exe differ diff --git a/SLC1-N/bin/Debug/Config/Model/LL28Config b/SLC1-N/bin/Debug/Config/Model/LL28Config new file mode 100644 index 0000000..e1974f1 --- /dev/null +++ b/SLC1-N/bin/Debug/Config/Model/LL28Config @@ -0,0 +1,27 @@ +[Count] +CH1Product=0 +CH1PassNum=0 +CH1FailNum=0 +CH1ErrorNum=0 +[UPH] +uph10=3 +uph13=2 +uph14=1 +uph8=1 +uph9=1 +uph11=2 +uph16=7 +uph17=6 +[JS] +CH1Sum=0 +[codeleng] +CH1codeleng=20 +CH2codeleng=21 +[Save] +excel=False +mes=False +ChkMES_CheckOut=False +txt=True +ChkMES_CheckPass=False +csv=False +path= diff --git a/SLC1-N/bin/Debug/Config/NGCode/CheckCode.mdb b/SLC1-N/bin/Debug/Config/NGCode/CheckCode.mdb new file mode 100644 index 0000000..ea6b9da Binary files /dev/null and b/SLC1-N/bin/Debug/Config/NGCode/CheckCode.mdb differ diff --git a/SLC1-N/bin/Debug/Config/Port/MultimeterPort.ini b/SLC1-N/bin/Debug/Config/Port/MultimeterPort.ini new file mode 100644 index 0000000..865bdef --- /dev/null +++ b/SLC1-N/bin/Debug/Config/Port/MultimeterPort.ini @@ -0,0 +1,5 @@ +[Port] +CodePort=COM11 +CodeBaud=9600 +CH2CodePort=COM21 +CH2CodeBaud=9600 diff --git a/SLC1-N/bin/Debug/Config/WarningRecord/Warning.mdb b/SLC1-N/bin/Debug/Config/WarningRecord/Warning.mdb new file mode 100644 index 0000000..d467bf4 Binary files /dev/null and b/SLC1-N/bin/Debug/Config/WarningRecord/Warning.mdb differ diff --git a/SLC1-N/bin/Debug/DocumentFormat.OpenXml.dll b/SLC1-N/bin/Debug/DocumentFormat.OpenXml.dll new file mode 100644 index 0000000..839ed13 Binary files /dev/null and b/SLC1-N/bin/Debug/DocumentFormat.OpenXml.dll differ diff --git a/SLC1-N/bin/Debug/EasyModbus.dll b/SLC1-N/bin/Debug/EasyModbus.dll new file mode 100644 index 0000000..484b2da Binary files /dev/null and b/SLC1-N/bin/Debug/EasyModbus.dll differ diff --git a/SLC1-N/bin/Debug/EasyModbus.xml b/SLC1-N/bin/Debug/EasyModbus.xml new file mode 100644 index 0000000..5a61d19 --- /dev/null +++ b/SLC1-N/bin/Debug/EasyModbus.xml @@ -0,0 +1,425 @@ + + + + EasyModbus + + + + + Implements a ModbusClient. + + + + + Constructor which determines the Master ip-address and the Master Port. + + IP-Address of the Master device + Listening port of the Master device (should be 502) + + + + Constructor which determines the Serial-Port + + Serial-Port Name e.G. "COM1" + + + + Parameterless constructor + + + + + Establish connection to Master device in case of Modbus TCP. Opens COM-Port in case of Modbus RTU + + + + + Establish connection to Master device in case of Modbus TCP. + + + + + Converts two ModbusRegisters to Float - Example: EasyModbus.ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(19,2)) + + Two Register values received from Modbus + Connected float value + + + + Converts two ModbusRegisters to Float, Registers can by swapped + + Two Register values received from Modbus + Desired Word Order (Low Register first or High Register first + Connected float value + + + + Converts two ModbusRegisters to 32 Bit Integer value + + Two Register values received from Modbus + Connected 32 Bit Integer value + + + + Converts two ModbusRegisters to 32 Bit Integer Value - Registers can be swapped + + Two Register values received from Modbus + Desired Word Order (Low Register first or High Register first + Connecteds 32 Bit Integer value + + + + Convert four 16 Bit Registers to 64 Bit Integer value Register Order "LowHigh": Reg0: Low Word.....Reg3: High Word, "HighLow": Reg0: High Word.....Reg3: Low Word + + four Register values received from Modbus + 64 bit value + + + + Convert four 16 Bit Registers to 64 Bit Integer value - Registers can be swapped + + four Register values received from Modbus + Desired Word Order (Low Register first or High Register first + Connected 64 Bit Integer value + + + + Convert four 16 Bit Registers to 64 Bit double prec. value Register Order "LowHigh": Reg0: Low Word.....Reg3: High Word, "HighLow": Reg0: High Word.....Reg3: Low Word + + four Register values received from Modbus + 64 bit value + + + + Convert four 16 Bit Registers to 64 Bit double prec. value - Registers can be swapped + + four Register values received from Modbus + Desired Word Order (Low Register first or High Register first + Connected double prec. float value + + + + Converts float to two ModbusRegisters - Example: modbusClient.WriteMultipleRegisters(24, EasyModbus.ModbusClient.ConvertFloatToTwoRegisters((float)1.22)); + + Float value which has to be converted into two registers + Register values + + + + Converts float to two ModbusRegisters Registers - Registers can be swapped + + Float value which has to be converted into two registers + Desired Word Order (Low Register first or High Register first + Register values + + + + Converts 32 Bit Value to two ModbusRegisters + + Int value which has to be converted into two registers + Register values + + + + Converts 32 Bit Value to two ModbusRegisters Registers - Registers can be swapped + + Double value which has to be converted into two registers + Desired Word Order (Low Register first or High Register first + Register values + + + + Converts 64 Bit Value to four ModbusRegisters + + long value which has to be converted into four registers + Register values + + + + Converts 64 Bit Value to four ModbusRegisters - Registers can be swapped + + long value which has to be converted into four registers + Desired Word Order (Low Register first or High Register first + Register values + + + + Converts 64 Bit double prec Value to four ModbusRegisters + + double value which has to be converted into four registers + Register values + + + + Converts 64 Bit double prec. Value to four ModbusRegisters - Registers can be swapped + + double value which has to be converted into four registers + Desired Word Order (Low Register first or High Register first + Register values + + + + Converts 16 - Bit Register values to String + + Register array received via Modbus + First Register containing the String to convert + number of characters in String (must be even) + Converted String + + + + Converts a String to 16 - Bit Registers + + Register array received via Modbus + Converted String + + + + Calculates the CRC16 for Modbus-RTU + + Byte buffer to send + Number of bytes to calculate CRC + First byte in buffer to start calculating CRC + + + + Read Discrete Inputs from Server device (FC2). + + First discrete input to read + Number of discrete Inputs to read + Boolean Array which contains the discrete Inputs + + + + Read Coils from Server device (FC1). + + First coil to read + Numer of coils to read + Boolean Array which contains the coils + + + + Read Holding Registers from Master device (FC3). + + First holding register to be read + Number of holding registers to be read + Int Array which contains the holding registers + + + + Read Input Registers from Master device (FC4). + + First input register to be read + Number of input registers to be read + Int Array which contains the input registers + + + + Write single Coil to Master device (FC5). + + Coil to be written + Coil Value to be written + + + + Write single Register to Master device (FC6). + + Register to be written + Register Value to be written + + + + Write multiple coils to Master device (FC15). + + First coil to be written + Coil Values to be written + + + + Write multiple registers to Master device (FC16). + + First register to be written + register Values to be written + + + + Read/Write Multiple Registers (FC23). + + First input register to read + Number of input registers to read + First input register to write + Values to write + Int Array which contains the Holding registers + + + + Close connection to Master Device. + + + + + Destructor - Close connection to Master Device. + + + + + Returns "TRUE" if Client is connected to Server and "FALSE" if not. In case of Modbus RTU returns if COM-Port is opened + + + + + Gets or Sets the IP-Address of the Server. + + + + + Gets or Sets the Port were the Modbus-TCP Server is reachable (Standard is 502). + + + + + Gets or Sets the UDP-Flag to activate Modbus UDP. + + + + + Gets or Sets the Unit identifier in case of serial connection (Default = 0) + + + + + Gets or Sets the Baudrate for serial connection (Default = 9600) + + + + + Gets or Sets the of Parity in case of serial connection + + + + + Gets or Sets the number of stopbits in case of serial connection + + + + + Gets or Sets the connection Timeout in case of ModbusTCP connection + + + + + Gets or Sets the serial Port + + + + + Gets or Sets the Filename for the LogFile + + + + + Exception to be thrown if serial port is not opened + + + + + Exception to be thrown if Connection to Modbus device failed + + + + + Exception to be thrown if Modbus Server returns error code "Function code not supported" + + + + + Exception to be thrown if Modbus Server returns error code "quantity invalid" + + + + + Exception to be thrown if Modbus Server returns error code "starting adddress and quantity invalid" + + + + + Exception to be thrown if Modbus Server returns error code "Function Code not executed (0x04)" + + + + + Exception to be thrown if CRC Check failed + + + + + Modbus Protocol informations. + + + + When making a server TCP listen socket, will listen to this IP address. + + + + Listen to all network interfaces. + + TCP port to listen + + + + Listen to a specific network interface. + + IP address of network interface to listen + TCP port to listen + + + + Modbus TCP Server. + + + + + When creating a TCP or UDP socket, the local IP address to attach to. + + + + + Gets or Sets the Filename for the LogFile + + + + + Store Log-Data in a File + + + + + Private constructor; Ensures the access of the class only via "instance" + + + + + Returns the instance of the class (singleton) + + instance (Singleton) + + + + Store message in Log-File + + Message to append to the Log-File + + + + Store message in Log-File including Timestamp + + Message to append to the Log-File + Timestamp to add to the same Row + + + + Gets or Sets the Filename to Store Strings in a File + + + + diff --git a/SLC1-N/bin/Debug/Guna.UI.dll b/SLC1-N/bin/Debug/Guna.UI.dll new file mode 100644 index 0000000..cc77d39 Binary files /dev/null and b/SLC1-N/bin/Debug/Guna.UI.dll differ diff --git a/SLC1-N/bin/Debug/Guna.UI2.dll b/SLC1-N/bin/Debug/Guna.UI2.dll new file mode 100644 index 0000000..e172ba3 Binary files /dev/null and b/SLC1-N/bin/Debug/Guna.UI2.dll differ diff --git a/SLC1-N/bin/Debug/HQMES.dll b/SLC1-N/bin/Debug/HQMES.dll new file mode 100644 index 0000000..66223a6 Binary files /dev/null and b/SLC1-N/bin/Debug/HQMES.dll differ diff --git a/SLC1-N/bin/Debug/HslCommunication.dll b/SLC1-N/bin/Debug/HslCommunication.dll new file mode 100644 index 0000000..82148f6 Binary files /dev/null and b/SLC1-N/bin/Debug/HslCommunication.dll differ diff --git a/SLC1-N/bin/Debug/LL28-V25111302-c.exe b/SLC1-N/bin/Debug/LL28-V25111302-c.exe new file mode 100644 index 0000000..98f4bcc Binary files /dev/null and b/SLC1-N/bin/Debug/LL28-V25111302-c.exe differ diff --git a/SLC1-N/bin/Debug/LL28-V25111302-c.exe.config b/SLC1-N/bin/Debug/LL28-V25111302-c.exe.config new file mode 100644 index 0000000..dcc85ee --- /dev/null +++ b/SLC1-N/bin/Debug/LL28-V25111302-c.exe.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/SLC1-N/bin/Debug/LL28-V25111302-c.pdb b/SLC1-N/bin/Debug/LL28-V25111302-c.pdb new file mode 100644 index 0000000..651d406 Binary files /dev/null and b/SLC1-N/bin/Debug/LL28-V25111302-c.pdb differ diff --git a/SLC1-N/bin/Debug/Logs/log_20251016.log b/SLC1-N/bin/Debug/Logs/log_20251016.log new file mode 100644 index 0000000..8996ae8 --- /dev/null +++ b/SLC1-N/bin/Debug/Logs/log_20251016.log @@ -0,0 +1,28 @@ +2025-10-16 13:58:51.555 [DEBUG] [MES] http://172.16.12.62:8084/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567891","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-16 13:58:51"} +2025-10-16 13:58:54.614 [DEBUG] [MES] 调用CreatePostHttpResponse超时: 操作超时 +2025-10-16 14:00:30.665 [DEBUG] [MES] http://172.16.12.62:8084/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567890","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-16 14:00:30"} +2025-10-16 14:00:33.677 [DEBUG] [MES] 调用CreatePostHttpResponse超时: 操作超时 +2025-10-16 15:53:53.051 [DEBUG] [MES] http://172.16.12.62:8084/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567891","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-16 15:53:53"} +2025-10-16 15:53:56.075 [DEBUG] [MES] 调用CreatePostHttpResponse超时: 操作超时 +2025-10-16 15:54:15.143 [DEBUG] [MES] http://172.16.12.62:8084/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567892","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-16 15:54:15"} +2025-10-16 15:54:18.163 [DEBUG] [MES] 调用CreatePostHttpResponse超时: 操作超时 +2025-10-16 15:54:32.565 [DEBUG] [MES] http://172.16.12.62:8084/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567893","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-16 15:54:32"} +2025-10-16 15:54:35.608 [DEBUG] [MES] 调用CreatePostHttpResponse超时: 操作超时 +2025-10-16 16:37:28.764 [DEBUG] [MES] http://172.16.12.62:8084/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567893","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-16 16:37:28"} +2025-10-16 16:37:31.851 [DEBUG] [MES] 调用CreatePostHttpResponse超时: 操作超时 +2025-10-16 16:37:40.365 [DEBUG] [MES] http://172.16.12.62:8084/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567894","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-16 16:37:40"} +2025-10-16 16:37:43.385 [DEBUG] [MES] 调用CreatePostHttpResponse超时: 操作超时 +2025-10-16 16:38:00.879 [DEBUG] [MES] http://172.16.12.62:8084/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567895","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-16 16:38:00"} +2025-10-16 16:38:03.898 [DEBUG] [MES] 调用CreatePostHttpResponse超时: 操作超时 +2025-10-16 16:39:46.522 [DEBUG] [MES] http://172.16.12.62:8084/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"12345678951234567895","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-16 16:39:46"} +2025-10-16 16:39:46.695 [DEBUG] [MES] http://172.16.12.62:8084/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567895","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-16 16:39:46"} +2025-10-16 16:39:49.567 [DEBUG] [MES] 调用CreatePostHttpResponse超时: 操作超时 +2025-10-16 16:39:49.712 [DEBUG] [MES] 调用CreatePostHttpResponse超时: 操作超时 +2025-10-16 16:43:59.780 [DEBUG] [MES] http://172.16.12.62:8084/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"12345678951234567895","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-16 16:43:59"} +2025-10-16 16:44:02.843 [DEBUG] [MES] 调用CreatePostHttpResponse超时: 操作超时 +2025-10-16 16:44:08.923 [DEBUG] [MES] http://172.16.12.62:8084/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567894","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-16 16:44:08"} +2025-10-16 16:44:11.948 [DEBUG] [MES] 调用CreatePostHttpResponse超时: 操作超时 +2025-10-16 16:52:29.050 [DEBUG] [MES] http://172.16.12.62:8084/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567894","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-16 16:52:29"} +2025-10-16 16:52:32.089 [DEBUG] [MES] 调用CreatePostHttpResponse超时: 操作超时 +2025-10-16 16:52:34.581 [DEBUG] [MES] http://172.16.12.62:8084/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567895","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-16 16:52:34"} +2025-10-16 16:52:37.601 [DEBUG] [MES] 调用CreatePostHttpResponse超时: 操作超时 diff --git a/SLC1-N/bin/Debug/Logs/log_20251022.log b/SLC1-N/bin/Debug/Logs/log_20251022.log new file mode 100644 index 0000000..7f4ae43 --- /dev/null +++ b/SLC1-N/bin/Debug/Logs/log_20251022.log @@ -0,0 +1,79 @@ +2025-10-22 16:33:58.408 [DEBUG] [MES] http://127.0.0.1:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567890","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 16:33:58"} +2025-10-22 16:34:48.830 [DEBUG] [MES] http://127.0.0.1:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567891","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 16:34:47"} +2025-10-22 16:49:02.683 [DEBUG] [MES] http://127.0.0.1:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567891","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 16:49:02"} +2025-10-22 16:51:04.715 [DEBUG] [MES] http://localhost:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567890","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 16:51:04"} +2025-10-22 16:51:04.760 [DEBUG] [MES] AutoVerificationTestSN 返回 value:{"d":"{\"Success\":\"TRUE\",\"PromptCode\":\"\",\"PromptMessage\":\"\"}"} + +2025-10-22 16:52:51.573 [DEBUG] [MES] http://localhost:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567892","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 16:52:51"} +2025-10-22 16:52:51.582 [DEBUG] [MES] AutoVerificationTestSN 返回 value:{"d":"{\"Success\":\"TRUE\",\"PromptCode\":\"\",\"PromptMessage\":\"\"}"} + +2025-10-22 16:53:49.957 [DEBUG] [MES] http://localhost:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567890","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 16:53:49"} +2025-10-22 16:53:50.048 [DEBUG] [MES] AutoVerificationTestSN 返回 value:{"d":"{\"Success\":\"TRUE\",\"PromptCode\":\"\",\"PromptMessage\":\"\"}"} + +2025-10-22 16:54:17.747 [DEBUG] [MES] http://localhost:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567891","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 16:54:17"} +2025-10-22 16:54:17.752 [DEBUG] [MES] AutoVerificationTestSN 返回 value:{"d":"{\"Success\":\"TRUE\",\"PromptCode\":\"\",\"PromptMessage\":\"\"}"} + +2025-10-22 16:56:25.201 [DEBUG] [MES] http://localhost:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567892","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 16:56:25"} +2025-10-22 16:56:25.210 [DEBUG] [MES] AutoVerificationTestSN 返回 value:{"d":"{\"Success\":\"TRUE\",\"PromptCode\":\"\",\"PromptMessage\":\"\"}"} + +2025-10-22 16:56:34.455 [DEBUG] [MES] http://localhost:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567891","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 16:56:34"} +2025-10-22 16:56:34.458 [DEBUG] [MES] AutoVerificationTestSN 返回 value:{"d":"{\"Success\":\"TRUE\",\"PromptCode\":\"\",\"PromptMessage\":\"\"}"} + +2025-10-22 16:56:44.850 [DEBUG] [MES] http://localhost:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567894","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 16:56:44"} +2025-10-22 16:56:44.854 [DEBUG] [MES] AutoVerificationTestSN 返回 value:{"d":"{\"Success\":\"TRUE\",\"PromptCode\":\"\",\"PromptMessage\":\"\"}"} + +2025-10-22 17:04:44.205 [DEBUG] [MES] http://localhost:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567894","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 17:04:44"} +2025-10-22 17:04:44.245 [DEBUG] [MES] AutoVerificationTestSN 返回 value:{"d":"{\"Success\":\"TRUE\",\"PromptCode\":\"\",\"PromptMessage\":\"\"}"} + +2025-10-22 17:05:05.312 [DEBUG] [MES] http://localhost:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567891","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 17:05:05"} +2025-10-22 17:05:05.315 [DEBUG] [MES] AutoVerificationTestSN 返回 value:{"d":"{\"Success\":\"TRUE\",\"PromptCode\":\"\",\"PromptMessage\":\"\"}"} + +2025-10-22 17:24:43.088 [DEBUG] [MES] http://localhost:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567891","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 17:24:43"} +2025-10-22 17:24:43.112 [DEBUG] [MES] AutoVerificationTestSN 返回 value:{"d":"{\"Success\":\"TRUE\",\"PromptCode\":\"\",\"PromptMessage\":\"\"}"} + +2025-10-22 17:24:47.042 [DEBUG] [MES] http://localhost:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567892","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 17:24:47"} +2025-10-22 17:24:47.073 [DEBUG] [MES] AutoVerificationTestSN 返回 value:{"d":"{\"Success\":\"TRUE\",\"PromptCode\":\"\",\"PromptMessage\":\"\"}"} + +2025-10-22 17:24:47.150 [ERROR] CH1入站 PLC写入10异常 ,行号 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 SLC1_N.Form1.b__118_0() 位置 D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\Form1.cs:行号 3977 +Exception: TimeoutException +Message: No Response from Modbus Slave +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 SLC1_N.Form1.b__118_0() 位置 D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\Form1.cs:行号 3977 +2025-10-22 17:24:48.760 [DEBUG] [MES] http://localhost:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567893","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 17:24:48"} +2025-10-22 17:24:48.763 [DEBUG] [MES] AutoVerificationTestSN 返回 value:{"d":"{\"Success\":\"TRUE\",\"PromptCode\":\"\",\"PromptMessage\":\"\"}"} + +2025-10-22 17:24:51.442 [DEBUG] [MES] http://localhost:43120/TestWebService.asmx/AutoVerificationTestSN, {"barcode":"1234567895","workorder":"1","partno":"1","station":"1","equipmentno":"1","computerName":"PC-20230419CFZS","computerIP":"192.168.1.90","intime":"2025-10-22 17:24:51"} +2025-10-22 17:24:51.444 [DEBUG] [MES] AutoVerificationTestSN 返回 value:{"d":"{\"Success\":\"TRUE\",\"PromptCode\":\"\",\"PromptMessage\":\"\"}"} + +2025-10-22 17:24:55.261 [ERROR] CH3入站 PLC写入10异常 ,行号 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 SLC1_N.Form1.b__120_0() 位置 D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\Form1.cs:行号 4162 +Exception: TimeoutException +Message: No Response from Modbus Slave +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 SLC1_N.Form1.b__120_0() 位置 D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\Form1.cs:行号 4162 +2025-10-22 17:24:59.321 [INFO] CH2入站 PLC写入10 +2025-10-22 17:25:03.340 [ERROR] CH4入站 PLC写入10异常 ,行号 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 SLC1_N.Form1.b__121_0() 位置 D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\Form1.cs:行号 4254 +Exception: TimeoutException +Message: No Response from Modbus Slave +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 EasyModbus.ModbusClient.WriteSingleRegister(Int32 startingAddress, Int32 value) + 在 SLC1_N.Form1.b__121_0() 位置 D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\Form1.cs:行号 4254 diff --git a/SLC1-N/bin/Debug/Logs/log_20251024.log b/SLC1-N/bin/Debug/Logs/log_20251024.log new file mode 100644 index 0000000..d9fe0d7 --- /dev/null +++ b/SLC1-N/bin/Debug/Logs/log_20251024.log @@ -0,0 +1,84 @@ +2025-10-24 11:26:22.377 [ERROR] PLC写入槽函数异常 ,行号 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 SLC1_N.Form1.Slot_PLC_WriteCoil(Int32 msg, Boolean mode) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\Form1.cs:行号 572 +Exception: TimeoutException +Message: No Response from Modbus Slave +Stack Trace: 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 SLC1_N.Form1.Slot_PLC_WriteCoil(Int32 msg, Boolean mode) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\Form1.cs:行号 572 +2025-10-24 11:26:30.400 [ERROR] PLC写入槽函数异常 ,行号 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 SLC1_N.Form1.Slot_PLC_WriteCoil(Int32 msg, Boolean mode) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\Form1.cs:行号 572 +Exception: TimeoutException +Message: No Response from Modbus Slave +Stack Trace: 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 SLC1_N.Form1.Slot_PLC_WriteCoil(Int32 msg, Boolean mode) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\Form1.cs:行号 572 +2025-10-24 11:26:38.438 [ERROR] PLC写入槽函数异常 ,行号 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 SLC1_N.Form1.Slot_PLC_WriteCoil(Int32 msg, Boolean mode) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\Form1.cs:行号 572 +Exception: TimeoutException +Message: No Response from Modbus Slave +Stack Trace: 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 SLC1_N.Form1.Slot_PLC_WriteCoil(Int32 msg, Boolean mode) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\Form1.cs:行号 572 +2025-10-24 11:27:08.599 [ERROR] PLC写入槽函数异常 ,行号 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 SLC1_N.Form1.Slot_PLC_WriteCoil(Int32 msg, Boolean mode) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\Form1.cs:行号 572 +Exception: TimeoutException +Message: No Response from Modbus Slave +Stack Trace: 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 SLC1_N.Form1.Slot_PLC_WriteCoil(Int32 msg, Boolean mode) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\Form1.cs:行号 572 +2025-10-24 11:28:35.356 [ERROR] PLC写入槽函数异常 ,行号 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 SLC1_N.Form1.Slot_PLC_WriteCoil(Int32 msg, Boolean mode) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\Form1.cs:行号 572 +Exception: TimeoutException +Message: No Response from Modbus Slave +Stack Trace: 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 SLC1_N.Form1.Slot_PLC_WriteCoil(Int32 msg, Boolean mode) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\Form1.cs:行号 572 +2025-10-24 11:29:58.673 [ERROR] PLC写入槽函数异常 ,行号 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 SLC1_N.Form1.Slot_PLC_WriteCoil(Int32 msg, Boolean mode) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\Form1.cs:行号 572 +Exception: TimeoutException +Message: No Response from Modbus Slave +Stack Trace: 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 SLC1_N.Form1.Slot_PLC_WriteCoil(Int32 msg, Boolean mode) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\Form1.cs:行号 572 +2025-10-24 11:33:25.209 [ERROR] PLC写入槽函数异常 ,行号 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 SLC1_N.Form1.Slot_PLC_WriteCoil(Int32 msg, Boolean mode) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\Form1.cs:行号 573 +Exception: TimeoutException +Message: No Response from Modbus Slave +Stack Trace: 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 EasyModbus.ModbusClient.WriteMultipleCoils(Int32 startingAddress, Boolean[] values) + 在 SLC1_N.Form1.Slot_PLC_WriteCoil(Int32 msg, Boolean mode) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\Form1.cs:行号 573 diff --git a/SLC1-N/bin/Debug/Logs/log_20251030.log b/SLC1-N/bin/Debug/Logs/log_20251030.log new file mode 100644 index 0000000..054c904 --- /dev/null +++ b/SLC1-N/bin/Debug/Logs/log_20251030.log @@ -0,0 +1,224 @@ +2025-10-30 09:05:33.931 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:34.437 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:34.964 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:35.469 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:35.995 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:36.523 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:37.050 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:37.555 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:38.060 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:38.565 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:39.070 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:39.575 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:40.080 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:40.585 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:41.111 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:41.617 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:42.122 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:42.628 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:43.134 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:43.640 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:44.165 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:44.670 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:45.176 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:45.723 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:46.250 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:46.755 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:47.260 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1437 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +2025-10-30 09:05:47.766 [ERROR] CH1状态机更新错误 ,行号 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 +Exception: ConnectionException +Message: connection error +Stack Trace: 在 EasyModbus.ModbusClient.WriteSingleCoil(Int32 startingAddress, Boolean value) + 在 SLC1_N.Form1.CH1machine() 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1453 + 在 SLC1_N.Form1.RunMachine(CancellationToken token) 位置 D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\Form1.cs:行号 1018 diff --git a/SLC1-N/bin/Debug/NetWorkHelper.dll b/SLC1-N/bin/Debug/NetWorkHelper.dll new file mode 100644 index 0000000..2033eec Binary files /dev/null and b/SLC1-N/bin/Debug/NetWorkHelper.dll differ diff --git a/SLC1-N/bin/Debug/NetWorkHelper.pdb b/SLC1-N/bin/Debug/NetWorkHelper.pdb new file mode 100644 index 0000000..982d094 Binary files /dev/null and b/SLC1-N/bin/Debug/NetWorkHelper.pdb differ diff --git a/SLC1-N/bin/Debug/Newtonsoft.Json.dll b/SLC1-N/bin/Debug/Newtonsoft.Json.dll new file mode 100644 index 0000000..7af125a Binary files /dev/null and b/SLC1-N/bin/Debug/Newtonsoft.Json.dll differ diff --git a/SLC1-N/bin/Debug/Newtonsoft.Json.xml b/SLC1-N/bin/Debug/Newtonsoft.Json.xml new file mode 100644 index 0000000..008e0ca --- /dev/null +++ b/SLC1-N/bin/Debug/Newtonsoft.Json.xml @@ -0,0 +1,11305 @@ + + + + Newtonsoft.Json + + + + + Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Initializes a new instance of the class. + + The to write to. + + + + Initializes a new instance of the class. + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a F# discriminated union type to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an Entity Framework to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + The default value is false. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets the naming strategy used to resolve how enum text is written. + + The naming strategy used to resolve how enum text is written. + + + + Gets or sets a value indicating whether integer values are allowed when serializing and deserializing. + The default value is true. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + true if the written enum text will be camel case; otherwise, false. + + + + Initializes a new instance of the class. + + The naming strategy used to resolve how enum text is written. + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from Unix epoch time + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attribute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Gets or sets a value indicating whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + true if special characters are encoded; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + true if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + The default JSON name table implementation. + + + + + Initializes a new instance of the class. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Adds the specified string into name table. + + The string to add. + This method is not thread-safe. + The resolved string. + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + The minimum required length of the array. The returned array may be longer. + The rented array from the pool. This array must be returned when it is no longer needed. + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, when returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, when returns false). + + + + Instructs the how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the to a JSON string. + + The node to serialize. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to serialize. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Serializes the to a JSON string. + + The node to convert to JSON. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to convert to JSON. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. If there is no existing value then null will be used. + The existing value has a value. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Gets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + + + + + Initializes a new instance of the class. + + Type of the . + + + + Initializes a new instance of the class. + + Type of the . + Parameter list to use when constructing the . Can be null. + + + + Represents a collection of . + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Initializes a new instance of the class. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Base class for a table of atomized string objects. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to always serialize the member with the specified name. + + + + + Gets or sets the type used when serializing the property's collection items. + + The collection's items type. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously skips the children of the current token. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Specifies the state of the reader. + + + + + A read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true to close the source when this reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Reads the next JSON token from the source. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + A flag indicating whether the position index inside an array should be updated. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the reader's state to . + If is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is . + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + The default value is false. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance. + The will not use default settings + from . + + + A new instance. + The will not use default settings + from . + + + + + Creates a new instance using the specified . + The will not use default settings + from . + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings + from . + + + + + Creates a new instance. + The will use default settings + from . + + + A new instance. + The will use default settings + from . + + + + + Creates a new instance using the specified . + The will use default settings + from as well as the specified . + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings + from as well as the specified . + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Specifies the settings on a object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + The default value is . + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets the used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets a function that creates the used by the serializer when resolving references. + + A function that creates the used by the serializer when resolving references. + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + The default value is false. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Initializes a new instance of the class with the specified . + + The containing the JSON data to read. + + + + Gets or sets the reader's property name table. + + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how many s to write for each level in the hierarchy when is set to . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the class using the specified . + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying . + + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides validation. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a []. + + + A [] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously ets the state of the . + + The being written. + The value being written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true to close the destination when this writer is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If is set to true, the destination is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current JSON object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Sets the state of the . + + The being written. + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a with type . + + + + + Specifies how duplicate property names are handled when loading JSON. + + + + + Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used. + + + + + Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used. + + + + + Throw a when a duplicate property is encountered. + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a collection of objects. + + The type of token. + + + + Gets the of with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads an from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + + + Returns an enumerator that iterates through the collection. + + + A of that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + + + + Removes all items from the . + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + + + Represents a JSON constructor. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a token that can contain other tokens. + + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Occurs when the items list of the collection has changed, or the collection is reset. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An of containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An of containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates a that can be used to add tokens to the . + + A that is ready to have content written to it. + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of objects. + + The type of token. + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the of with the specified key. + + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Represents a JSON object. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Occurs when a property value is changing. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets the node type for this . + + The type. + + + + Gets an of of this object's properties. + + An of of this object's properties. + + + + Gets a with the specified name. + + The property name. + A with the specified name or null. + + + + Gets the with the specified name. + The exact name will be searched for first and if no matching property is found then + the will be used to match a property. + + The property name. + One of the enumeration values that specifies how the strings will be compared. + A matched with the specified name or null. + + + + Gets a of of this object's property values. + + A of of this object's property values. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + true if the JSON object has the specified property name; otherwise, false. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries to get the with the specified property name. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Represents a JSON property. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. + When the or + + methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents a raw JSON string. + + + + + Asynchronously creates an instance of with the content of the reader's current token. + + The reader. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns an instance of with the content of the reader's current token. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + The default value is . + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + The default value is . + + The JSON line info handling. + + + + Gets or sets how duplicate property names in JSON objects are handled when loading JSON. + The default value is . + + The JSON duplicate property name handling. + + + + Specifies the settings used when merging JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Gets or sets the comparison used to match property names while merging. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + The comparison used to match property names while merging. + + + + Specifies the settings used when selecting JSON. + + + + + Gets or sets a timeout that will be used when executing regular expressions. + + The timeout that will be used when executing regular expressions. + + + + Gets or sets a flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + A flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + + + Represents an abstract JSON token. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Writes this token to a asynchronously. + + A into which this method will write. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + A collection of s which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Creates a for this token. + + A that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object. + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + Creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A , or null. + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + The used to select tokens. + A . + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + The used to select tokens. + An of that contains the selected elements. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the at the reader's current position. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Initializes a new instance of the class. + + The token to read from. + The initial path of the token. It is prepended to the returned . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying . + + + + + Closes this writer. + If is set to true, the JSON is auto-completed. + + + Setting to true has no additional effect, since the underlying is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a value. + An error will be raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a undefined value. + + A undefined value. + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a . + + A into which this method will write. + A collection of s which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not of the same type as this instance. + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). + + A flag indicating whether the value can not equal the number defined by the minimum attribute (). + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). + + A flag indicating whether the value can not equal the number defined by the maximum attribute (). + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains JSON Schema. + + A that contains JSON Schema. + A populated from the string that contains JSON Schema. + + + + Load a from a string that contains JSON Schema using the specified . + + A that contains JSON Schema. + The resolver. + A populated from the string that contains JSON Schema. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + + Resolves from an id. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + + The value types allowed by the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + A camel case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolve a for a given . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. + + + true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. + + + true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer that writes to the application's instances. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Used by to resolve a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + The that will be used to filter the trace messages passed to the writer. + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a used by the . + + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + true if the creator has a parameter with the collection values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Handles serialization callback events. + + The object that raised the callback event. + The streaming context. + + + + Handles serialization error callback events. + + The object that raised the callback event. + The streaming context. + The error context. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets the internally resolved for the contract's type. + This converter is used as a fallback converter when no other converter is resolved. + Setting will always override this converter. + + + + + Gets or sets all methods called immediately after deserialization of the object. + + The methods called immediately after deserialization of the object. + + + + Gets or sets all methods called during deserialization of the object. + + The methods called during deserialization of the object. + + + + Gets or sets all methods called after serialization of the object graph. + + The methods called after serialization of the object graph. + + + + Gets or sets all methods called before serialization of the object. + + The methods called before serialization of the object. + + + + Gets or sets all method called when an error is thrown during the serialization of the object. + + The methods called when an error is thrown during the serialization of the object. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + true if the default object creator is non-public; otherwise, false. + + + + Contract details for a used by the . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + true if the creator has a parameter with the dictionary values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets the object's properties. + + The object's properties. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object constructor. + + The object constructor. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets a value indicating whether has a value specified. + + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the type described by the argument. + + The type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + A kebab case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Initializes a new instance of the class. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Returns an enumeration of the most recent trace messages. + + An enumeration of the most recent trace messages. + + + + Returns a of the most recent trace messages. + + + A of the most recent trace messages. + + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + A flag indicating whether the property has had a name explicitly specified. + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Hash code calculation + + + + + + Object equality implementation + + + + + + + Compare to another NamingStrategy + + + + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + The instance to get attributes for. This parameter should be a , , or . + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. + + + + + Specifies type name handling options for the . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON + you must specify a root type object with + or . + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls result in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + Specifies that an output will not be null even if the corresponding type allows it. + + + Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + + Gets the return value condition. + + + Specifies that an output may be null even if the corresponding type disallows it. + + + Specifies that null is allowed as an input even if the corresponding type disallows it. + + + + Specifies that the method will not return if the associated Boolean parameter is passed the specified value. + + + + + Initializes a new instance of the class. + + + The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to + the associated parameter matches this value. + + + + Gets the condition parameter value. + + + diff --git a/SLC1-N/bin/Debug/Spire.XLS.dll b/SLC1-N/bin/Debug/Spire.XLS.dll new file mode 100644 index 0000000..60d90ba Binary files /dev/null and b/SLC1-N/bin/Debug/Spire.XLS.dll differ diff --git a/SLC1-N/bin/Debug/SunnyUI.Common.dll b/SLC1-N/bin/Debug/SunnyUI.Common.dll new file mode 100644 index 0000000..546e7a7 Binary files /dev/null and b/SLC1-N/bin/Debug/SunnyUI.Common.dll differ diff --git a/SLC1-N/bin/Debug/SunnyUI.dll b/SLC1-N/bin/Debug/SunnyUI.dll new file mode 100644 index 0000000..30e3477 Binary files /dev/null and b/SLC1-N/bin/Debug/SunnyUI.dll differ diff --git a/SLC1-N/bin/Debug/TCP/ITcpClient.Designer.cs b/SLC1-N/bin/Debug/TCP/ITcpClient.Designer.cs new file mode 100644 index 0000000..7fb78dc --- /dev/null +++ b/SLC1-N/bin/Debug/TCP/ITcpClient.Designer.cs @@ -0,0 +1,36 @@ +namespace NetWorkHelper.TCP +{ + partial class ITcpClient + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/SLC1-N/bin/Debug/TCP/ITcpClient.cs b/SLC1-N/bin/Debug/TCP/ITcpClient.cs new file mode 100644 index 0000000..1338fba --- /dev/null +++ b/SLC1-N/bin/Debug/TCP/ITcpClient.cs @@ -0,0 +1,624 @@ +using NetWorkHelper.ICommond; +using NetWorkHelper.IModels; +using System; +using System.ComponentModel; +using System.Net; +using System.Net.Sockets; +using System.Threading; + +namespace NetWorkHelper.TCP +{ + public partial class ITcpClient : Component + { + + + //#region 读取ini文件 + //[DllImport("kernel32")] + //private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); + + + ///// + ///// 读出INI文件 + ///// + ///// 项目名称(如 [TypeName] ) + ///// 键 + //public string IniReadValue(string Section, string Key) + //{ + // StringBuilder temp = new StringBuilder(500); + // int i = GetPrivateProfileString(Section, Key, "", temp, 500, System.AppDomain.CurrentDomain.BaseDirectory + "MESConfig.ini"); + + // return temp.ToString(); + //} + + static int connecttimeout = 4000; + static int receivetimeout = 2000; + //static int sleeptime; + static int timeoutsend = 3; + //public void ReadINI() + //{ + // //string dialog; + // //dialog = System.AppDomain.CurrentDomain.BaseDirectory + "MESConfig.ini"; + // //ControlINI mesconfig = new ControlINI(dialog); + + // //连接设置 + // connecttimeout = Convert.ToInt32(IniReadValue("MESConfig", "connectTimeout")); ; + // receivetimeout = Convert.ToInt32(IniReadValue("MESConfig", "receiveTimeout")); + // _reConnectTime = Convert.ToInt32(IniReadValue("MESConfig", "sleepTime")); + + // timeoutsend = Convert.ToInt32(IniReadValue("MESConfig", "timeoutSend"))+1; + + + + //} + //#endregion + + + + + #region 构造函数 + public ITcpClient() + { + //ReadINI(); + InitializeComponent(); + } + + public ITcpClient(IContainer container) + { + container.Add(this); + + InitializeComponent(); + } + #endregion + + #region 变量 + + public IClient Client = null; + private Thread _startThread = null; + private int _reConnectCount = 0;//重连计数 + private int _maxConnectCount => timeoutsend; + private ConncetType _conncetType = ConncetType.Conncet; + private bool _isReconnect = true;//是否开启断开重连 + private int _reConnectTime;//重连间隔时间 + private bool _isStart = false;// 是否启动 + private System.Timers.Timer _timer = new System.Timers.Timer(); // 连接后两秒未成功重连 + + //bool timeoutreconnected=true;//连接超时的重连 + //bool datareconnected = true;//接收不到心跳包的重连 + + #endregion + + #region 属性 + /// + /// 服务端IP + /// + private string _serverip = "127.0.0.1"; + [Description("服务端IP")] + [Category("TCP客户端")] + public string ServerIp + { + set { _serverip = value; } + get { return _serverip; } + } + /// + /// 服务端监听端口 + /// + private int _serverport = 5000; + [Description("服务端监听端口")] + [Category("TCP客户端")] + public int ServerPort + { + set { _serverport = value; } + get { return _serverport; } + } + + /// + /// 网络端点 + /// + private IPEndPoint _ipEndPoint = null; + [Description("网络端点,IP+PORT")] + [Category("TCP客户端")] + internal IPEndPoint IpEndPoint + { + get + { + try + { + IPAddress ipAddress = null; + ipAddress = string.IsNullOrEmpty(ServerIp) + ? IPAddress.Any + : IPAddress.Parse(CommonMethod.HostnameToIp(ServerIp)); + + _ipEndPoint = new IPEndPoint(ipAddress, ServerPort); + } + catch + { + } + return _ipEndPoint; + } + } + + /// + /// 是否重连 + /// + [Description("是否重连")] + [Category("TCP客户端")] + public bool IsReconnection + { + set { _isReconnect = value; } + get { return _isReconnect; } + } + + /// + /// 设置断开重连时间间隔单位(毫秒)(默认3000毫秒) + /// + [Description("设置断开重连时间间隔单位(毫秒)(默认3000毫秒)")] + [Category("TCP客户端")] + public int ReConnectionTime + { + get { return _reConnectTime; } + set { _reConnectTime = value; } + } + [Description("设置断开重连时间间隔单位(毫秒)(默认3000毫秒)")] + [Category("TCP客户端"), Browsable(false)] + public bool IsStart + { + get { return _isStart; } + set { _isStart = value; } + } + #endregion + + #region 启动停止方法 + + private readonly object _threadLock = new object(); + public void StartConnect() + { + if (IsStart) + return; + lock (_threadLock) + { + if (_startThread == null || !_startThread.IsAlive) + { + _startThread = new Thread(StartThread); + _startThread.IsBackground = true; + _startThread.Start(); + } + } + } + + /// + /// 启动客户端基础的一个线程 + /// + private void StartThread() + { + if (_conncetType == ConncetType.ReConncet && IsReconnection && !IsStart) //如果是重连的延迟N秒 + { + Thread.Sleep(ReConnectionTime); + + if (IsReconnection) + { + TcpClientStateInfo(string.Format("正在重连..."), SocketState.Reconnection); + } + try + { + + _timer.Interval = connecttimeout; + _timer.Elapsed += Timer_Elapsed; + _timer.AutoReset = false; + _timer.Start(); + + + Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + socket.ReceiveTimeout = receivetimeout; + socket.SendTimeout = 1000; + socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, true); + socket.BeginConnect(IpEndPoint, new AsyncCallback(AcceptCallback), socket); + //timeoutreconnected = true;//连接超时的重连 + //datareconnected = true;//接收不到心跳包的重连 + + } + catch (Exception ex) + { + _timer.Stop(); + TcpClientErrorMsg(string.Format("连接服务器失败,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + if (IsReconnection) + { + Reconnect(); + } + } + } + else if (!IsStart) + { + if (IsReconnection) + { + TcpClientStateInfo("正在连接服务器... ...", SocketState.Connecting); + try + { + + _timer.Interval = connecttimeout; + _timer.Elapsed += Timer_Elapsed; + _timer.AutoReset = false; + _timer.Start(); + + + Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + socket.ReceiveTimeout = receivetimeout; + socket.SendTimeout = 1000; + socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, true); + socket.BeginConnect(IpEndPoint, new AsyncCallback(AcceptCallback), socket); + //timeoutreconnected = true;//连接超时的重连 + //datareconnected = true;//接收不到心跳包的重连 + + } + catch (Exception ex) + { + _timer.Stop(); + TcpClientErrorMsg(string.Format("连接服务器失败,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + if (IsReconnection) + { + Reconnect(); + } + } + } + } + + + } + + + //连接超时则重新连接 + private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + if (IsReconnection) + { + //datareconnected = false;//接收不到心跳包的重连 + TcpClientErrorMsg(string.Format("连接服务器失败")); + + //if (Client != null) + //{ + // ShutdownClient(Client); + // Client.WorkSocket.Close(); + //} + Reconnect(); + + //reconnected = false; + } + } + + + + /// + /// 当连接服务器之后的回调函数 + /// + /// TcpClient + private void AcceptCallback(IAsyncResult ar) + { + _timer.Stop(); + + try + { + IsStart = true; + + Socket socket = (Socket)ar.AsyncState; + socket.EndConnect(ar); + + Client = new IClient(socket); + Client.WorkSocket.BeginReceive(Client.BufferInfo.ReceivedBuffer, 0, Client.BufferInfo.ReceivedBuffer.Length, 0, new AsyncCallback(ReadCallback), Client); + + _conncetType = ConncetType.Conncet; + TcpClientStateInfo(string.Format("已连接服务器"), SocketState.Connected); + _reConnectCount = 0; + //timeoutreconnected = false;//连接超时的重连 + //datareconnected = false;//接收不到心跳包的重连 + + + } + catch (SocketException ex) + { + IsStart = false; + string msg = ex.Message; + if (ex.NativeErrorCode.Equals(10060)) + { + //无法连接目标主机 + msg = string.Format("{0} 无法连接: error code {1}!", "", ex.NativeErrorCode); + } + else if (ex.NativeErrorCode.Equals(10061)) + { + msg = string.Format("{0} 主动拒绝正在重连: error code {1}!", "", ex.NativeErrorCode); + } + else if (ex.NativeErrorCode.Equals(10053)) + { + //读写时主机断开 + msg = string.Format("{0} 主动断开连接: error code {1}! ", "", ex.NativeErrorCode); + } + else + { + //其他错误 + msg = string.Format("Disconnected: error code {0}!", ex.NativeErrorCode); + } + + if (IsReconnection) + { + TcpClientErrorMsg(string.Format("连接服务器失败,错误原因:{0}", msg)); + + Reconnect(); + } + } + catch (Exception ex) + { + } + } + #endregion + + #region 登录篇 + /// + /// 重连模块 + /// + private void Reconnect() + { + if (Client != null) + { + ShutdownClient(Client); + Client?.WorkSocket?.Close(); + Client = null; + } + + if (_conncetType == ConncetType.Conncet) + { + TcpClientStateInfo(string.Format("已断开服务器{0}", IsReconnection ? ",准备重连" : ""), SocketState.Disconnect); + } + + if (!IsReconnection) + { + return; + } + + _reConnectCount++;//每重连一次重连的次数加1 + + + if (_conncetType == ConncetType.Conncet) + { + _conncetType = ConncetType.ReConncet; + + //CommonMethod.EventInvoket(() => { ReconnectionStart(); }); + } + + _isStart = false; + + if (_startThread != null) + { + try + { + // 检查线程状态,避免重复启动 + if (_startThread.IsAlive) + { + // 给线程一个机会正常结束 + if (!_startThread.Join(500)) // 等待500毫秒 + { + try + { + _startThread.Abort(); // 强制终止 + } + catch (ThreadStateException) + { + // 线程可能已经终止,忽略此异常 + } + } + } + } + catch (Exception ex) + { + // 记录异常但不阻止重连 + Console.WriteLine($"清理线程时异常: {ex.Message}"); + } + finally + { + _startThread = null; // 确保设置为null + } + } + + if (_reConnectCount < _maxConnectCount && IsReconnection) + { + StartConnect(); + } + else + { + _timer.Stop(); + StopConnect(); + this.IsReconnection = false; + _reConnectCount = 0; + TcpClientStateInfo(string.Format("超过最大重连数,已断开服务器连接"), SocketState.Disconnect); + } + + } + #endregion + + #region 发送数据 + public void SendData(byte[] data) + { + try + { + if (data == null || data.Length == 0) + { + return; + } + + if (Client != null && Client.WorkSocket != null && Client.WorkSocket.Connected) + { + //异步发送数据 + //cModel.ClientSocket.Send(data); + Client.WorkSocket.BeginSend(data, 0, data.Length, 0, new AsyncCallback(SendCallback), Client); + //timeoutreconnected = false;//连接超时的重连 + //datareconnected = true;//接收不到心跳包的重连 + } + } + catch (SocketException ex) + { + TcpClientErrorMsg(string.Format("向服务端发送数据时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + } + } + + public bool IsConnected + { + get + { + try + { + return Client != null && + Client.WorkSocket != null && + Client.WorkSocket.Connected; + } + catch + { + return false; + } + } + } + + /// + /// 发送完数据之后的回调函数 + /// + /// Clicent + private void SendCallback(IAsyncResult ar) + { + IClient iClient = (IClient)ar.AsyncState; + if (iClient == null) + return; + Socket handler = iClient.WorkSocket; + try + { + int bytesSent = handler.EndSend(ar); + } + catch (Exception ex) + { + TcpClientErrorMsg(string.Format("发送数据后回调时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + } + } + #endregion + + #region 接收数据 + /// + /// 当接收到数据之后的回调函数 + /// + /// + private void ReadCallback(IAsyncResult ar) + { + if (Client == null || !_isStart) + return; + Socket handler = Client.WorkSocket; + try + { + int bytesRead = handler.EndReceive(ar); + if (bytesRead > 0 && bytesRead <= Client.BufferInfo.ReceivedBuffer.Length) + { + byte[] bytes = new byte[bytesRead]; + Array.Copy(Client.BufferInfo.ReceivedBuffer, 0, bytes, 0, bytesRead); + TcpClientRecevice(bytes); + handler.BeginReceive(Client.BufferInfo.ReceivedBuffer, 0, Client.BufferInfo.ReceivedBuffer.Length, + 0, new AsyncCallback(ReadCallback), Client); + + } + else + { + if (IsReconnection) + { + Reconnect(); + } + } + } + catch (Exception ex) + { + //if (datareconnected) + //{ + // timeoutreconnected = false;//连接超时的重连 + ////IsStart = false; + StopConnect(); + + TcpClientErrorMsg(string.Format("接收数据失败,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + + + Reconnect(); + + //} + + } + } + #endregion + + #region 断开篇 + /// + /// 关闭相连的scoket以及关联的StateObject,释放所有的资源 + /// + public void StopConnect() + { + IsStart = false; + if (Client != null) + { + var workSocket = Client.WorkSocket; // 提前保存引用 + ShutdownClient(Client); + workSocket?.Close(); + //if (Client.WorkSocket != null) + //{ + // Client.WorkSocket.Close(); + // //Client.WorkSocket?.Dispose(); + //} + + } + _conncetType = ConncetType.Conncet; + _reConnectCount = 0;//前面三个初始化 + } + public void ShutdownClient(IClient iClient) + { + try + { + iClient.WorkSocket.Shutdown(SocketShutdown.Both); + } + catch + { + } + } + #endregion + + #region 事件 + #region OnRecevice接收数据事件 + [Description("接收数据事件")] + [Category("TcpClient事件")] + public event EventHandler OnRecevice; + protected virtual void TcpClientRecevice(byte[] data) + { + if (OnRecevice != null) + CommonMethod.EventInvoket(() => { OnRecevice(this, new TcpClientReceviceEventArgs(data)); }); + + } + #endregion + + #region OnErrorMsg返回错误消息事件 + [Description("返回错误消息事件")] + [Category("TcpClient事件")] + public event EventHandler OnErrorMsg; + protected virtual void TcpClientErrorMsg(string msg) + { + if (OnErrorMsg != null) + CommonMethod.EventInvoket(() => { OnErrorMsg(this, new TcpClientErrorEventArgs(msg)); }); + } + #endregion + + #region OnStateInfo连接状态改变时返回连接状态事件 + [Description("连接状态改变时返回连接状态事件")] + [Category("TcpClient事件")] + public event EventHandler OnStateInfo; + protected virtual void TcpClientStateInfo(string msg, SocketState state) + { + if (OnStateInfo != null) + CommonMethod.EventInvoket(() => { OnStateInfo(this, new TcpClientStateEventArgs(msg, state)); }); + } + #endregion + #endregion + } + + public enum ConncetType + { + Conncet, + ReConncet, + DisConncet + } +} diff --git a/SLC1-N/bin/Debug/config.json b/SLC1-N/bin/Debug/config.json new file mode 100644 index 0000000..1f57149 --- /dev/null +++ b/SLC1-N/bin/Debug/config.json @@ -0,0 +1,350 @@ +{ + "ch1AutoConnect": false, + "ch2AutoConnect": false, + "ch1ipaddress": "192.168.1.131", + "SerialPort_CH1BaudRate": "9600", + "SerialPort_CH1PortName": "COM21", + "SerialPort_CH2BaudRate": "9600", + "SerialPort_CH2PortName": "COM31", + "Saoma_IP1": "127.0.0.1", + "Saoma_Port1": "51111", + "Saoma_IP2": "127.0.0.1", + "Saoma_Port2": "52222", + "IsDebugEnabled": false, + "IsErrorEnabled": false, + "IsInfoEnabled": false, + "IsWarningEnabled": false, + "IsXXXEnabled": false, + "CodeScanner": "SerialPort", + "CodeLength1": "12", + "CodeLength2": "12", + "ch2ipaddress": "192.168.1.131", + "1params_number1": "1", + "1paraname1": "产品1-1", + "1fulltime1": "5", + "1balantime1": "5", + "1testtime11": "5", + "1exhausttime1": "3", + "1delaytime11": "0", + "1delaytime21": "0", + "1relievedelay1": "0", + "1evolume1": "0", + "1fptoplimit1": "200", + "1fplowlimit1": "-50", + "1balanpremax1": "9999", + "1balanpremin1": "-9999", + "1leaktoplimit1": "9999", + "1leaklowlimit1": "-9999", + "1punit1": 1, + "1lunit1": 4, + "1bee1": false, + "1params_number2": "2", + "1paraname2": "产品1-2", + "1fulltime2": "12", + "1balantime2": "22", + "1testtime12": "32", + "1exhausttime2": "42", + "1delaytime12": "0", + "1delaytime22": "0", + "1relievedelay2": "0", + "1evolume2": "82", + "1fptoplimit2": "92", + "1fplowlimit2": "102", + "1balanpremax2": "112", + "1balanpremin2": "122", + "1leaktoplimit2": "132", + "1leaklowlimit2": "142", + "1punit2": 1, + "1lunit2": 1, + "1bee2": "False", + "2params_number1": "1", + "2paraname1": "产品2-1", + "2fulltime1": "8", + "2balantime1": "8", + "2testtime11": "8", + "2exhausttime1": "2", + "2delaytime11": "0", + "2delaytime21": "0", + "2relievedelay1": "0", + "2evolume1": "84", + "2fptoplimit1": "5000", + "2fplowlimit1": "-6000", + "2balanpremax1": "2000", + "2balanpremin1": "-2000", + "2leaktoplimit1": "3000", + "2leaklowlimit1": "-2000", + "2punit1": 1, + "2lunit1": 1, + "2bee1": false, + "2params_number2": "2", + "2paraname2": "产品2-2", + "2fulltime2": "14", + "2balantime2": "24", + "2testtime12": "34", + "2exhausttime2": "44", + "2delaytime12": "0", + "2delaytime22": "0", + "2relievedelay2": "0", + "2evolume2": "84", + "2fptoplimit2": "94", + "2fplowlimit2": "104", + "2balanpremax2": "114", + "2balanpremin2": "124", + "2leaktoplimit2": "134", + "2leaklowlimit2": "144", + "2punit2": 1, + "2lunit2": 1, + "2bee2": "False", + "TXT": true, + "Excel": false, + "CSV": false, + "FilePath": "D:\\桌面\\测试记录\\华贝-正负压28", + "MESswitch": false, + "CodeLength3": "12", + "CodeLength4": "12", + "ch3AutoConnect": false, + "ch4AutoConnect": false, + "ch3ipaddress": "192.168.1.131", + "ch4ipaddress": "192.168.1.131", + "mes_urlip": "localhost", + "mes_urlport": "43120", + "mes_partno": "1", + "mes_station": "1", + "mes_workorder": "1", + "mes_equipmentno": "1", + "mes_fixturecode": "1", + "mes_plan": "1", + "3params_number1": "1", + "3paraname1": "0", + "3fulltime1": "0", + "3balantime1": "0", + "3testtime11": "0", + "3exhausttime1": "0", + "3delaytime11": "0", + "3delaytime21": "0", + "3relievedelay1": "0", + "3evolume1": "0", + "3fptoplimit1": "0", + "3fplowlimit1": "0", + "3balanpremax1": "0", + "3balanpremin1": "0", + "3leaktoplimit1": "0", + "3leaklowlimit1": "0", + "3punit1": 0, + "3lunit1": 0, + "3bee1": false, + "PLC_PortName": "COM33", + "PLC_BaudRate": "9600", + "chk_ch1saoma": true, + "chk_ch2saoma": true, + "chk_ch3saoma": true, + "chk_ch4saoma": true, + "chk_ContinueTest": true, + "rbt_VolumeMode": false, + "rbt_OpeningMode": true, + "rbt_PpressureMode": true, + "rbt_NpressureMode": false, + "tb_ContinueTestCount": 3, + "1Nparams_number1": "1", + "1Nparaname1": "产品1负压", + "1Nfulltime1": "1", + "1Nbalantime1": "5", + "1Ntesttime11": "5", + "1Nexhausttime1": "1", + "1Ndelaytime11": "1", + "1Ndelaytime21": "1", + "1Nrelievedelay1": "0", + "1Nevolume1": "5", + "1Nfptoplimit1": "999", + "1Nfplowlimit1": "-999", + "1Nbalanpremax1": "999", + "1Nbalanpremin1": "-999", + "1Nleaktoplimit1": "999", + "1Nleaklowlimit1": "-999", + "1Npunit1": 1, + "1Nlunit1": 1, + "1Nbee1": false, + "1Pparams_number1": "1", + "1Pparaname1": "产品1正压", + "1Pfulltime1": "1", + "1Pbalantime1": "2", + "1Ptesttime11": "2", + "1Pexhausttime1": "1", + "1Pdelaytime11": "1", + "1Pdelaytime21": "1", + "1Prelievedelay1": "0", + "1Pevolume1": "5", + "1Pfptoplimit1": "999", + "1Pfplowlimit1": "-999", + "1Pbalanpremax1": "999", + "1Pbalanpremin1": "-999", + "1Pleaktoplimit1": "999", + "1Pleaklowlimit1": "-999", + "1Ppunit1": 1, + "1Plunit1": 1, + "1Pbee1": false, + "2Pparams_number1": "1", + "2Pparaname1": "产品2正压", + "2Pfulltime1": "1", + "2Pbalantime1": "2", + "2Ptesttime11": "2", + "2Pexhausttime1": "1", + "2Pdelaytime11": "1", + "2Pdelaytime21": "1", + "2Prelievedelay1": "0", + "2Pevolume1": "5", + "2Pfptoplimit1": "999", + "2Pfplowlimit1": "-999", + "2Pbalanpremax1": "999", + "2Pbalanpremin1": "-999", + "2Pleaktoplimit1": "999", + "2Pleaklowlimit1": "-999", + "2Ppunit1": 1, + "2Plunit1": 1, + "2Pbee1": false, + "2Nparams_number1": "1", + "2Nparaname1": "产品2负压", + "2Nfulltime1": "1", + "2Nbalantime1": "5", + "2Ntesttime11": "5", + "2Nexhausttime1": "1", + "2Ndelaytime11": "1", + "2Ndelaytime21": "1", + "2Nrelievedelay1": "0", + "2Nevolume1": "5", + "2Nfptoplimit1": "999", + "2Nfplowlimit1": "-999", + "2Nbalanpremax1": "999", + "2Nbalanpremin1": "-999", + "2Nleaktoplimit1": "999", + "2Nleaklowlimit1": "-999", + "2Npunit1": 1, + "2Nlunit1": 1, + "2Nbee1": false, + "3Pparams_number1": "1", + "3Pparaname1": "产品3正压", + "3Pfulltime1": "1", + "3Pbalantime1": "2", + "3Ptesttime11": "2", + "3Pexhausttime1": "1", + "3Pdelaytime11": "1", + "3Pdelaytime21": "1", + "3Prelievedelay1": "0", + "3Pevolume1": "5", + "3Pfptoplimit1": "999", + "3Pfplowlimit1": "-999", + "3Pbalanpremax1": "999", + "3Pbalanpremin1": "-999", + "3Pleaktoplimit1": "999", + "3Pleaklowlimit1": "-999", + "3Ppunit1": 1, + "3Plunit1": 1, + "3Pbee1": false, + "3Nparams_number1": "1", + "3Nparaname1": "产品3负压", + "3Nfulltime1": "1", + "3Nbalantime1": "5", + "3Ntesttime11": "5", + "3Nexhausttime1": "1", + "3Ndelaytime11": "1", + "3Ndelaytime21": "1", + "3Nrelievedelay1": "0", + "3Nevolume1": "5", + "3Nfptoplimit1": "999", + "3Nfplowlimit1": "-999", + "3Nbalanpremax1": "999", + "3Nbalanpremin1": "-999", + "3Nleaktoplimit1": "999", + "3Nleaklowlimit1": "-999", + "3Npunit1": 1, + "3Nlunit1": 1, + "3Nbee1": false, + "4Pparams_number1": "1", + "4Pparaname1": "产品4正压", + "4Pfulltime1": "1", + "4Pbalantime1": "2", + "4Ptesttime11": "2", + "4Pexhausttime1": "1", + "4Pdelaytime11": "1", + "4Pdelaytime21": "1", + "4Prelievedelay1": "0", + "4Pevolume1": "5", + "4Pfptoplimit1": "999", + "4Pfplowlimit1": "-999", + "4Pbalanpremax1": "999", + "4Pbalanpremin1": "-999", + "4Pleaktoplimit1": "999", + "4Pleaklowlimit1": "-999", + "4Ppunit1": 1, + "4Plunit1": 1, + "4Pbee1": false, + "4Nparams_number1": "1", + "4Nparaname1": "产品4负压", + "4Nfulltime1": "1", + "4Nbalantime1": "5", + "4Ntesttime11": "5", + "4Nexhausttime1": "1", + "4Ndelaytime11": "1", + "4Ndelaytime21": "1", + "4Nrelievedelay1": "0", + "4Nevolume1": "5", + "4Nfptoplimit1": "999", + "4Nfplowlimit1": "-999", + "4Nbalanpremax1": "999", + "4Nbalanpremin1": "-999", + "4Nleaktoplimit1": "999", + "4Nleaklowlimit1": "-999", + "4Npunit1": 1, + "4Nlunit1": 1, + "4Nbee1": false, + "SerialPort_CH3BaudRate": "9600", + "SerialPort_CH3PortName": "COM41", + "SerialPort_CH4BaudRate": "9600", + "SerialPort_CH4PortName": "COM51", + "PLC_IP": "127.0.0.1", + "PLC_Port": 502, + "1Popmode1": false, + "2Popmode1": "容积", + "3Popmode1": "开口", + "4Popmode1": "容积", + "1Pparams_number2": "2", + "1Pparaname2": "2正压", + "1Pfulltime2": "0", + "1Pbalantime2": "0", + "1Ptesttime12": "0", + "1Pexhausttime2": "0", + "1Pdelaytime12": "0", + "1Pdelaytime22": "0", + "1Prelievedelay2": "0", + "1Pevolume2": "0", + "1Pfptoplimit2": "0", + "1Pfplowlimit2": "0", + "1Pbalanpremax2": "0", + "1Pbalanpremin2": "0", + "1Pleaktoplimit2": "0", + "1Pleaklowlimit2": "0", + "1Ppunit2": 1, + "1Plunit2": 1, + "1Pbee2": false, + "1Popmode2": false, + "1Nparams_number2": "2", + "1Nparaname2": "2负压", + "1Nfulltime2": "0", + "1Nbalantime2": "0", + "1Ntesttime12": "0", + "1Nexhausttime2": "0", + "1Ndelaytime12": "0", + "1Ndelaytime22": "0", + "1Nrelievedelay2": "0", + "1Nevolume2": "0", + "1Nfptoplimit2": "0", + "1Nfplowlimit2": "0", + "1Nbalanpremax2": "0", + "1Nbalanpremin2": "0", + "1Nleaktoplimit2": "0", + "1Nleaklowlimit2": "0", + "1Npunit2": 1, + "1Nlunit2": 1, + "1Nbee2": false, + "1Nopmode2": false +} \ No newline at end of file diff --git a/SLC1-N/bin/Debug/productiondata.json b/SLC1-N/bin/Debug/productiondata.json new file mode 100644 index 0000000..887cd4d --- /dev/null +++ b/SLC1-N/bin/Debug/productiondata.json @@ -0,0 +1,10 @@ +{ + "ProductionData": { + "Total": 197, + "OK": 189, + "NG": 8, + "LastUpdate": "2025-11-13T21:21:03.5024133+08:00", + "OKRate": 95.94, + "NGRate": 4.06 + } +} \ No newline at end of file diff --git a/SLC1-N/bin/Debug直压28.zip b/SLC1-N/bin/Debug直压28.zip new file mode 100644 index 0000000..42179ba Binary files /dev/null and b/SLC1-N/bin/Debug直压28.zip differ diff --git a/SLC1-N/dllCall.cs b/SLC1-N/dllCall.cs new file mode 100644 index 0000000..a1a86fc --- /dev/null +++ b/SLC1-N/dllCall.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Reflection; +using System.Text.RegularExpressions; +using System.Windows.Forms; + +namespace SLC1_N +{ + internal class dllCall + { + /// 已加载DLL + /// + private static Dictionary LoadedDlls = new Dictionary(); + /// 已处理程序集 + /// + private static Dictionary Assemblies = new Dictionary(); + /// 在对程序集解释失败时触发 + /// + /// AppDomain + /// 事件参数 + private static Assembly AssemblyResolve(object sender, ResolveEventArgs args) + { + try + { + //程序集 + Assembly ass; + //获取加载失败的程序集的全名 + var assName = new AssemblyName(args.Name).FullName; + //判断Dlls集合中是否有已加载的同名程序集 + if (LoadedDlls.TryGetValue(assName, out ass) && ass != null) + { + LoadedDlls[assName] = null;//如果有则置空并返回 + return ass; + } + else + { + return ass;//dev的dll 这里有问题,可以绕过 + throw new DllNotFoundException(assName);//否则抛出加载失败的异常 + } + } + catch (System.Exception ex) + { + MessageBox.Show("error1:\n位置:AssemblyResolve()!\n描述:" + ex.Message); + return null; + } + } + + /// 注册资源中的dll + /// + /// *表示连续的未知字符,_表示单个未知字符,如*.dll + public static void RegistDLL(string pattern = "*.dll") + { + System.IO.Directory.GetFiles("", ""); + //获取调用者的程序集 + var ass = new StackTrace(0).GetFrame(1).GetMethod().Module.Assembly; + //判断程序集是否已经处理 + if (Assemblies.ContainsKey(ass.FullName)) + { + return; + } + //程序集加入已处理集合 + Assemblies.Add(ass.FullName, null); + //绑定程序集加载失败事件(这里我测试了,就算重复绑也是没关系的) + AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolve; + //获取所有资源文件文件名 + var res = ass.GetManifestResourceNames(); + var regex = new Regex("^" + pattern.Replace(".", "\\.").Replace("*", ".*").Replace("_", ".") + "$", RegexOptions.IgnoreCase); + foreach (var r in res) + { + //如果是dll,则加载 + if (regex.IsMatch(r)) + { + try + { + var s = ass.GetManifestResourceStream(r); + var bts = new byte[s.Length]; + s.Read(bts, 0, (int)s.Length); + var da = Assembly.Load(bts); + //判断是否已经加载 + if (LoadedDlls.ContainsKey(da.FullName)) + { + continue; + } + LoadedDlls[da.FullName] = da; + } + catch (Exception ex) + { + MessageBox.Show("error2:加载dll失败\n位置:RegistDLL()!\n描述:" + ex.Message); + } + } + } + } + } +} diff --git a/SLC1-N/gdMES.cs b/SLC1-N/gdMES.cs new file mode 100644 index 0000000..8801954 --- /dev/null +++ b/SLC1-N/gdMES.cs @@ -0,0 +1,408 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SLC1_N +{ + internal class gdMES + { + } + + public class SubmitTestItem + { + public string josnData { set; get; } + } + + public class DataUp + { + + + private string _barcode; + private string _starttime; + private string _stoptime; + private string _totalresult; + private string _computerName; + private string _computerIP; + private string _fixturecode; + private string _station; + private string _partno; + private string _poftwareversion; + private string _plan; + private string _outtime; + public string barcode + { + get + { + return _barcode; + } + + set + { + _barcode = value; + } + } + + public class SubmitTestResults + { + /// + /// 條碼 + /// + public string barcode { set; get; } + /// + /// 工單 + /// + public string workorder { set; get; } + /// + /// 料號 + /// + public string partno { set; get; } + /// + /// 工站 + /// + public string station { set; get; } + /// + /// 機台編號 + /// + public string equipmentno { set; get; } + + + /// + /// 夹具編號 + /// + public string fixturecode { set; get; } + + /// + /// 電腦名稱 + /// + public string computerName { set; get; } + /// + /// 電腦IP + /// + public string computerIP { set; get; } + + /// + /// 开机时长 + /// + public string bootdurationm { set; get; } + + /// + /// 停机时长 + /// + public string downduration { set; get; } + + /// + /// 测试结果 + /// + public string result { set; get; } + + /// + /// 测试失败原因 + /// + public string faildescribe { set; get; } + + /// + /// 傳入時間 + /// + public string outtime { set; get; } + } + + public class SNVerification + { + /// + /// 條碼 + /// + public string barcode { set; get; } + /// + /// 工單 + /// + public string workorder { set; get; } + /// + /// 料號 + /// + public string partno { set; get; } + /// + /// 工站 + /// + public string station { set; get; } + /// + /// 機台編號 + /// + public string equipmentno { set; get; } + /// + /// 電腦名稱 + /// + public string computerName { set; get; } + /// + /// 電腦IP + /// + public string computerIP { set; get; } + /// + /// 傳入時間 + /// + public string intime { set; get; } + } + + public string starttime + { + get + { + return _starttime; + } + + set + { + _starttime = value; + } + } + + public string stoptime + { + get + { + return _stoptime; + } + + set + { + _stoptime = value; + } + } + + public string totalresult + { + get + { + return _totalresult; + } + + set + { + _totalresult = value; + } + } + + public string computerName + { + get + { + return _computerName; + } + + set + { + _computerName = value; + } + } + + public string computerIP + { + get + { + return _computerIP; + } + + set + { + _computerIP = value; + } + } + + public string fixturecode + { + get + { + return _fixturecode; + } + + set + { + _fixturecode = value; + } + } + + public string station + { + get + { + return _station; + } + + set + { + _station = value; + } + } + + public string partno + { + get + { + return _partno; + } + + set + { + _partno = value; + } + } + + public string poftwareversion + { + get + { + return _poftwareversion; + } + + set + { + _poftwareversion = value; + } + } + + public string plan + { + get + { + return _plan; + } + + set + { + _plan = value; + } + } + + public string outtime + { + get + { + return _outtime; + } + + set + { + _outtime = value; + } + } + + public Exvalue exvalue = new Exvalue(); + + public struct Exvalue + { + + public List itemlist; + } + public struct ItemList + { + private string _itemname; + + public string itemname + { + get + { + return _itemname; + } + + set + { + _itemname = value; + } + } + + public _item_value itemvalue; + + } + + public struct _item_value + { + private string strattime; + private string stoptime; + private string uplimit; + private string dnlimit; + private string result; + private string testvalue1; + + public string Strattime + { + get + { + return strattime; + } + + set + { + strattime = value; + } + } + + public string Stoptime + { + get + { + return stoptime; + } + + set + { + stoptime = value; + } + } + + public string Uplimit + { + get + { + return uplimit; + } + + set + { + uplimit = value; + } + } + + public string Dnlimit + { + get + { + return dnlimit; + } + + set + { + dnlimit = value; + } + } + + public string Result + { + get + { + return result; + } + + set + { + result = value; + } + } + + public string Testvalue1 + { + get + { + return testvalue1; + } + + set + { + testvalue1 = value; + } + } + } + + + } +} diff --git a/SLC1-N/mxlLog.cs b/SLC1-N/mxlLog.cs new file mode 100644 index 0000000..66cf637 --- /dev/null +++ b/SLC1-N/mxlLog.cs @@ -0,0 +1,279 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using System.IO; +using System.Threading; +using SLC1_N; + +namespace SLC1_N +{ + public class mxlLog // 日志文件类 + { + // 日志级别 + public enum LogLevel + { + LOG_DEBUG, + LOG_INFO, + LOG_WARNING, + LOG_ERROR, + LOG_XXX + }; + + // 单例实例 + private static readonly mxlLog instance = new mxlLog(); + public static mxlLog Instance { get { return instance; } } + + private readonly object mutex = new object(); + private string logDir; + private string logPrefix = "log_"; + private long maxFileSize = 10 * 1024 * 1024; // 10MB + private int maxBackupFiles = 5; // 允许文件最大备份数 + private LogLevel minLevel = LogLevel.LOG_DEBUG; // 记录级别,大于则生成文件 + + // 标志位控制 + public bool IsDebugEnabled { get; set; } = false; + public bool IsInfoEnabled { get; set; } = false; + public bool IsWarningEnabled { get; set; } = false; + public bool IsErrorEnabled { get; set; } = false; + public bool IsXXXEnabled { get; set; } = false; + + // 构造函数 - 自动初始化到当前目录 + private mxlLog() + { + // 自动设置为软件当前目录下的Logs文件夹 + logDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs"); + minLevel = LogLevel.LOG_DEBUG; + + // 确保日志目录存在 + if (!Directory.Exists(logDir)) + { + Directory.CreateDirectory(logDir); + } + } + + // 初始化 + public void Initialize(string dir = null, // 修改日志目录 + string prefix = null, // 修改日志文件名前缀 + long? maxSize = null, // 限制单个日志文件最大 + int? maxBackups = null,// 最多保留备份数 + LogLevel? minLevel = null, // 只写入xxx及以上级别 + bool? isDebugEnabled = null, bool? isInfoEnabled = null, // 写入使能 + bool? isWarningEnabled = null, bool? isErrorEnabled = null, + bool? isXXXEnabled = null) + { + lock (mutex) + { + this.logDir = dir ?? this.logDir; + this.logPrefix = prefix ?? this.logPrefix; + this.maxFileSize = maxSize ?? this.maxFileSize; + this.maxBackupFiles = maxBackups ?? this.maxBackupFiles; + this.minLevel = minLevel ?? this.minLevel; + + // 设置标志位 + IsDebugEnabled = isDebugEnabled ?? IsDebugEnabled; + IsInfoEnabled = isInfoEnabled ?? IsInfoEnabled; + IsWarningEnabled = isWarningEnabled ?? IsWarningEnabled; + IsErrorEnabled = isErrorEnabled ?? IsErrorEnabled; + IsXXXEnabled = isXXXEnabled ?? IsXXXEnabled; + + if (!Directory.Exists(logDir)) + { + Directory.CreateDirectory(logDir); + } + } + } + + // 写入日志 + public void Write(LogLevel level, string message, Exception ex = null) + { + if (!IsLevelEnabled(level) || level < minLevel) // 检查使能 + return; + + lock (mutex) + { + try + { + string logFile = GetCurrentLogFilePath(); + CheckFileSize(logFile); + + string logEntry = $"{GetCurrentTimeStamp()} [{GetLevelString(level)}] {message}"; + + if (ex != null) + { + logEntry += $"\nException: {ex.GetType().Name}\nMessage: {ex.Message}\nStack Trace: {ex.StackTrace}"; + } + + File.AppendAllText(logFile, logEntry + Environment.NewLine); + } + catch (Exception logEx) + { + HandleLogFailure(logEx); + } + } + } + + // 清理旧日志文件 + public void ClearOldLogs(int keepDays = 30) + { + try + { + lock (mutex) + { + if (!Directory.Exists(logDir)) + return; + + var cutoffDate = DateTime.Now.AddDays(-keepDays); // 截止日期 + + var allLogFiles = Directory.GetFiles(logDir, $"{logPrefix}*.log*"); // 筛选 + + foreach (var file in allLogFiles) + { + try + { + // 尝试从文件名中解析日期 + var fileName = Path.GetFileNameWithoutExtension(file); + + if (fileName.StartsWith(logPrefix)) + { + var datePart = fileName.Substring(logPrefix.Length); //去掉前缀,获取日期部分 + + // 尝试解析日期 yyyyMMdd + if (datePart.Length >= 8 && // 日期是否8个字符("20250101") 则存到fileDate + DateTime.TryParseExact(datePart.Substring(0, 8), "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out var fileDate)) + { + if (fileDate < cutoffDate) // 对比日期 + { + File.Delete(file); + Write(LogLevel.LOG_INFO, $"删除旧日志文件: {file}"); + } + } + else if (File.Exists(file)) // 对于log.1, .log.2,检查最后修改时间 + { + var lastWriteTime = File.GetLastWriteTime(file); + if (lastWriteTime < cutoffDate) + { + File.Delete(file); + Write(LogLevel.LOG_INFO, $"删除旧日志备份: {file}"); + } + } + } + } + catch (Exception ex) + { + Write(LogLevel.LOG_ERROR, $"删除旧日志文件失败: {file}", ex); + } + } + } + } + catch (Exception ex) + { + Write(LogLevel.LOG_ERROR, "清除旧日志失败", ex); + } + } + + // 快捷方法 + public void Debug(string message) => Write(LogLevel.LOG_DEBUG, message); + public void Info(string message) => Write(LogLevel.LOG_INFO, message); + public void Warning(string message, Exception ex = null) => Write(LogLevel.LOG_WARNING, message, ex); + public void Error(string message, Exception ex = null) => Write(LogLevel.LOG_ERROR, message, ex); + public void XXX(string message, Exception ex = null) => Write(LogLevel.LOG_XXX, message, ex); + public void MESDebug(string message) => Write(LogLevel.LOG_DEBUG, $"[MES] {message}"); + + #region 私有方法 + + // 获取使能 + private bool IsLevelEnabled(LogLevel level) + { + switch (level) + { + case LogLevel.LOG_DEBUG: return IsDebugEnabled; + case LogLevel.LOG_INFO: return IsInfoEnabled; + case LogLevel.LOG_WARNING: return IsWarningEnabled; + case LogLevel.LOG_ERROR: return IsErrorEnabled; + case LogLevel.LOG_XXX: return IsXXXEnabled; + default: return true; + } + } + + // 生成当前日志文件的完整路径 + private string GetCurrentLogFilePath() + { + string dateStamp = DateTime.Now.ToString("yyyyMMdd"); + return Path.Combine(logDir, $"{logPrefix}{dateStamp}.log"); + } + + // 超过大小,触发轮转(当前备份,重新新建) + private void CheckFileSize(string logFile) + { + if (!File.Exists(logFile)) return; + + FileInfo fileInfo = new FileInfo(logFile); + if (fileInfo.Length >= maxFileSize) + { + RotateLogFiles(logFile); + } + } + // 实现日志轮转 + private void RotateLogFiles(string currentLogFile) + { + for (int i = maxBackupFiles - 1; i >= 1; i--) + { + string source = $"{currentLogFile}.{i}"; + string dest = $"{currentLogFile}.{i + 1}"; + + if (File.Exists(source)) + { + File.Move(source, dest); + } + } + + if (File.Exists(currentLogFile)) + { + File.Move(currentLogFile, $"{currentLogFile}.1"); + } + } + + private string GetCurrentTimeStamp() + { + return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); + } + + private string GetLevelString(LogLevel level) + { + switch (level) + { + case LogLevel.LOG_DEBUG: return "DEBUG"; + case LogLevel.LOG_INFO: return "INFO"; + case LogLevel.LOG_WARNING: return "WARNING"; + case LogLevel.LOG_ERROR: return "ERROR"; + case LogLevel.LOG_XXX: return "XXX"; + default: return "UNKNOWN"; + } + } + + // 主日志系统失败(如磁盘满、权限问题) + private void HandleLogFailure(Exception ex) + { + try + { + string fallbackPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "LL_log_fallback.txt"); + + File.AppendAllText(fallbackPath, + $"{GetCurrentTimeStamp()} [LOG_ERROR] Failed to write log: {ex.Message}" + + Environment.NewLine); + } + catch { /* 最终保底措施 */ } + } + + #endregion + } +} + +// 使用方法 : mxlLog.Instance.Error($"异常 ,行号{ex.StackTrace} ", ex); +// mxlLog.Instance.IsErrorEnabled = true; 使能错误log +// mxlLog.Instance.ClearOldLogs(5); 清理日志,仅保留近5天 \ No newline at end of file diff --git a/SLC1-N/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/SLC1-N/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs new file mode 100644 index 0000000..15efebf --- /dev/null +++ b/SLC1-N/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] diff --git a/SLC1-N/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/SLC1-N/obj/Debug/DesignTimeResolveAssemblyReferences.cache new file mode 100644 index 0000000..5ac7013 Binary files /dev/null and b/SLC1-N/obj/Debug/DesignTimeResolveAssemblyReferences.cache differ diff --git a/SLC1-N/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/SLC1-N/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000..a6ffa41 Binary files /dev/null and b/SLC1-N/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/SLC1-N/obj/Debug/Interop.ADOX.dll b/SLC1-N/obj/Debug/Interop.ADOX.dll new file mode 100644 index 0000000..8e2da4e Binary files /dev/null and b/SLC1-N/obj/Debug/Interop.ADOX.dll differ diff --git a/SLC1-N/obj/Debug/LL28-V25111302-c.exe b/SLC1-N/obj/Debug/LL28-V25111302-c.exe new file mode 100644 index 0000000..98f4bcc Binary files /dev/null and b/SLC1-N/obj/Debug/LL28-V25111302-c.exe differ diff --git a/SLC1-N/obj/Debug/LL28-V25111302-c.pdb b/SLC1-N/obj/Debug/LL28-V25111302-c.pdb new file mode 100644 index 0000000..651d406 Binary files /dev/null and b/SLC1-N/obj/Debug/LL28-V25111302-c.pdb differ diff --git a/SLC1-N/obj/Debug/SLC1-N.csproj.AssemblyReference.cache b/SLC1-N/obj/Debug/SLC1-N.csproj.AssemblyReference.cache new file mode 100644 index 0000000..d6e5f45 Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1-N.csproj.AssemblyReference.cache differ diff --git a/SLC1-N/obj/Debug/SLC1-N.csproj.CopyComplete b/SLC1-N/obj/Debug/SLC1-N.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/SLC1-N/obj/Debug/SLC1-N.csproj.CoreCompileInputs.cache b/SLC1-N/obj/Debug/SLC1-N.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..ca979de --- /dev/null +++ b/SLC1-N/obj/Debug/SLC1-N.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +e243c2a7e876228fdb35cebda95fefde21416cc1fcc67108400c68731d1b4700 diff --git a/SLC1-N/obj/Debug/SLC1-N.csproj.FileListAbsolute.txt b/SLC1-N/obj/Debug/SLC1-N.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..f3c7724 --- /dev/null +++ b/SLC1-N/obj/Debug/SLC1-N.csproj.FileListAbsolute.txt @@ -0,0 +1,672 @@ +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe.config +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.pdb +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\EasyModbus.dll +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\Guna.UI.dll +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\Guna.UI2.dll +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\HslCommunication.dll +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\Spire.XLS.dll +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\SunnyUI.dll +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\EasyModbus.xml +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.ConfigTCP.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.GhMes.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.LogOn.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.MESConfig.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.PLCConfig.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.PlcTest.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.Port.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.Save.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.SpcApi.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.Up2Date +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\LL28-N-V1.7.exe +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\LL28-N-V1.7.pdb +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe.config +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.pdb +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\EasyModbus.dll +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\Guna.UI.dll +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\Guna.UI2.dll +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\HslCommunication.dll +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\Spire.XLS.dll +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\SunnyUI.dll +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\EasyModbus.xml +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.ConfigTCP.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.GhMes.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.LogOn.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.MESConfig.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.PLCConfig.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.PlcTest.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.Port.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.Save.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.SpcApi.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CopyComplete +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\LL28-N-V1.7.exe +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\SLC1-N\obj\Debug\LL28-N-V1.7.pdb +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe.config +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.pdb +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\EasyModbus.dll +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\Guna.UI.dll +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\Guna.UI2.dll +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\HslCommunication.dll +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\Spire.XLS.dll +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\SunnyUI.dll +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\EasyModbus.xml +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.ConfigTCP.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.GhMes.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.LogOn.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.MESConfig.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.PLCConfig.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.PlcTest.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Port.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Save.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.SpcApi.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CopyComplete +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\LL28-N-V1.7.exe +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\LL28-N-V1.7.pdb +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.hqMESSet.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe.config +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.pdb +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\EasyModbus.dll +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\Guna.UI.dll +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\Guna.UI2.dll +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\HslCommunication.dll +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\Spire.XLS.dll +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\SunnyUI.dll +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\EasyModbus.xml +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.ConfigTCP.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.GhMes.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.hqMESSet.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.LogOn.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.MESConfig.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.PLCConfig.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.PlcTest.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Port.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Save.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.SpcApi.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CopyComplete +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\LL28-N-V1.7.exe +D:\上位机\备份\LL-28_shuangtongdao\SLC1-N\obj\Debug\LL28-N-V1.7.pdb +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe.config +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.pdb +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\EasyModbus.dll +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Guna.UI.dll +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Guna.UI2.dll +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\HslCommunication.dll +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Spire.XLS.dll +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\SunnyUI.dll +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\EasyModbus.xml +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.ConfigTCP.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.GhMes.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.hqMESSet.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.LogOn.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.MESConfig.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.PLCConfig.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.PlcTest.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Port.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Save.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.SpcApi.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CopyComplete +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\LL28-N-V1.7.exe +E:\备份\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\LL28-N-V1.7.pdb +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe.config +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.pdb +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\EasyModbus.dll +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Guna.UI.dll +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Guna.UI2.dll +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\HslCommunication.dll +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Spire.XLS.dll +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\SunnyUI.dll +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\EasyModbus.xml +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.ConfigTCP.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.GhMes.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.hqMESSet.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.LogOn.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.MESConfig.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.PLCConfig.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.PlcTest.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Port.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Save.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.SpcApi.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.Up2Date +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\LL28-N-V1.7.exe +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\LL28-N-V1.7.pdb +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe.config +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\LL28-N-V1.7.pdb +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\EasyModbus.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Guna.UI.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Guna.UI2.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\HslCommunication.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Spire.XLS.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\SunnyUI.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\EasyModbus.xml +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Form_NetworkSet.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Form_RootSet.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Form_LogOn.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Form_SaomaSet.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Form_Save.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\SLC1-N.csproj.Up2Date +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\LL28-N-V1.7.exe +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\SLC1-N\obj\Debug\LL28-N-V1.7.pdb +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe.config +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\LL28-N-V1.7.exe +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\LL28-N-V1.7.pdb +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\EasyModbus.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\Guna.UI.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\Guna.UI2.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\HslCommunication.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\Spire.XLS.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\SunnyUI.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\EasyModbus.xml +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_NetworkSet.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_RootSet.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_LogOn.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_SaomaSet.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_Save.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.Up2Date +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\LL28-N-V1.7.exe +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\SLC1-N\obj\Debug\LL28-N-V1.7.pdb +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\LL28-V25102202.exe.config +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\LL28-V25102202.exe +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\LL28-V25102202.pdb +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\EasyModbus.dll +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\Guna.UI.dll +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\Guna.UI2.dll +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\HslCommunication.dll +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\Spire.XLS.dll +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\SunnyUI.dll +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\EasyModbus.xml +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_Activate.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_gdMESset.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_NetworkSet.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLCconnect.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_RootSet.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_LogOn.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_SaomaSet.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_Save.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.Up2Date +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\LL28-V25102202.exe +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\SLC1-N\obj\Debug\LL28-V25102202.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\LL28-V25102202.exe.config +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\LL28-V25102202.exe +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\LL28-V25102202.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\EasyModbus.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\Guna.UI.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\Guna.UI2.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\HslCommunication.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\Spire.XLS.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\SunnyUI.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\EasyModbus.xml +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_Activate.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_hbMESset.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_NetworkSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLCconnect.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_RootSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_LogOn.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_SaomaSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Form_Save.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\SLC1-N.csproj.Up2Date +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\LL28-V25102202.exe +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\SLC1-N\obj\Debug\LL28-V25102202.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\LL28-V25102401.exe.config +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\LL28-V25102401.exe +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\LL28-V25102401.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\EasyModbus.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\Guna.UI.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\Guna.UI2.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\HslCommunication.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\Newtonsoft.Json.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\Spire.XLS.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\SunnyUI.Common.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\SunnyUI.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\EasyModbus.xml +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\Newtonsoft.Json.xml +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\Interop.ADOX.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.Form_Activate.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.Form_hbMESset.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.Form_NetworkSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.Form1.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.Form_PLCconnect.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.Form_RootSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.Form_LogOn.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.Form_SaomaSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.Form_Save.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1_N.Warning.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\SLC1-N.csproj.Up2Date +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\LL28-V25102401.exe +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\obj\Debug\LL28-V25102401.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\SLC1-N\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25102401.exe.config +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25102401.exe +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25102401.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\EasyModbus.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\Guna.UI.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\Guna.UI2.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\HslCommunication.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\Spire.XLS.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\SunnyUI.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\EasyModbus.xml +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_Activate.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_hbMESset.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_NetworkSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLCconnect.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_RootSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_LogOn.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_SaomaSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_Save.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.Up2Date +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\LL28-V25102401.exe +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\SLC1-N\obj\Debug\LL28-V25102401.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\EasyModbus.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\Guna.UI.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\Guna.UI2.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\HslCommunication.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\Spire.XLS.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\SunnyUI.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\EasyModbus.xml +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_Activate.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_Alarm.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_hbMESset.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_NetworkSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLC_Serialport.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLCcontrol.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_RootSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_LogOn.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_SaomaSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_Save.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.Up2Date +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLC_TCP.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25110301.exe.config +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25110301.exe +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25110301.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\LL28-V25110301.exe +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\obj\Debug\LL28-V25110301.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25111105.exe.config +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25111105.exe +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25111105.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\EasyModbus.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\Guna.UI.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\Guna.UI2.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\HslCommunication.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\Spire.XLS.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\SunnyUI.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\EasyModbus.xml +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_Alarm.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_hbMESset.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_HQMESconfig.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_NetworkSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLC_Serialport.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLCcontrol.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLC_TCP.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_RootSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_LogOn.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_SaomaSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_Save.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.Up2Date +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\LL28-V25111105.exe +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\LL28-V25111105.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\EasyModbus.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\Guna.UI.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\Guna.UI2.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\HslCommunication.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\Spire.XLS.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\SunnyUI.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\EasyModbus.xml +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_Alarm.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_hbMESset.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_HQMESconfig.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_NetworkSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLC_Serialport.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLCcontrol.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLC_TCP.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_RootSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_LogOn.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_SaomaSet.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_Save.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.Up2Date +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25111302-c.exe.config +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25111302-c.exe +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25111302-c.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\LL28-V25111302-c.exe +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\SLC1-N\obj\Debug\LL28-V25111302-c.pdb +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25111302-c.exe.config +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25111302-c.exe +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\LL28-V25111302-c.pdb +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\DocumentFormat.OpenXml.dll +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\EasyModbus.dll +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\Guna.UI.dll +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\Guna.UI2.dll +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\HslCommunication.dll +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\Newtonsoft.Json.dll +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\Spire.XLS.dll +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\SunnyUI.Common.dll +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\SunnyUI.dll +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\EasyModbus.xml +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\bin\Debug\Newtonsoft.Json.xml +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\Interop.ADOX.dll +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.ResolveComReference.cache +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_Alarm.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_hbMESset.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_HQMESconfig.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_NetworkSet.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Electricity.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form1.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLC_Serialport.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLCcontrol.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_PLC_TCP.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_RootSet.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.LeakCompensate.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_LogOn.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_SaomaSet.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Properties.Resources.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Form_Save.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.UserManagement.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.UserPassword.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1_N.Warning.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\SLC1-N.csproj.Up2Date +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\LL28-V25111302-c.exe +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\SLC1-N\obj\Debug\LL28-V25111302-c.pdb diff --git a/SLC1-N/obj/Debug/SLC1-N.csproj.GenerateResource.cache b/SLC1-N/obj/Debug/SLC1-N.csproj.GenerateResource.cache new file mode 100644 index 0000000..27e24f5 Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1-N.csproj.GenerateResource.cache differ diff --git a/SLC1-N/obj/Debug/SLC1-N.csproj.ResolveComReference.cache b/SLC1-N/obj/Debug/SLC1-N.csproj.ResolveComReference.cache new file mode 100644 index 0000000..6816598 Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1-N.csproj.ResolveComReference.cache differ diff --git a/SLC1-N/obj/Debug/SLC1-N.csproj.Up2Date b/SLC1-N/obj/Debug/SLC1-N.csproj.Up2Date new file mode 100644 index 0000000..e69de29 diff --git a/SLC1-N/obj/Debug/SLC1_N.Electricity.resources b/SLC1-N/obj/Debug/SLC1_N.Electricity.resources new file mode 100644 index 0000000..a0b6eea Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Electricity.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.Form1.resources b/SLC1-N/obj/Debug/SLC1_N.Form1.resources new file mode 100644 index 0000000..a0b6eea Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Form1.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.Form_Alarm.resources b/SLC1-N/obj/Debug/SLC1_N.Form_Alarm.resources new file mode 100644 index 0000000..6c05a97 Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Form_Alarm.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.Form_HQMESconfig.resources b/SLC1-N/obj/Debug/SLC1_N.Form_HQMESconfig.resources new file mode 100644 index 0000000..6c05a97 Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Form_HQMESconfig.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.Form_LogOn.resources b/SLC1-N/obj/Debug/SLC1_N.Form_LogOn.resources new file mode 100644 index 0000000..a0b6eea Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Form_LogOn.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.Form_NetworkSet.resources b/SLC1-N/obj/Debug/SLC1_N.Form_NetworkSet.resources new file mode 100644 index 0000000..a0b6eea Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Form_NetworkSet.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.Form_PLC_Serialport.resources b/SLC1-N/obj/Debug/SLC1_N.Form_PLC_Serialport.resources new file mode 100644 index 0000000..a0b6eea Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Form_PLC_Serialport.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.Form_PLC_TCP.resources b/SLC1-N/obj/Debug/SLC1_N.Form_PLC_TCP.resources new file mode 100644 index 0000000..6c05a97 Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Form_PLC_TCP.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.Form_PLCcontrol.resources b/SLC1-N/obj/Debug/SLC1_N.Form_PLCcontrol.resources new file mode 100644 index 0000000..a0b6eea Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Form_PLCcontrol.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.Form_RootSet.resources b/SLC1-N/obj/Debug/SLC1_N.Form_RootSet.resources new file mode 100644 index 0000000..a0b6eea Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Form_RootSet.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.Form_SaomaSet.resources b/SLC1-N/obj/Debug/SLC1_N.Form_SaomaSet.resources new file mode 100644 index 0000000..a0b6eea Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Form_SaomaSet.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.Form_Save.resources b/SLC1-N/obj/Debug/SLC1_N.Form_Save.resources new file mode 100644 index 0000000..a0b6eea Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Form_Save.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.Form_hbMESset.resources b/SLC1-N/obj/Debug/SLC1_N.Form_hbMESset.resources new file mode 100644 index 0000000..a0b6eea Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Form_hbMESset.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.LeakCompensate.resources b/SLC1-N/obj/Debug/SLC1_N.LeakCompensate.resources new file mode 100644 index 0000000..a0b6eea Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.LeakCompensate.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.Properties.Resources.resources b/SLC1-N/obj/Debug/SLC1_N.Properties.Resources.resources new file mode 100644 index 0000000..a11fa09 Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Properties.Resources.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.UserManagement.resources b/SLC1-N/obj/Debug/SLC1_N.UserManagement.resources new file mode 100644 index 0000000..a0b6eea Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.UserManagement.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.UserPassword.resources b/SLC1-N/obj/Debug/SLC1_N.UserPassword.resources new file mode 100644 index 0000000..a0b6eea Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.UserPassword.resources differ diff --git a/SLC1-N/obj/Debug/SLC1_N.Warning.resources b/SLC1-N/obj/Debug/SLC1_N.Warning.resources new file mode 100644 index 0000000..a0b6eea Binary files /dev/null and b/SLC1-N/obj/Debug/SLC1_N.Warning.resources differ diff --git a/SLC1-N/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll b/SLC1-N/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll new file mode 100644 index 0000000..f0ea2e2 Binary files /dev/null and b/SLC1-N/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll differ diff --git a/SLC1-N/packages.config b/SLC1-N/packages.config new file mode 100644 index 0000000..4ea4ce7 --- /dev/null +++ b/SLC1-N/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/SLC1-N/yiqiParam.cs b/SLC1-N/yiqiParam.cs new file mode 100644 index 0000000..d0c0164 --- /dev/null +++ b/SLC1-N/yiqiParam.cs @@ -0,0 +1,294 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SLC1_N +{ + public class yiqiParam // 仪器参数类 + { + public bool opmode { get; set; } // 开口/容积 + + // 时间 + public int fulltime { get; set; } // 充气时间 + public int balantime { get; set; } // 平衡时间 + public int testtime1 { get; set; } // 检测时间 + public int exhausttime { get; set; } // 排气时间 + + // 延时 + public int relievedelay { get; set; } // 解除2延时 + public int delaytime1 { get; set; } // 延时1 + public int delaytime2 { get; set; } // 延时2 + public float evolume { get; set; } // 等效容积 + + // 压力 + public float fptoplimit { get; set; } // 充气上限 + public float fplowlimit { get; set; } // 充气下限 + public float balanpremax { get; set; } // 平衡上限 + public float balanpremin { get; set; } // 平衡下限 + + // 泄漏量 + public float leaktoplimit { get; set; } // 泄漏量上限 + public float leaklowlimit { get; set; } // 泄漏量下限 + + // 单位 + public int punit { get; set; } // 压力单位 + public int lunit { get; set; } // 泄漏量单位 + + // 获取需要上传的数据帧 + public int[] GetArray() + { + // 拆分 float 值为两个16位整数 + int[] FPtoplimitBytes = Fun_SplitBytes(fptoplimit); + int[] FPlowlimitBytes = Fun_SplitBytes(fplowlimit); + int[] BalanPreMaxBytes = Fun_SplitBytes(balanpremax); + int[] BalanPreMinBytes = Fun_SplitBytes(balanpremin); + int[] LeaktoplimitBytes = Fun_SplitBytes(leaktoplimit); + int[] LeaklowlimitBytes = Fun_SplitBytes(leaklowlimit); + int[] EvolumeBytes = Fun_SplitBytes(evolume); + + return new int[] + { + fulltime * 10, // 充气时间 + balantime * 10, // 平衡时间 + testtime1 * 10, // 检测时间 + exhausttime * 10, // 排气时间 + + relievedelay, // 解除2延时 + delaytime1, // 延时1 + delaytime2, // 延时2 + + FPtoplimitBytes[0], FPtoplimitBytes[1], // 充气上限 + FPlowlimitBytes[0], FPlowlimitBytes[1], // 充气下限 + BalanPreMaxBytes[0], BalanPreMaxBytes[1], // 平衡上限 + BalanPreMinBytes[0], BalanPreMinBytes[1], // 平衡下限 + LeaktoplimitBytes[0], LeaktoplimitBytes[1],// 泄漏量上限 + LeaklowlimitBytes[0], LeaklowlimitBytes[1],// 泄漏量下限 + + EvolumeBytes[0], EvolumeBytes[1], // 等效容积 + punit, // 压力单位 + lunit, // 泄漏量单位 + }; + } + + // 将 float 拆分为两个(低字在前,高字在后) + public int[] Fun_SplitBytes(float value) + { + byte[] bytes = BitConverter.GetBytes(value); + ushort lowWord = BitConverter.ToUInt16(bytes, 0); // 低位(地址1015) + ushort highWord = BitConverter.ToUInt16(bytes, 2); // 高位(地址1016) + return new int[] { lowWord, highWord }; // 返回 [low, high] + } + + // 复制 + public yiqiParam Copy() + { + return new yiqiParam + { + fulltime = this.fulltime, + balantime = this.balantime, + testtime1 = this.testtime1, + exhausttime = this.exhausttime, + + relievedelay = this.relievedelay, + delaytime1 = this.delaytime1, + delaytime2 = this.delaytime2, + evolume = this.evolume, + + fptoplimit = this.fptoplimit, + fplowlimit = this.fplowlimit, + balanpremax = this.balanpremax, + balanpremin = this.balanpremin, + + leaktoplimit = this.leaktoplimit, + leaklowlimit = this.leaklowlimit, + punit = this.punit, + lunit = this.lunit + }; + } + } + + // 测试记录 + /// + /// 添加一次测试记录到链表,导出的时候再集成链表为string + /// + public class TestRecord + { + private int ch; + + public string Code { get; set; } // 条码 + + // 仪器参数配置 + public yiqiParam yiqiP_Param { get; set; } // 正压参数 + public yiqiParam yiqiN_Param { get; set; } // 负压参数 + + // 测试状态 + public bool IsPTested { get; set; } // 正压是否已测试 + public bool IsNTested { get; set; } // 负压是否已测试 + + // 测试结果 + public bool Result { get; set; } // 测试结果 + + // 正压 + public string PTestPressure { get; set; } // 正压测试压力 + public string PLeak { get; set; } // 正压泄漏量 + + // 负压 + public string NTestPressure { get; set; } // 负压测试压力 + public string NLeak { get; set; } // 负压泄漏量 + + List testRecord_list = new List(); + + public TestRecord(int ch) + { + this.ch = ch; + } + + // 添加一次记录 + public void AddRecord() + { + testRecord_list.Add(GetRecord()); + } + + // 获取记录数据 + private string GetRecord() + { + string currentTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); + string resultText = Result ? "OK" : "NG"; + + List records = new List(); + + // 正压记录 + if (IsPTested && yiqiP_Param != null) + { + string pressureUnit = GetPUnit(yiqiP_Param.punit); + string leakageUnit = GetLUnitText(yiqiP_Param.lunit); + + string positiveRecord = $"CH{ch}[正压] 时间 {currentTime} 条形码{Code} 结果{resultText} " + + $"充气时间{yiqiP_Param.fulltime}s " + + $"平衡时间{yiqiP_Param.balantime}s " + + $"测试时间{yiqiP_Param.testtime1}s " + + $"排气时间{yiqiP_Param.exhausttime}s " + + $"测试压力{PTestPressure}{pressureUnit} " + + $"泄漏量{PLeak}{leakageUnit}"; + records.Add(positiveRecord); + } + + // 负压记录 + if (IsNTested && yiqiN_Param != null) + { + string pressureUnit = GetPUnit(yiqiN_Param.punit); + string leakageUnit = GetLUnitText(yiqiN_Param.lunit); + + string negativeRecord = $"CH{ch}[负压] 时间 {currentTime} 条形码{Code} 结果{resultText} " + + $"充气时间{yiqiN_Param.fulltime}s " + + $"平衡时间{yiqiN_Param.balantime}s " + + $"测试时间{yiqiN_Param.testtime1}s " + + $"排气时间{yiqiN_Param.exhausttime}s " + + $"测试压力{NTestPressure}{pressureUnit} " + + $"泄漏量{NLeak}{leakageUnit}"; + records.Add(negativeRecord); + } + + return string.Join(Environment.NewLine, records); + } + + // 获取记录集合 + public string GetRecordList() + { + return string.Join(Environment.NewLine, testRecord_list) + "\n"; + } + + // 获取正压记录 + public string GetPRecord() + { + if (!IsPTested || yiqiP_Param == null) + return null; + + string currentTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); + string resultText = Result ? "OK" : "NG"; + string pressureUnit = GetPUnit(yiqiP_Param.punit); + string leakageUnit = GetLUnitText(yiqiP_Param.lunit); + + return $"CH4 时间 {currentTime} 条形码{Code} 结果{resultText} " + + $"正压充气时间{yiqiP_Param.fulltime}s " + + $"正压平衡时间{yiqiP_Param.balantime}s " + + $"正压测试时间{yiqiP_Param.testtime1}s " + + $"正压排气时间{yiqiP_Param.exhausttime}s " + + $"正压测试压力{PTestPressure:0.00}{pressureUnit} " + + $"正压泄漏量{PLeak:0.00}{leakageUnit}"; + } + + // 获取负压记录 + public string GetNRecord() + { + if (!IsNTested || yiqiN_Param == null) + return null; + + string currentTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); + string resultText = Result ? "OK" : "NG"; + string pressureUnit = GetPUnit(yiqiN_Param.punit); + string leakageUnit = GetLUnitText(yiqiN_Param.lunit); + + return $"CH4 时间 {currentTime} 条形码{Code} 结果{resultText} " + + $"负压充气时间{yiqiN_Param.fulltime}s " + + $"负压平衡时间{yiqiN_Param.balantime}s " + + $"负压测试时间{yiqiN_Param.testtime1}s " + + $"负压排气时间{yiqiN_Param.exhausttime}s " + + $"负压测试压力{NTestPressure:0.00}{pressureUnit} " + + $"负压泄漏量{NLeak:0.00}{leakageUnit}"; + } + + // 重置 + public void Reset() + { + Code = string.Empty; + IsPTested = false; + IsNTested = false; + Result = false; + PTestPressure = string.Empty; + PLeak = string.Empty; + NTestPressure = string.Empty; + NLeak = string.Empty; + + testRecord_list.Clear(); + } + + // 获取压力单位文本 + private string GetPUnit(int unit) + { + string PUnit = "Pa"; // 默认值 + switch (unit) + { + case 0: PUnit = "Pa"; break; + case 1: PUnit = "KPa"; break; + case 2: PUnit = "MPa"; break; + case 3: PUnit = "bar"; break; + case 4: PUnit = "Psi"; break; + case 5: PUnit = "kg/cm^2"; break; + case 6: PUnit = "atm"; break; + case 7: PUnit = "mmHg"; break; + } + return PUnit; + } + + // 获取泄漏量单位文本 + private string GetLUnitText(int unit) + { + string LUnit = "Pa"; // 默认值 + switch (unit) + { + case 0: LUnit = "Pa"; break; + case 1: LUnit = "KPa"; break; + case 2: LUnit = "mbar"; break; + case 3: LUnit = "atm"; break; + case 4: LUnit = "sccm"; break; + case 5: LUnit = "ccm3/s"; break; + case 6: LUnit = "Pa/s"; break; + } + return LUnit; + } + } + +} diff --git a/SLC1-N/图标一号.ico b/SLC1-N/图标一号.ico new file mode 100644 index 0000000..f00cf12 Binary files /dev/null and b/SLC1-N/图标一号.ico differ diff --git a/packages/EasyModbusTCP.5.6.0/.signature.p7s b/packages/EasyModbusTCP.5.6.0/.signature.p7s new file mode 100644 index 0000000..eeb5357 Binary files /dev/null and b/packages/EasyModbusTCP.5.6.0/.signature.p7s differ diff --git a/packages/EasyModbusTCP.5.6.0/EasyModbusTCP.5.6.0.nupkg b/packages/EasyModbusTCP.5.6.0/EasyModbusTCP.5.6.0.nupkg new file mode 100644 index 0000000..0d73027 Binary files /dev/null and b/packages/EasyModbusTCP.5.6.0/EasyModbusTCP.5.6.0.nupkg differ diff --git a/packages/EasyModbusTCP.5.6.0/lib/net40/EasyModbus.dll b/packages/EasyModbusTCP.5.6.0/lib/net40/EasyModbus.dll new file mode 100644 index 0000000..484b2da Binary files /dev/null and b/packages/EasyModbusTCP.5.6.0/lib/net40/EasyModbus.dll differ diff --git a/packages/EasyModbusTCP.5.6.0/lib/net40/EasyModbus.xml b/packages/EasyModbusTCP.5.6.0/lib/net40/EasyModbus.xml new file mode 100644 index 0000000..5a61d19 --- /dev/null +++ b/packages/EasyModbusTCP.5.6.0/lib/net40/EasyModbus.xml @@ -0,0 +1,425 @@ + + + + EasyModbus + + + + + Implements a ModbusClient. + + + + + Constructor which determines the Master ip-address and the Master Port. + + IP-Address of the Master device + Listening port of the Master device (should be 502) + + + + Constructor which determines the Serial-Port + + Serial-Port Name e.G. "COM1" + + + + Parameterless constructor + + + + + Establish connection to Master device in case of Modbus TCP. Opens COM-Port in case of Modbus RTU + + + + + Establish connection to Master device in case of Modbus TCP. + + + + + Converts two ModbusRegisters to Float - Example: EasyModbus.ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(19,2)) + + Two Register values received from Modbus + Connected float value + + + + Converts two ModbusRegisters to Float, Registers can by swapped + + Two Register values received from Modbus + Desired Word Order (Low Register first or High Register first + Connected float value + + + + Converts two ModbusRegisters to 32 Bit Integer value + + Two Register values received from Modbus + Connected 32 Bit Integer value + + + + Converts two ModbusRegisters to 32 Bit Integer Value - Registers can be swapped + + Two Register values received from Modbus + Desired Word Order (Low Register first or High Register first + Connecteds 32 Bit Integer value + + + + Convert four 16 Bit Registers to 64 Bit Integer value Register Order "LowHigh": Reg0: Low Word.....Reg3: High Word, "HighLow": Reg0: High Word.....Reg3: Low Word + + four Register values received from Modbus + 64 bit value + + + + Convert four 16 Bit Registers to 64 Bit Integer value - Registers can be swapped + + four Register values received from Modbus + Desired Word Order (Low Register first or High Register first + Connected 64 Bit Integer value + + + + Convert four 16 Bit Registers to 64 Bit double prec. value Register Order "LowHigh": Reg0: Low Word.....Reg3: High Word, "HighLow": Reg0: High Word.....Reg3: Low Word + + four Register values received from Modbus + 64 bit value + + + + Convert four 16 Bit Registers to 64 Bit double prec. value - Registers can be swapped + + four Register values received from Modbus + Desired Word Order (Low Register first or High Register first + Connected double prec. float value + + + + Converts float to two ModbusRegisters - Example: modbusClient.WriteMultipleRegisters(24, EasyModbus.ModbusClient.ConvertFloatToTwoRegisters((float)1.22)); + + Float value which has to be converted into two registers + Register values + + + + Converts float to two ModbusRegisters Registers - Registers can be swapped + + Float value which has to be converted into two registers + Desired Word Order (Low Register first or High Register first + Register values + + + + Converts 32 Bit Value to two ModbusRegisters + + Int value which has to be converted into two registers + Register values + + + + Converts 32 Bit Value to two ModbusRegisters Registers - Registers can be swapped + + Double value which has to be converted into two registers + Desired Word Order (Low Register first or High Register first + Register values + + + + Converts 64 Bit Value to four ModbusRegisters + + long value which has to be converted into four registers + Register values + + + + Converts 64 Bit Value to four ModbusRegisters - Registers can be swapped + + long value which has to be converted into four registers + Desired Word Order (Low Register first or High Register first + Register values + + + + Converts 64 Bit double prec Value to four ModbusRegisters + + double value which has to be converted into four registers + Register values + + + + Converts 64 Bit double prec. Value to four ModbusRegisters - Registers can be swapped + + double value which has to be converted into four registers + Desired Word Order (Low Register first or High Register first + Register values + + + + Converts 16 - Bit Register values to String + + Register array received via Modbus + First Register containing the String to convert + number of characters in String (must be even) + Converted String + + + + Converts a String to 16 - Bit Registers + + Register array received via Modbus + Converted String + + + + Calculates the CRC16 for Modbus-RTU + + Byte buffer to send + Number of bytes to calculate CRC + First byte in buffer to start calculating CRC + + + + Read Discrete Inputs from Server device (FC2). + + First discrete input to read + Number of discrete Inputs to read + Boolean Array which contains the discrete Inputs + + + + Read Coils from Server device (FC1). + + First coil to read + Numer of coils to read + Boolean Array which contains the coils + + + + Read Holding Registers from Master device (FC3). + + First holding register to be read + Number of holding registers to be read + Int Array which contains the holding registers + + + + Read Input Registers from Master device (FC4). + + First input register to be read + Number of input registers to be read + Int Array which contains the input registers + + + + Write single Coil to Master device (FC5). + + Coil to be written + Coil Value to be written + + + + Write single Register to Master device (FC6). + + Register to be written + Register Value to be written + + + + Write multiple coils to Master device (FC15). + + First coil to be written + Coil Values to be written + + + + Write multiple registers to Master device (FC16). + + First register to be written + register Values to be written + + + + Read/Write Multiple Registers (FC23). + + First input register to read + Number of input registers to read + First input register to write + Values to write + Int Array which contains the Holding registers + + + + Close connection to Master Device. + + + + + Destructor - Close connection to Master Device. + + + + + Returns "TRUE" if Client is connected to Server and "FALSE" if not. In case of Modbus RTU returns if COM-Port is opened + + + + + Gets or Sets the IP-Address of the Server. + + + + + Gets or Sets the Port were the Modbus-TCP Server is reachable (Standard is 502). + + + + + Gets or Sets the UDP-Flag to activate Modbus UDP. + + + + + Gets or Sets the Unit identifier in case of serial connection (Default = 0) + + + + + Gets or Sets the Baudrate for serial connection (Default = 9600) + + + + + Gets or Sets the of Parity in case of serial connection + + + + + Gets or Sets the number of stopbits in case of serial connection + + + + + Gets or Sets the connection Timeout in case of ModbusTCP connection + + + + + Gets or Sets the serial Port + + + + + Gets or Sets the Filename for the LogFile + + + + + Exception to be thrown if serial port is not opened + + + + + Exception to be thrown if Connection to Modbus device failed + + + + + Exception to be thrown if Modbus Server returns error code "Function code not supported" + + + + + Exception to be thrown if Modbus Server returns error code "quantity invalid" + + + + + Exception to be thrown if Modbus Server returns error code "starting adddress and quantity invalid" + + + + + Exception to be thrown if Modbus Server returns error code "Function Code not executed (0x04)" + + + + + Exception to be thrown if CRC Check failed + + + + + Modbus Protocol informations. + + + + When making a server TCP listen socket, will listen to this IP address. + + + + Listen to all network interfaces. + + TCP port to listen + + + + Listen to a specific network interface. + + IP address of network interface to listen + TCP port to listen + + + + Modbus TCP Server. + + + + + When creating a TCP or UDP socket, the local IP address to attach to. + + + + + Gets or Sets the Filename for the LogFile + + + + + Store Log-Data in a File + + + + + Private constructor; Ensures the access of the class only via "instance" + + + + + Returns the instance of the class (singleton) + + instance (Singleton) + + + + Store message in Log-File + + Message to append to the Log-File + + + + Store message in Log-File including Timestamp + + Message to append to the Log-File + Timestamp to add to the same Row + + + + Gets or Sets the Filename to Store Strings in a File + + + + diff --git a/packages/Microsoft.Office.Interop.Excel.15.0.4795.1001/.signature.p7s b/packages/Microsoft.Office.Interop.Excel.15.0.4795.1001/.signature.p7s new file mode 100644 index 0000000..f186eb3 Binary files /dev/null and b/packages/Microsoft.Office.Interop.Excel.15.0.4795.1001/.signature.p7s differ diff --git a/packages/Microsoft.Office.Interop.Excel.15.0.4795.1001/Microsoft.Office.Interop.Excel.15.0.4795.1001.nupkg b/packages/Microsoft.Office.Interop.Excel.15.0.4795.1001/Microsoft.Office.Interop.Excel.15.0.4795.1001.nupkg new file mode 100644 index 0000000..c5a2f73 Binary files /dev/null and b/packages/Microsoft.Office.Interop.Excel.15.0.4795.1001/Microsoft.Office.Interop.Excel.15.0.4795.1001.nupkg differ diff --git a/packages/Microsoft.Office.Interop.Excel.15.0.4795.1001/lib/net20/Microsoft.Office.Interop.Excel.dll b/packages/Microsoft.Office.Interop.Excel.15.0.4795.1001/lib/net20/Microsoft.Office.Interop.Excel.dll new file mode 100644 index 0000000..9d6d158 Binary files /dev/null and b/packages/Microsoft.Office.Interop.Excel.15.0.4795.1001/lib/net20/Microsoft.Office.Interop.Excel.dll differ diff --git a/packages/Microsoft.Office.Interop.Excel.15.0.4795.1001/lib/netstandard2.0/Microsoft.Office.Interop.Excel.dll b/packages/Microsoft.Office.Interop.Excel.15.0.4795.1001/lib/netstandard2.0/Microsoft.Office.Interop.Excel.dll new file mode 100644 index 0000000..9d6d158 Binary files /dev/null and b/packages/Microsoft.Office.Interop.Excel.15.0.4795.1001/lib/netstandard2.0/Microsoft.Office.Interop.Excel.dll differ diff --git a/packages/Newtonsoft.Json.13.0.1/.signature.p7s b/packages/Newtonsoft.Json.13.0.1/.signature.p7s new file mode 100644 index 0000000..988b1e1 Binary files /dev/null and b/packages/Newtonsoft.Json.13.0.1/.signature.p7s differ diff --git a/packages/Newtonsoft.Json.13.0.1/LICENSE.md b/packages/Newtonsoft.Json.13.0.1/LICENSE.md new file mode 100644 index 0000000..dfaadbe --- /dev/null +++ b/packages/Newtonsoft.Json.13.0.1/LICENSE.md @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2007 James Newton-King + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/Newtonsoft.Json.13.0.1/Newtonsoft.Json.13.0.1.nupkg b/packages/Newtonsoft.Json.13.0.1/Newtonsoft.Json.13.0.1.nupkg new file mode 100644 index 0000000..9eb2ddd Binary files /dev/null and b/packages/Newtonsoft.Json.13.0.1/Newtonsoft.Json.13.0.1.nupkg differ diff --git a/packages/Newtonsoft.Json.13.0.1/lib/net20/Newtonsoft.Json.dll b/packages/Newtonsoft.Json.13.0.1/lib/net20/Newtonsoft.Json.dll new file mode 100644 index 0000000..d40ac9c Binary files /dev/null and b/packages/Newtonsoft.Json.13.0.1/lib/net20/Newtonsoft.Json.dll differ diff --git a/packages/Newtonsoft.Json.13.0.1/lib/net20/Newtonsoft.Json.xml b/packages/Newtonsoft.Json.13.0.1/lib/net20/Newtonsoft.Json.xml new file mode 100644 index 0000000..181504f --- /dev/null +++ b/packages/Newtonsoft.Json.13.0.1/lib/net20/Newtonsoft.Json.xml @@ -0,0 +1,10335 @@ + + + + Newtonsoft.Json + + + + + Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Initializes a new instance of the class. + + The to write to. + + + + Initializes a new instance of the class. + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + The default value is false. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets the naming strategy used to resolve how enum text is written. + + The naming strategy used to resolve how enum text is written. + + + + Gets or sets a value indicating whether integer values are allowed when serializing and deserializing. + The default value is true. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + true if the written enum text will be camel case; otherwise, false. + + + + Initializes a new instance of the class. + + The naming strategy used to resolve how enum text is written. + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from Unix epoch time + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attribute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Gets or sets a value indicating whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + true if special characters are encoded; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + true if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + The default JSON name table implementation. + + + + + Initializes a new instance of the class. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Adds the specified string into name table. + + The string to add. + This method is not thread-safe. + The resolved string. + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + The minimum required length of the array. The returned array may be longer. + The rented array from the pool. This array must be returned when it is no longer needed. + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, when returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, when returns false). + + + + Instructs the how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the to a JSON string. + + The node to serialize. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to serialize. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. If there is no existing value then null will be used. + The existing value has a value. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Gets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + + + + + Initializes a new instance of the class. + + Type of the . + + + + Initializes a new instance of the class. + + Type of the . + Parameter list to use when constructing the . Can be null. + + + + Represents a collection of . + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Initializes a new instance of the class. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Base class for a table of atomized string objects. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to always serialize the member with the specified name. + + + + + Gets or sets the type used when serializing the property's collection items. + + The collection's items type. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Specifies the state of the reader. + + + + + A read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true to close the source when this reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Reads the next JSON token from the source. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + A flag indicating whether the position index inside an array should be updated. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the reader's state to . + If is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is . + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + The default value is false. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance. + The will not use default settings + from . + + + A new instance. + The will not use default settings + from . + + + + + Creates a new instance using the specified . + The will not use default settings + from . + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings + from . + + + + + Creates a new instance. + The will use default settings + from . + + + A new instance. + The will use default settings + from . + + + + + Creates a new instance using the specified . + The will use default settings + from as well as the specified . + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings + from as well as the specified . + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Specifies the settings on a object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + The default value is . + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets the used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets a function that creates the used by the serializer when resolving references. + + A function that creates the used by the serializer when resolving references. + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + The default value is false. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Initializes a new instance of the class with the specified . + + The containing the JSON data to read. + + + + Gets or sets the reader's property name table. + + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how many s to write for each level in the hierarchy when is set to . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the class using the specified . + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying . + + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides validation. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a []. + + + A [] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true to close the destination when this writer is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If is set to true, the destination is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current JSON object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Sets the state of the . + + The being written. + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a with type . + + + + + Specifies how duplicate property names are handled when loading JSON. + + + + + Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used. + + + + + Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used. + + + + + Throw a when a duplicate property is encountered. + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a collection of objects. + + The type of token. + + + + Gets the of with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads an from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + + + Returns an enumerator that iterates through the collection. + + + A of that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + + + + Removes all items from the . + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + + + Represents a JSON constructor. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a token that can contain other tokens. + + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An of containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An of containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates a that can be used to add tokens to the . + + A that is ready to have content written to it. + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of objects. + + The type of token. + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the of with the specified key. + + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Represents a JSON object. + + + + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets the node type for this . + + The type. + + + + Gets an of of this object's properties. + + An of of this object's properties. + + + + Gets a with the specified name. + + The property name. + A with the specified name or null. + + + + Gets the with the specified name. + The exact name will be searched for first and if no matching property is found then + the will be used to match a property. + + The property name. + One of the enumeration values that specifies how the strings will be compared. + A matched with the specified name or null. + + + + Gets a of of this object's property values. + + A of of this object's property values. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + true if the JSON object has the specified property name; otherwise, false. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries to get the with the specified property name. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Represents a JSON property. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. + When the or + + methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents a raw JSON string. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + The default value is . + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + The default value is . + + The JSON line info handling. + + + + Gets or sets how duplicate property names in JSON objects are handled when loading JSON. + The default value is . + + The JSON duplicate property name handling. + + + + Specifies the settings used when merging JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Gets or sets the comparison used to match property names while merging. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + The comparison used to match property names while merging. + + + + Specifies the settings used when selecting JSON. + + + + + Gets or sets a flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + A flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + + + Represents an abstract JSON token. + + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + A collection of s which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Creates a for this token. + + A that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object. + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + Creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A , or null. + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + The used to select tokens. + A . + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + The used to select tokens. + An of that contains the selected elements. + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the at the reader's current position. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Initializes a new instance of the class. + + The token to read from. + The initial path of the token. It is prepended to the returned . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying . + + + + + Closes this writer. + If is set to true, the JSON is auto-completed. + + + Setting to true has no additional effect, since the underlying is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a value. + An error will be raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a undefined value. + + A undefined value. + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a . + + A into which this method will write. + A collection of s which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not of the same type as this instance. + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). + + A flag indicating whether the value can not equal the number defined by the minimum attribute (). + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). + + A flag indicating whether the value can not equal the number defined by the maximum attribute (). + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains JSON Schema. + + A that contains JSON Schema. + A populated from the string that contains JSON Schema. + + + + Load a from a string that contains JSON Schema using the specified . + + A that contains JSON Schema. + The resolver. + A populated from the string that contains JSON Schema. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + + Resolves from an id. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + + The value types allowed by the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + A camel case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolve a for a given . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. + + + true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. + + + true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer that writes to the application's instances. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Used by to resolve a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + The that will be used to filter the trace messages passed to the writer. + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a used by the . + + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + true if the creator has a parameter with the collection values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Handles serialization callback events. + + The object that raised the callback event. + The streaming context. + + + + Handles serialization error callback events. + + The object that raised the callback event. + The streaming context. + The error context. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets the internally resolved for the contract's type. + This converter is used as a fallback converter when no other converter is resolved. + Setting will always override this converter. + + + + + Gets or sets all methods called immediately after deserialization of the object. + + The methods called immediately after deserialization of the object. + + + + Gets or sets all methods called during deserialization of the object. + + The methods called during deserialization of the object. + + + + Gets or sets all methods called after serialization of the object graph. + + The methods called after serialization of the object graph. + + + + Gets or sets all methods called before serialization of the object. + + The methods called before serialization of the object. + + + + Gets or sets all method called when an error is thrown during the serialization of the object. + + The methods called when an error is thrown during the serialization of the object. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + true if the default object creator is non-public; otherwise, false. + + + + Contract details for a used by the . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + true if the creator has a parameter with the dictionary values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object constructor. + + The object constructor. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets a value indicating whether has a value specified. + + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the type described by the argument. + + The type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + A kebab case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Initializes a new instance of the class. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Returns an enumeration of the most recent trace messages. + + An enumeration of the most recent trace messages. + + + + Returns a of the most recent trace messages. + + + A of the most recent trace messages. + + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + A flag indicating whether the property has had a name explicitly specified. + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Hash code calculation + + + + + + Object equality implementation + + + + + + + Compare to another NamingStrategy + + + + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + The instance to get attributes for. This parameter should be a , , or . + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. + + + + + Specifies type name handling options for the . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON + you must specify a root type object with + or . + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + Provides a set of static (Shared in Visual Basic) methods for + querying objects that implement . + + + + + Returns the input typed as . + + + + + Returns an empty that has the + specified type argument. + + + + + Converts the elements of an to the + specified type. + + + + + Filters the elements of an based on a specified type. + + + + + Generates a sequence of integral numbers within a specified range. + + The value of the first integer in the sequence. + The number of sequential integers to generate. + + + + Generates a sequence that contains one repeated value. + + + + + Filters a sequence of values based on a predicate. + + + + + Filters a sequence of values based on a predicate. + Each element's index is used in the logic of the predicate function. + + + + + Projects each element of a sequence into a new form. + + + + + Projects each element of a sequence into a new form by + incorporating the element's index. + + + + + Projects each element of a sequence to an + and flattens the resulting sequences into one sequence. + + + + + Projects each element of a sequence to an , + and flattens the resulting sequences into one sequence. The + index of each source element is used in the projected form of + that element. + + + + + Projects each element of a sequence to an , + flattens the resulting sequences into one sequence, and invokes + a result selector function on each element therein. + + + + + Projects each element of a sequence to an , + flattens the resulting sequences into one sequence, and invokes + a result selector function on each element therein. The index of + each source element is used in the intermediate projected form + of that element. + + + + + Returns elements from a sequence as long as a specified condition is true. + + + + + Returns elements from a sequence as long as a specified condition is true. + The element's index is used in the logic of the predicate function. + + + + + Base implementation of First operator. + + + + + Returns the first element of a sequence. + + + + + Returns the first element in a sequence that satisfies a specified condition. + + + + + Returns the first element of a sequence, or a default value if + the sequence contains no elements. + + + + + Returns the first element of the sequence that satisfies a + condition or a default value if no such element is found. + + + + + Base implementation of Last operator. + + + + + Returns the last element of a sequence. + + + + + Returns the last element of a sequence that satisfies a + specified condition. + + + + + Returns the last element of a sequence, or a default value if + the sequence contains no elements. + + + + + Returns the last element of a sequence that satisfies a + condition or a default value if no such element is found. + + + + + Base implementation of Single operator. + + + + + Returns the only element of a sequence, and throws an exception + if there is not exactly one element in the sequence. + + + + + Returns the only element of a sequence that satisfies a + specified condition, and throws an exception if more than one + such element exists. + + + + + Returns the only element of a sequence, or a default value if + the sequence is empty; this method throws an exception if there + is more than one element in the sequence. + + + + + Returns the only element of a sequence that satisfies a + specified condition or a default value if no such element + exists; this method throws an exception if more than one element + satisfies the condition. + + + + + Returns the element at a specified index in a sequence. + + + + + Returns the element at a specified index in a sequence or a + default value if the index is out of range. + + + + + Inverts the order of the elements in a sequence. + + + + + Returns a specified number of contiguous elements from the start + of a sequence. + + + + + Bypasses a specified number of elements in a sequence and then + returns the remaining elements. + + + + + Bypasses elements in a sequence as long as a specified condition + is true and then returns the remaining elements. + + + + + Bypasses elements in a sequence as long as a specified condition + is true and then returns the remaining elements. The element's + index is used in the logic of the predicate function. + + + + + Returns the number of elements in a sequence. + + + + + Returns a number that represents how many elements in the + specified sequence satisfy a condition. + + + + + Returns a that represents the total number + of elements in a sequence. + + + + + Returns a that represents how many elements + in a sequence satisfy a condition. + + + + + Concatenates two sequences. + + + + + Creates a from an . + + + + + Creates an array from an . + + + + + Returns distinct elements from a sequence by using the default + equality comparer to compare values. + + + + + Returns distinct elements from a sequence by using a specified + to compare values. + + + + + Creates a from an + according to a specified key + selector function. + + + + + Creates a from an + according to a specified key + selector function and a key comparer. + + + + + Creates a from an + according to specified key + and element selector functions. + + + + + Creates a from an + according to a specified key + selector function, a comparer and an element selector function. + + + + + Groups the elements of a sequence according to a specified key + selector function. + + + + + Groups the elements of a sequence according to a specified key + selector function and compares the keys by using a specified + comparer. + + + + + Groups the elements of a sequence according to a specified key + selector function and projects the elements for each group by + using a specified function. + + + + + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. + + + + + Groups the elements of a sequence according to a key selector + function. The keys are compared by using a comparer and each + group's elements are projected by using a specified function. + + + + + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. The elements of each group are projected by using a + specified function. + + + + + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. The keys are compared by using a specified comparer. + + + + + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. Key values are compared by using a specified comparer, + and the elements of each group are projected by using a + specified function. + + + + + Applies an accumulator function over a sequence. + + + + + Applies an accumulator function over a sequence. The specified + seed value is used as the initial accumulator value. + + + + + Applies an accumulator function over a sequence. The specified + seed value is used as the initial accumulator value, and the + specified function is used to select the result value. + + + + + Produces the set union of two sequences by using the default + equality comparer. + + + + + Produces the set union of two sequences by using a specified + . + + + + + Returns the elements of the specified sequence or the type + parameter's default value in a singleton collection if the + sequence is empty. + + + + + Returns the elements of the specified sequence or the specified + value in a singleton collection if the sequence is empty. + + + + + Determines whether all elements of a sequence satisfy a condition. + + + + + Determines whether a sequence contains any elements. + + + + + Determines whether any element of a sequence satisfies a + condition. + + + + + Determines whether a sequence contains a specified element by + using the default equality comparer. + + + + + Determines whether a sequence contains a specified element by + using a specified . + + + + + Determines whether two sequences are equal by comparing the + elements by using the default equality comparer for their type. + + + + + Determines whether two sequences are equal by comparing their + elements by using a specified . + + + + + Base implementation for Min/Max operator. + + + + + Base implementation for Min/Max operator for nullable types. + + + + + Returns the minimum value in a generic sequence. + + + + + Invokes a transform function on each element of a generic + sequence and returns the minimum resulting value. + + + + + Returns the maximum value in a generic sequence. + + + + + Invokes a transform function on each element of a generic + sequence and returns the maximum resulting value. + + + + + Makes an enumerator seen as enumerable once more. + + + The supplied enumerator must have been started. The first element + returned is the element the enumerator was on when passed in. + DO NOT use this method if the caller must be a generator. It is + mostly safe among aggregate operations. + + + + + Sorts the elements of a sequence in ascending order according to a key. + + + + + Sorts the elements of a sequence in ascending order by using a + specified comparer. + + + + + Sorts the elements of a sequence in descending order according to a key. + + + + + Sorts the elements of a sequence in descending order by using a + specified comparer. + + + + + Performs a subsequent ordering of the elements in a sequence in + ascending order according to a key. + + + + + Performs a subsequent ordering of the elements in a sequence in + ascending order by using a specified comparer. + + + + + Performs a subsequent ordering of the elements in a sequence in + descending order, according to a key. + + + + + Performs a subsequent ordering of the elements in a sequence in + descending order by using a specified comparer. + + + + + Base implementation for Intersect and Except operators. + + + + + Produces the set intersection of two sequences by using the + default equality comparer to compare values. + + + + + Produces the set intersection of two sequences by using the + specified to compare values. + + + + + Produces the set difference of two sequences by using the + default equality comparer to compare values. + + + + + Produces the set difference of two sequences by using the + specified to compare values. + + + + + Creates a from an + according to a specified key + selector function. + + + + + Creates a from an + according to a specified key + selector function and key comparer. + + + + + Creates a from an + according to specified key + selector and element selector functions. + + + + + Creates a from an + according to a specified key + selector function, a comparer, and an element selector function. + + + + + Correlates the elements of two sequences based on matching keys. + The default equality comparer is used to compare keys. + + + + + Correlates the elements of two sequences based on matching keys. + The default equality comparer is used to compare keys. A + specified is used to compare keys. + + + + + Correlates the elements of two sequences based on equality of + keys and groups the results. The default equality comparer is + used to compare keys. + + + + + Correlates the elements of two sequences based on equality of + keys and groups the results. The default equality comparer is + used to compare keys. A specified + is used to compare keys. + + + + + Computes the sum of a sequence of values. + + + + + Computes the sum of a sequence of + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of values. + + + + + Computes the average of a sequence of values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Computes the sum of a sequence of nullable values. + + + + + Computes the sum of a sequence of nullable + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of nullable values. + + + + + Computes the average of a sequence of nullable values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Returns the minimum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the minimum nullable value. + + + + + Returns the maximum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the maximum nullable value. + + + + + Computes the sum of a sequence of values. + + + + + Computes the sum of a sequence of + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of values. + + + + + Computes the average of a sequence of values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Computes the sum of a sequence of nullable values. + + + + + Computes the sum of a sequence of nullable + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of nullable values. + + + + + Computes the average of a sequence of nullable values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Returns the minimum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the minimum nullable value. + + + + + Returns the maximum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the maximum nullable value. + + + + + Computes the sum of a sequence of nullable values. + + + + + Computes the sum of a sequence of + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of values. + + + + + Computes the average of a sequence of values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Computes the sum of a sequence of nullable values. + + + + + Computes the sum of a sequence of nullable + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of nullable values. + + + + + Computes the average of a sequence of nullable values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Returns the minimum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the minimum nullable value. + + + + + Returns the maximum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the maximum nullable value. + + + + + Computes the sum of a sequence of values. + + + + + Computes the sum of a sequence of + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of values. + + + + + Computes the average of a sequence of values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Computes the sum of a sequence of nullable values. + + + + + Computes the sum of a sequence of nullable + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of nullable values. + + + + + Computes the average of a sequence of nullable values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Returns the minimum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the minimum nullable value. + + + + + Returns the maximum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the maximum nullable value. + + + + + Computes the sum of a sequence of values. + + + + + Computes the sum of a sequence of + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of values. + + + + + Computes the average of a sequence of values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Computes the sum of a sequence of nullable values. + + + + + Computes the sum of a sequence of nullable + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of nullable values. + + + + + Computes the average of a sequence of nullable values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Returns the minimum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the minimum nullable value. + + + + + Returns the maximum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the maximum nullable value. + + + + + Represents a collection of objects that have a common key. + + + + + Gets the key of the . + + + + + Defines an indexer, size property, and Boolean search method for + data structures that map keys to + sequences of values. + + + + + Represents a sorted sequence. + + + + + Performs a subsequent ordering on the elements of an + according to a key. + + + + + Represents a collection of keys each mapped to one or more values. + + + + + Gets the number of key/value collection pairs in the . + + + + + Gets the collection of values indexed by the specified key. + + + + + Determines whether a specified key is in the . + + + + + Applies a transform function to each key and its associated + values and returns the results. + + + + + Returns a generic enumerator that iterates through the . + + + + + See issue #11 + for why this method is needed and cannot be expressed as a + lambda at the call site. + + + + + See issue #11 + for why this method is needed and cannot be expressed as a + lambda at the call site. + + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls result in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + + This attribute allows us to define extension methods without + requiring .NET Framework 3.5. For more information, see the section, + Extension Methods in .NET Framework 2.0 Apps, + of Basic Instincts: Extension Methods + column in MSDN Magazine, + issue Nov 2007. + + + + Specifies that an output will not be null even if the corresponding type allows it. + + + Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + + Gets the return value condition. + + + Specifies that an output may be null even if the corresponding type disallows it. + + + Specifies that null is allowed as an input even if the corresponding type disallows it. + + + + Specifies that the method will not return if the associated Boolean parameter is passed the specified value. + + + + + Initializes a new instance of the class. + + + The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to + the associated parameter matches this value. + + + + Gets the condition parameter value. + + + diff --git a/packages/Newtonsoft.Json.13.0.1/lib/net35/Newtonsoft.Json.dll b/packages/Newtonsoft.Json.13.0.1/lib/net35/Newtonsoft.Json.dll new file mode 100644 index 0000000..fce555f Binary files /dev/null and b/packages/Newtonsoft.Json.13.0.1/lib/net35/Newtonsoft.Json.dll differ diff --git a/packages/Newtonsoft.Json.13.0.1/lib/net35/Newtonsoft.Json.xml b/packages/Newtonsoft.Json.13.0.1/lib/net35/Newtonsoft.Json.xml new file mode 100644 index 0000000..2da5ea0 --- /dev/null +++ b/packages/Newtonsoft.Json.13.0.1/lib/net35/Newtonsoft.Json.xml @@ -0,0 +1,9483 @@ + + + + Newtonsoft.Json + + + + + Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Initializes a new instance of the class. + + The to write to. + + + + Initializes a new instance of the class. + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an Entity Framework to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + The default value is false. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets the naming strategy used to resolve how enum text is written. + + The naming strategy used to resolve how enum text is written. + + + + Gets or sets a value indicating whether integer values are allowed when serializing and deserializing. + The default value is true. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + true if the written enum text will be camel case; otherwise, false. + + + + Initializes a new instance of the class. + + The naming strategy used to resolve how enum text is written. + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from Unix epoch time + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attribute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Gets or sets a value indicating whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + true if special characters are encoded; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + true if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + The default JSON name table implementation. + + + + + Initializes a new instance of the class. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Adds the specified string into name table. + + The string to add. + This method is not thread-safe. + The resolved string. + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + The minimum required length of the array. The returned array may be longer. + The rented array from the pool. This array must be returned when it is no longer needed. + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, when returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, when returns false). + + + + Instructs the how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the to a JSON string. + + The node to serialize. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to serialize. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Serializes the to a JSON string. + + The node to convert to JSON. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to convert to JSON. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. If there is no existing value then null will be used. + The existing value has a value. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Gets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + + + + + Initializes a new instance of the class. + + Type of the . + + + + Initializes a new instance of the class. + + Type of the . + Parameter list to use when constructing the . Can be null. + + + + Represents a collection of . + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Initializes a new instance of the class. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Base class for a table of atomized string objects. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to always serialize the member with the specified name. + + + + + Gets or sets the type used when serializing the property's collection items. + + The collection's items type. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Specifies the state of the reader. + + + + + A read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true to close the source when this reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Reads the next JSON token from the source. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + A flag indicating whether the position index inside an array should be updated. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the reader's state to . + If is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is . + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + The default value is false. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance. + The will not use default settings + from . + + + A new instance. + The will not use default settings + from . + + + + + Creates a new instance using the specified . + The will not use default settings + from . + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings + from . + + + + + Creates a new instance. + The will use default settings + from . + + + A new instance. + The will use default settings + from . + + + + + Creates a new instance using the specified . + The will use default settings + from as well as the specified . + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings + from as well as the specified . + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Specifies the settings on a object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + The default value is . + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets the used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets a function that creates the used by the serializer when resolving references. + + A function that creates the used by the serializer when resolving references. + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + The default value is false. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Initializes a new instance of the class with the specified . + + The containing the JSON data to read. + + + + Gets or sets the reader's property name table. + + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how many s to write for each level in the hierarchy when is set to . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the class using the specified . + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying . + + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides validation. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a []. + + + A [] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true to close the destination when this writer is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If is set to true, the destination is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current JSON object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Sets the state of the . + + The being written. + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a with type . + + + + + Specifies how duplicate property names are handled when loading JSON. + + + + + Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used. + + + + + Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used. + + + + + Throw a when a duplicate property is encountered. + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a collection of objects. + + The type of token. + + + + Gets the of with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads an from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + + + Returns an enumerator that iterates through the collection. + + + A of that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + + + + Removes all items from the . + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + + + Represents a JSON constructor. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a token that can contain other tokens. + + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An of containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An of containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates a that can be used to add tokens to the . + + A that is ready to have content written to it. + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of objects. + + The type of token. + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the of with the specified key. + + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Represents a JSON object. + + + + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Occurs when a property value is changing. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets the node type for this . + + The type. + + + + Gets an of of this object's properties. + + An of of this object's properties. + + + + Gets a with the specified name. + + The property name. + A with the specified name or null. + + + + Gets the with the specified name. + The exact name will be searched for first and if no matching property is found then + the will be used to match a property. + + The property name. + One of the enumeration values that specifies how the strings will be compared. + A matched with the specified name or null. + + + + Gets a of of this object's property values. + + A of of this object's property values. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + true if the JSON object has the specified property name; otherwise, false. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries to get the with the specified property name. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Represents a JSON property. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. + When the or + + methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents a raw JSON string. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + The default value is . + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + The default value is . + + The JSON line info handling. + + + + Gets or sets how duplicate property names in JSON objects are handled when loading JSON. + The default value is . + + The JSON duplicate property name handling. + + + + Specifies the settings used when merging JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Gets or sets the comparison used to match property names while merging. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + The comparison used to match property names while merging. + + + + Specifies the settings used when selecting JSON. + + + + + Gets or sets a flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + A flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + + + Represents an abstract JSON token. + + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + A collection of s which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Creates a for this token. + + A that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object. + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + Creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A , or null. + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + The used to select tokens. + A . + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + The used to select tokens. + An of that contains the selected elements. + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the at the reader's current position. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Initializes a new instance of the class. + + The token to read from. + The initial path of the token. It is prepended to the returned . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying . + + + + + Closes this writer. + If is set to true, the JSON is auto-completed. + + + Setting to true has no additional effect, since the underlying is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a value. + An error will be raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a undefined value. + + A undefined value. + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a . + + A into which this method will write. + A collection of s which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not of the same type as this instance. + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). + + A flag indicating whether the value can not equal the number defined by the minimum attribute (). + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). + + A flag indicating whether the value can not equal the number defined by the maximum attribute (). + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains JSON Schema. + + A that contains JSON Schema. + A populated from the string that contains JSON Schema. + + + + Load a from a string that contains JSON Schema using the specified . + + A that contains JSON Schema. + The resolver. + A populated from the string that contains JSON Schema. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + + Resolves from an id. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + + The value types allowed by the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + A camel case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolve a for a given . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. + + + true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. + + + true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer that writes to the application's instances. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Used by to resolve a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + The that will be used to filter the trace messages passed to the writer. + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a used by the . + + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + true if the creator has a parameter with the collection values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Handles serialization callback events. + + The object that raised the callback event. + The streaming context. + + + + Handles serialization error callback events. + + The object that raised the callback event. + The streaming context. + The error context. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets the internally resolved for the contract's type. + This converter is used as a fallback converter when no other converter is resolved. + Setting will always override this converter. + + + + + Gets or sets all methods called immediately after deserialization of the object. + + The methods called immediately after deserialization of the object. + + + + Gets or sets all methods called during deserialization of the object. + + The methods called during deserialization of the object. + + + + Gets or sets all methods called after serialization of the object graph. + + The methods called after serialization of the object graph. + + + + Gets or sets all methods called before serialization of the object. + + The methods called before serialization of the object. + + + + Gets or sets all method called when an error is thrown during the serialization of the object. + + The methods called when an error is thrown during the serialization of the object. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + true if the default object creator is non-public; otherwise, false. + + + + Contract details for a used by the . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + true if the creator has a parameter with the dictionary values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object constructor. + + The object constructor. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets a value indicating whether has a value specified. + + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the type described by the argument. + + The type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + A kebab case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Initializes a new instance of the class. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Returns an enumeration of the most recent trace messages. + + An enumeration of the most recent trace messages. + + + + Returns a of the most recent trace messages. + + + A of the most recent trace messages. + + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + A flag indicating whether the property has had a name explicitly specified. + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Hash code calculation + + + + + + Object equality implementation + + + + + + + Compare to another NamingStrategy + + + + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + The instance to get attributes for. This parameter should be a , , or . + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. + + + + + Specifies type name handling options for the . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON + you must specify a root type object with + or . + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls result in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + Specifies that an output will not be null even if the corresponding type allows it. + + + Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + + Gets the return value condition. + + + Specifies that an output may be null even if the corresponding type disallows it. + + + Specifies that null is allowed as an input even if the corresponding type disallows it. + + + + Specifies that the method will not return if the associated Boolean parameter is passed the specified value. + + + + + Initializes a new instance of the class. + + + The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to + the associated parameter matches this value. + + + + Gets the condition parameter value. + + + diff --git a/packages/Newtonsoft.Json.13.0.1/lib/net40/Newtonsoft.Json.dll b/packages/Newtonsoft.Json.13.0.1/lib/net40/Newtonsoft.Json.dll new file mode 100644 index 0000000..978356d Binary files /dev/null and b/packages/Newtonsoft.Json.13.0.1/lib/net40/Newtonsoft.Json.dll differ diff --git a/packages/Newtonsoft.Json.13.0.1/lib/net40/Newtonsoft.Json.xml b/packages/Newtonsoft.Json.13.0.1/lib/net40/Newtonsoft.Json.xml new file mode 100644 index 0000000..7ac0cc6 --- /dev/null +++ b/packages/Newtonsoft.Json.13.0.1/lib/net40/Newtonsoft.Json.xml @@ -0,0 +1,9683 @@ + + + + Newtonsoft.Json + + + + + Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Initializes a new instance of the class. + + The to write to. + + + + Initializes a new instance of the class. + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a F# discriminated union type to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an Entity Framework to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + The default value is false. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets the naming strategy used to resolve how enum text is written. + + The naming strategy used to resolve how enum text is written. + + + + Gets or sets a value indicating whether integer values are allowed when serializing and deserializing. + The default value is true. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + true if the written enum text will be camel case; otherwise, false. + + + + Initializes a new instance of the class. + + The naming strategy used to resolve how enum text is written. + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from Unix epoch time + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attribute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Gets or sets a value indicating whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + true if special characters are encoded; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + true if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + The default JSON name table implementation. + + + + + Initializes a new instance of the class. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Adds the specified string into name table. + + The string to add. + This method is not thread-safe. + The resolved string. + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + The minimum required length of the array. The returned array may be longer. + The rented array from the pool. This array must be returned when it is no longer needed. + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, when returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, when returns false). + + + + Instructs the how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the to a JSON string. + + The node to serialize. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to serialize. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Serializes the to a JSON string. + + The node to convert to JSON. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to convert to JSON. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. If there is no existing value then null will be used. + The existing value has a value. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Gets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + + + + + Initializes a new instance of the class. + + Type of the . + + + + Initializes a new instance of the class. + + Type of the . + Parameter list to use when constructing the . Can be null. + + + + Represents a collection of . + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Initializes a new instance of the class. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Base class for a table of atomized string objects. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to always serialize the member with the specified name. + + + + + Gets or sets the type used when serializing the property's collection items. + + The collection's items type. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Specifies the state of the reader. + + + + + A read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true to close the source when this reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Reads the next JSON token from the source. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + A flag indicating whether the position index inside an array should be updated. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the reader's state to . + If is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is . + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + The default value is false. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance. + The will not use default settings + from . + + + A new instance. + The will not use default settings + from . + + + + + Creates a new instance using the specified . + The will not use default settings + from . + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings + from . + + + + + Creates a new instance. + The will use default settings + from . + + + A new instance. + The will use default settings + from . + + + + + Creates a new instance using the specified . + The will use default settings + from as well as the specified . + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings + from as well as the specified . + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Specifies the settings on a object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + The default value is . + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets the used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets a function that creates the used by the serializer when resolving references. + + A function that creates the used by the serializer when resolving references. + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + The default value is false. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Initializes a new instance of the class with the specified . + + The containing the JSON data to read. + + + + Gets or sets the reader's property name table. + + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how many s to write for each level in the hierarchy when is set to . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the class using the specified . + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying . + + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides validation. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a []. + + + A [] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true to close the destination when this writer is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If is set to true, the destination is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current JSON object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Sets the state of the . + + The being written. + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a with type . + + + + + Specifies how duplicate property names are handled when loading JSON. + + + + + Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used. + + + + + Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used. + + + + + Throw a when a duplicate property is encountered. + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a collection of objects. + + The type of token. + + + + Gets the of with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads an from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + + + Returns an enumerator that iterates through the collection. + + + A of that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + + + + Removes all items from the . + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + + + Represents a JSON constructor. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a token that can contain other tokens. + + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Occurs when the items list of the collection has changed, or the collection is reset. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An of containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An of containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates a that can be used to add tokens to the . + + A that is ready to have content written to it. + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of objects. + + The type of token. + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the of with the specified key. + + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Represents a JSON object. + + + + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Occurs when a property value is changing. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets the node type for this . + + The type. + + + + Gets an of of this object's properties. + + An of of this object's properties. + + + + Gets a with the specified name. + + The property name. + A with the specified name or null. + + + + Gets the with the specified name. + The exact name will be searched for first and if no matching property is found then + the will be used to match a property. + + The property name. + One of the enumeration values that specifies how the strings will be compared. + A matched with the specified name or null. + + + + Gets a of of this object's property values. + + A of of this object's property values. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + true if the JSON object has the specified property name; otherwise, false. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries to get the with the specified property name. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Represents a JSON property. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. + When the or + + methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents a raw JSON string. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + The default value is . + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + The default value is . + + The JSON line info handling. + + + + Gets or sets how duplicate property names in JSON objects are handled when loading JSON. + The default value is . + + The JSON duplicate property name handling. + + + + Specifies the settings used when merging JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Gets or sets the comparison used to match property names while merging. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + The comparison used to match property names while merging. + + + + Specifies the settings used when selecting JSON. + + + + + Gets or sets a flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + A flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + + + Represents an abstract JSON token. + + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + A collection of s which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Creates a for this token. + + A that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object. + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + Creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A , or null. + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + The used to select tokens. + A . + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + The used to select tokens. + An of that contains the selected elements. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the at the reader's current position. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Initializes a new instance of the class. + + The token to read from. + The initial path of the token. It is prepended to the returned . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying . + + + + + Closes this writer. + If is set to true, the JSON is auto-completed. + + + Setting to true has no additional effect, since the underlying is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a value. + An error will be raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a undefined value. + + A undefined value. + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a . + + A into which this method will write. + A collection of s which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not of the same type as this instance. + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). + + A flag indicating whether the value can not equal the number defined by the minimum attribute (). + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). + + A flag indicating whether the value can not equal the number defined by the maximum attribute (). + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains JSON Schema. + + A that contains JSON Schema. + A populated from the string that contains JSON Schema. + + + + Load a from a string that contains JSON Schema using the specified . + + A that contains JSON Schema. + The resolver. + A populated from the string that contains JSON Schema. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + + Resolves from an id. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + + The value types allowed by the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + A camel case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolve a for a given . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. + + + true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. + + + true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer that writes to the application's instances. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Used by to resolve a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + The that will be used to filter the trace messages passed to the writer. + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a used by the . + + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + true if the creator has a parameter with the collection values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Handles serialization callback events. + + The object that raised the callback event. + The streaming context. + + + + Handles serialization error callback events. + + The object that raised the callback event. + The streaming context. + The error context. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets the internally resolved for the contract's type. + This converter is used as a fallback converter when no other converter is resolved. + Setting will always override this converter. + + + + + Gets or sets all methods called immediately after deserialization of the object. + + The methods called immediately after deserialization of the object. + + + + Gets or sets all methods called during deserialization of the object. + + The methods called during deserialization of the object. + + + + Gets or sets all methods called after serialization of the object graph. + + The methods called after serialization of the object graph. + + + + Gets or sets all methods called before serialization of the object. + + The methods called before serialization of the object. + + + + Gets or sets all method called when an error is thrown during the serialization of the object. + + The methods called when an error is thrown during the serialization of the object. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + true if the default object creator is non-public; otherwise, false. + + + + Contract details for a used by the . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + true if the creator has a parameter with the dictionary values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets the object's properties. + + The object's properties. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object constructor. + + The object constructor. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets a value indicating whether has a value specified. + + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the type described by the argument. + + The type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + A kebab case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Initializes a new instance of the class. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Returns an enumeration of the most recent trace messages. + + An enumeration of the most recent trace messages. + + + + Returns a of the most recent trace messages. + + + A of the most recent trace messages. + + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + A flag indicating whether the property has had a name explicitly specified. + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Hash code calculation + + + + + + Object equality implementation + + + + + + + Compare to another NamingStrategy + + + + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + The instance to get attributes for. This parameter should be a , , or . + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. + + + + + Specifies type name handling options for the . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON + you must specify a root type object with + or . + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls result in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + Specifies that an output will not be null even if the corresponding type allows it. + + + Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + + Gets the return value condition. + + + Specifies that an output may be null even if the corresponding type disallows it. + + + Specifies that null is allowed as an input even if the corresponding type disallows it. + + + + Specifies that the method will not return if the associated Boolean parameter is passed the specified value. + + + + + Initializes a new instance of the class. + + + The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to + the associated parameter matches this value. + + + + Gets the condition parameter value. + + + diff --git a/packages/Newtonsoft.Json.13.0.1/lib/net45/Newtonsoft.Json.dll b/packages/Newtonsoft.Json.13.0.1/lib/net45/Newtonsoft.Json.dll new file mode 100644 index 0000000..7af125a Binary files /dev/null and b/packages/Newtonsoft.Json.13.0.1/lib/net45/Newtonsoft.Json.dll differ diff --git a/packages/Newtonsoft.Json.13.0.1/lib/net45/Newtonsoft.Json.xml b/packages/Newtonsoft.Json.13.0.1/lib/net45/Newtonsoft.Json.xml new file mode 100644 index 0000000..008e0ca --- /dev/null +++ b/packages/Newtonsoft.Json.13.0.1/lib/net45/Newtonsoft.Json.xml @@ -0,0 +1,11305 @@ + + + + Newtonsoft.Json + + + + + Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Initializes a new instance of the class. + + The to write to. + + + + Initializes a new instance of the class. + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a F# discriminated union type to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an Entity Framework to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + The default value is false. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets the naming strategy used to resolve how enum text is written. + + The naming strategy used to resolve how enum text is written. + + + + Gets or sets a value indicating whether integer values are allowed when serializing and deserializing. + The default value is true. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + true if the written enum text will be camel case; otherwise, false. + + + + Initializes a new instance of the class. + + The naming strategy used to resolve how enum text is written. + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from Unix epoch time + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attribute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Gets or sets a value indicating whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + true if special characters are encoded; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + true if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + The default JSON name table implementation. + + + + + Initializes a new instance of the class. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Adds the specified string into name table. + + The string to add. + This method is not thread-safe. + The resolved string. + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + The minimum required length of the array. The returned array may be longer. + The rented array from the pool. This array must be returned when it is no longer needed. + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, when returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, when returns false). + + + + Instructs the how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the to a JSON string. + + The node to serialize. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to serialize. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Serializes the to a JSON string. + + The node to convert to JSON. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to convert to JSON. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. If there is no existing value then null will be used. + The existing value has a value. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Gets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + + + + + Initializes a new instance of the class. + + Type of the . + + + + Initializes a new instance of the class. + + Type of the . + Parameter list to use when constructing the . Can be null. + + + + Represents a collection of . + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Initializes a new instance of the class. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Base class for a table of atomized string objects. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to always serialize the member with the specified name. + + + + + Gets or sets the type used when serializing the property's collection items. + + The collection's items type. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously skips the children of the current token. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Specifies the state of the reader. + + + + + A read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true to close the source when this reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Reads the next JSON token from the source. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + A flag indicating whether the position index inside an array should be updated. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the reader's state to . + If is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is . + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + The default value is false. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance. + The will not use default settings + from . + + + A new instance. + The will not use default settings + from . + + + + + Creates a new instance using the specified . + The will not use default settings + from . + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings + from . + + + + + Creates a new instance. + The will use default settings + from . + + + A new instance. + The will use default settings + from . + + + + + Creates a new instance using the specified . + The will use default settings + from as well as the specified . + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings + from as well as the specified . + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Specifies the settings on a object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + The default value is . + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets the used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets a function that creates the used by the serializer when resolving references. + + A function that creates the used by the serializer when resolving references. + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + The default value is false. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Initializes a new instance of the class with the specified . + + The containing the JSON data to read. + + + + Gets or sets the reader's property name table. + + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how many s to write for each level in the hierarchy when is set to . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the class using the specified . + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying . + + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides validation. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a []. + + + A [] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously ets the state of the . + + The being written. + The value being written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true to close the destination when this writer is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If is set to true, the destination is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current JSON object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Sets the state of the . + + The being written. + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a with type . + + + + + Specifies how duplicate property names are handled when loading JSON. + + + + + Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used. + + + + + Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used. + + + + + Throw a when a duplicate property is encountered. + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a collection of objects. + + The type of token. + + + + Gets the of with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads an from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + + + Returns an enumerator that iterates through the collection. + + + A of that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + + + + Removes all items from the . + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + + + Represents a JSON constructor. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a token that can contain other tokens. + + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Occurs when the items list of the collection has changed, or the collection is reset. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An of containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An of containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates a that can be used to add tokens to the . + + A that is ready to have content written to it. + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of objects. + + The type of token. + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the of with the specified key. + + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Represents a JSON object. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Occurs when a property value is changing. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets the node type for this . + + The type. + + + + Gets an of of this object's properties. + + An of of this object's properties. + + + + Gets a with the specified name. + + The property name. + A with the specified name or null. + + + + Gets the with the specified name. + The exact name will be searched for first and if no matching property is found then + the will be used to match a property. + + The property name. + One of the enumeration values that specifies how the strings will be compared. + A matched with the specified name or null. + + + + Gets a of of this object's property values. + + A of of this object's property values. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + true if the JSON object has the specified property name; otherwise, false. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries to get the with the specified property name. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Represents a JSON property. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. + When the or + + methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents a raw JSON string. + + + + + Asynchronously creates an instance of with the content of the reader's current token. + + The reader. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns an instance of with the content of the reader's current token. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + The default value is . + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + The default value is . + + The JSON line info handling. + + + + Gets or sets how duplicate property names in JSON objects are handled when loading JSON. + The default value is . + + The JSON duplicate property name handling. + + + + Specifies the settings used when merging JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Gets or sets the comparison used to match property names while merging. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + The comparison used to match property names while merging. + + + + Specifies the settings used when selecting JSON. + + + + + Gets or sets a timeout that will be used when executing regular expressions. + + The timeout that will be used when executing regular expressions. + + + + Gets or sets a flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + A flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + + + Represents an abstract JSON token. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Writes this token to a asynchronously. + + A into which this method will write. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + A collection of s which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Creates a for this token. + + A that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object. + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + Creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A , or null. + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + The used to select tokens. + A . + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + The used to select tokens. + An of that contains the selected elements. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the at the reader's current position. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Initializes a new instance of the class. + + The token to read from. + The initial path of the token. It is prepended to the returned . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying . + + + + + Closes this writer. + If is set to true, the JSON is auto-completed. + + + Setting to true has no additional effect, since the underlying is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a value. + An error will be raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a undefined value. + + A undefined value. + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a . + + A into which this method will write. + A collection of s which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not of the same type as this instance. + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). + + A flag indicating whether the value can not equal the number defined by the minimum attribute (). + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). + + A flag indicating whether the value can not equal the number defined by the maximum attribute (). + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains JSON Schema. + + A that contains JSON Schema. + A populated from the string that contains JSON Schema. + + + + Load a from a string that contains JSON Schema using the specified . + + A that contains JSON Schema. + The resolver. + A populated from the string that contains JSON Schema. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + + Resolves from an id. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + + The value types allowed by the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + A camel case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolve a for a given . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. + + + true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. + + + true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer that writes to the application's instances. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Used by to resolve a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + The that will be used to filter the trace messages passed to the writer. + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a used by the . + + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + true if the creator has a parameter with the collection values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Handles serialization callback events. + + The object that raised the callback event. + The streaming context. + + + + Handles serialization error callback events. + + The object that raised the callback event. + The streaming context. + The error context. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets the internally resolved for the contract's type. + This converter is used as a fallback converter when no other converter is resolved. + Setting will always override this converter. + + + + + Gets or sets all methods called immediately after deserialization of the object. + + The methods called immediately after deserialization of the object. + + + + Gets or sets all methods called during deserialization of the object. + + The methods called during deserialization of the object. + + + + Gets or sets all methods called after serialization of the object graph. + + The methods called after serialization of the object graph. + + + + Gets or sets all methods called before serialization of the object. + + The methods called before serialization of the object. + + + + Gets or sets all method called when an error is thrown during the serialization of the object. + + The methods called when an error is thrown during the serialization of the object. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + true if the default object creator is non-public; otherwise, false. + + + + Contract details for a used by the . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + true if the creator has a parameter with the dictionary values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets the object's properties. + + The object's properties. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object constructor. + + The object constructor. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets a value indicating whether has a value specified. + + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the type described by the argument. + + The type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + A kebab case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Initializes a new instance of the class. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Returns an enumeration of the most recent trace messages. + + An enumeration of the most recent trace messages. + + + + Returns a of the most recent trace messages. + + + A of the most recent trace messages. + + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + A flag indicating whether the property has had a name explicitly specified. + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Hash code calculation + + + + + + Object equality implementation + + + + + + + Compare to another NamingStrategy + + + + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + The instance to get attributes for. This parameter should be a , , or . + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. + + + + + Specifies type name handling options for the . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON + you must specify a root type object with + or . + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls result in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + Specifies that an output will not be null even if the corresponding type allows it. + + + Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + + Gets the return value condition. + + + Specifies that an output may be null even if the corresponding type disallows it. + + + Specifies that null is allowed as an input even if the corresponding type disallows it. + + + + Specifies that the method will not return if the associated Boolean parameter is passed the specified value. + + + + + Initializes a new instance of the class. + + + The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to + the associated parameter matches this value. + + + + Gets the condition parameter value. + + + diff --git a/packages/Newtonsoft.Json.13.0.1/lib/netstandard1.0/Newtonsoft.Json.dll b/packages/Newtonsoft.Json.13.0.1/lib/netstandard1.0/Newtonsoft.Json.dll new file mode 100644 index 0000000..8464ac9 Binary files /dev/null and b/packages/Newtonsoft.Json.13.0.1/lib/netstandard1.0/Newtonsoft.Json.dll differ diff --git a/packages/Newtonsoft.Json.13.0.1/lib/netstandard1.0/Newtonsoft.Json.xml b/packages/Newtonsoft.Json.13.0.1/lib/netstandard1.0/Newtonsoft.Json.xml new file mode 100644 index 0000000..53b811c --- /dev/null +++ b/packages/Newtonsoft.Json.13.0.1/lib/netstandard1.0/Newtonsoft.Json.xml @@ -0,0 +1,10993 @@ + + + + Newtonsoft.Json + + + + + Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Initializes a new instance of the class. + + The to write to. + + + + Initializes a new instance of the class. + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a F# discriminated union type to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + The default value is false. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets the naming strategy used to resolve how enum text is written. + + The naming strategy used to resolve how enum text is written. + + + + Gets or sets a value indicating whether integer values are allowed when serializing and deserializing. + The default value is true. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + true if the written enum text will be camel case; otherwise, false. + + + + Initializes a new instance of the class. + + The naming strategy used to resolve how enum text is written. + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from Unix epoch time + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attribute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Gets or sets a value indicating whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + true if special characters are encoded; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + true if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + The default JSON name table implementation. + + + + + Initializes a new instance of the class. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Adds the specified string into name table. + + The string to add. + This method is not thread-safe. + The resolved string. + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + The minimum required length of the array. The returned array may be longer. + The rented array from the pool. This array must be returned when it is no longer needed. + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, when returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, when returns false). + + + + Instructs the how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the to a JSON string. + + The node to convert to JSON. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to convert to JSON. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. If there is no existing value then null will be used. + The existing value has a value. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Gets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + + + + + Initializes a new instance of the class. + + Type of the . + + + + Initializes a new instance of the class. + + Type of the . + Parameter list to use when constructing the . Can be null. + + + + Represents a collection of . + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Initializes a new instance of the class. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Base class for a table of atomized string objects. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to always serialize the member with the specified name. + + + + + Gets or sets the type used when serializing the property's collection items. + + The collection's items type. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously skips the children of the current token. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Specifies the state of the reader. + + + + + A read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true to close the source when this reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Reads the next JSON token from the source. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + A flag indicating whether the position index inside an array should be updated. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the reader's state to . + If is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is . + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + The default value is false. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance. + The will not use default settings + from . + + + A new instance. + The will not use default settings + from . + + + + + Creates a new instance using the specified . + The will not use default settings + from . + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings + from . + + + + + Creates a new instance. + The will use default settings + from . + + + A new instance. + The will use default settings + from . + + + + + Creates a new instance using the specified . + The will use default settings + from as well as the specified . + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings + from as well as the specified . + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Specifies the settings on a object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + The default value is . + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets the used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets a function that creates the used by the serializer when resolving references. + + A function that creates the used by the serializer when resolving references. + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + The default value is false. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Initializes a new instance of the class with the specified . + + The containing the JSON data to read. + + + + Gets or sets the reader's property name table. + + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how many s to write for each level in the hierarchy when is set to . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the class using the specified . + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying . + + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides validation. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a []. + + + A [] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously ets the state of the . + + The being written. + The value being written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true to close the destination when this writer is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If is set to true, the destination is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current JSON object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Sets the state of the . + + The being written. + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class + with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a with type . + + + + + Specifies how duplicate property names are handled when loading JSON. + + + + + Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used. + + + + + Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used. + + + + + Throw a when a duplicate property is encountered. + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a collection of objects. + + The type of token. + + + + Gets the of with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads an from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + + + Returns an enumerator that iterates through the collection. + + + A of that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + + + + Removes all items from the . + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + + + Represents a JSON constructor. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a token that can contain other tokens. + + + + + Occurs when the items list of the collection has changed, or the collection is reset. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the event. + + The instance containing the event data. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An of containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An of containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates a that can be used to add tokens to the . + + A that is ready to have content written to it. + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of objects. + + The type of token. + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the of with the specified key. + + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Represents a JSON object. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets the node type for this . + + The type. + + + + Gets an of of this object's properties. + + An of of this object's properties. + + + + Gets a with the specified name. + + The property name. + A with the specified name or null. + + + + Gets the with the specified name. + The exact name will be searched for first and if no matching property is found then + the will be used to match a property. + + The property name. + One of the enumeration values that specifies how the strings will be compared. + A matched with the specified name or null. + + + + Gets a of of this object's property values. + + A of of this object's property values. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + true if the JSON object has the specified property name; otherwise, false. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries to get the with the specified property name. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Represents a JSON property. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a raw JSON string. + + + + + Asynchronously creates an instance of with the content of the reader's current token. + + The reader. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns an instance of with the content of the reader's current token. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + The default value is . + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + The default value is . + + The JSON line info handling. + + + + Gets or sets how duplicate property names in JSON objects are handled when loading JSON. + The default value is . + + The JSON duplicate property name handling. + + + + Specifies the settings used when merging JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Gets or sets the comparison used to match property names while merging. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + The comparison used to match property names while merging. + + + + Specifies the settings used when selecting JSON. + + + + + Gets or sets a timeout that will be used when executing regular expressions. + + The timeout that will be used when executing regular expressions. + + + + Gets or sets a flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + A flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + + + Represents an abstract JSON token. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Writes this token to a asynchronously. + + A into which this method will write. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + A collection of s which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Creates a for this token. + + A that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object. + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + Creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A , or null. + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + The used to select tokens. + A . + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + The used to select tokens. + An of that contains the selected elements. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the at the reader's current position. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Initializes a new instance of the class. + + The token to read from. + The initial path of the token. It is prepended to the returned . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying . + + + + + Closes this writer. + If is set to true, the JSON is auto-completed. + + + Setting to true has no additional effect, since the underlying is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a value. + An error will be raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a undefined value. + + A undefined value. + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a . + + A into which this method will write. + A collection of s which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not of the same type as this instance. + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). + + A flag indicating whether the value can not equal the number defined by the minimum attribute (). + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). + + A flag indicating whether the value can not equal the number defined by the maximum attribute (). + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains JSON Schema. + + A that contains JSON Schema. + A populated from the string that contains JSON Schema. + + + + Load a from a string that contains JSON Schema using the specified . + + A that contains JSON Schema. + The resolver. + A populated from the string that contains JSON Schema. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + + Resolves from an id. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + + The value types allowed by the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Allows users to control class loading and mandate what class to load. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + A camel case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolve a for a given . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. + + + true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. + + + true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Used by to resolve a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + The that will be used to filter the trace messages passed to the writer. + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a used by the . + + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + true if the creator has a parameter with the collection values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Handles serialization callback events. + + The object that raised the callback event. + The streaming context. + + + + Handles serialization error callback events. + + The object that raised the callback event. + The streaming context. + The error context. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets the internally resolved for the contract's type. + This converter is used as a fallback converter when no other converter is resolved. + Setting will always override this converter. + + + + + Gets or sets all methods called immediately after deserialization of the object. + + The methods called immediately after deserialization of the object. + + + + Gets or sets all methods called during deserialization of the object. + + The methods called during deserialization of the object. + + + + Gets or sets all methods called after serialization of the object graph. + + The methods called after serialization of the object graph. + + + + Gets or sets all methods called before serialization of the object. + + The methods called before serialization of the object. + + + + Gets or sets all method called when an error is thrown during the serialization of the object. + + The methods called when an error is thrown during the serialization of the object. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + true if the default object creator is non-public; otherwise, false. + + + + Contract details for a used by the . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + true if the creator has a parameter with the dictionary values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets the object's properties. + + The object's properties. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets a value indicating whether has a value specified. + + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the type described by the argument. + + The type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + A kebab case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Initializes a new instance of the class. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Returns an enumeration of the most recent trace messages. + + An enumeration of the most recent trace messages. + + + + Returns a of the most recent trace messages. + + + A of the most recent trace messages. + + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + A flag indicating whether the property has had a name explicitly specified. + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Hash code calculation + + + + + + Object equality implementation + + + + + + + Compare to another NamingStrategy + + + + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + The instance to get attributes for. This parameter should be a , , or . + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Specifies what messages to output for the class. + + + + + Output no tracing and debugging messages. + + + + + Output error-handling messages. + + + + + Output warnings and error-handling messages. + + + + + Output informational messages, warnings, and error-handling messages. + + + + + Output all debugging and tracing messages. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. + + + + + Specifies type name handling options for the . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON + you must specify a root type object with + or . + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + List of primitive types which can be widened. + + + + + Widening masks for primitive types above. + Index of the value in this array defines a type we're widening, + while the bits in mask define types it can be widened to (including itself). + + For example, value at index 0 defines a bool type, and it only has bit 0 set, + i.e. bool values can be assigned only to bool. + + + + + Checks if value of primitive type can be + assigned to parameter of primitive type . + + Source primitive type. + Target primitive type. + true if source type can be widened to target type, false otherwise. + + + + Checks if a set of values with given can be used + to invoke a method with specified . + + Method parameters. + Argument types. + Try to pack extra arguments into the last parameter when it is marked up with . + true if method can be called with given arguments, false otherwise. + + + + Compares two sets of parameters to determine + which one suits better for given argument types. + + + + + Returns a best method overload for given argument . + + List of method candidates. + Argument types. + Best method overload, or null if none matched. + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls result in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the method is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The is used to load the assembly. + + + + Specifies that an output will not be null even if the corresponding type allows it. + + + Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + + Gets the return value condition. + + + Specifies that an output may be null even if the corresponding type disallows it. + + + Specifies that null is allowed as an input even if the corresponding type disallows it. + + + + Specifies that the method will not return if the associated Boolean parameter is passed the specified value. + + + + + Initializes a new instance of the class. + + + The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to + the associated parameter matches this value. + + + + Gets the condition parameter value. + + + diff --git a/packages/Newtonsoft.Json.13.0.1/lib/netstandard1.3/Newtonsoft.Json.dll b/packages/Newtonsoft.Json.13.0.1/lib/netstandard1.3/Newtonsoft.Json.dll new file mode 100644 index 0000000..e59bef4 Binary files /dev/null and b/packages/Newtonsoft.Json.13.0.1/lib/netstandard1.3/Newtonsoft.Json.dll differ diff --git a/packages/Newtonsoft.Json.13.0.1/lib/netstandard1.3/Newtonsoft.Json.xml b/packages/Newtonsoft.Json.13.0.1/lib/netstandard1.3/Newtonsoft.Json.xml new file mode 100644 index 0000000..0770714 --- /dev/null +++ b/packages/Newtonsoft.Json.13.0.1/lib/netstandard1.3/Newtonsoft.Json.xml @@ -0,0 +1,11115 @@ + + + + Newtonsoft.Json + + + + + Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Initializes a new instance of the class. + + The to write to. + + + + Initializes a new instance of the class. + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a F# discriminated union type to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + The default value is false. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets the naming strategy used to resolve how enum text is written. + + The naming strategy used to resolve how enum text is written. + + + + Gets or sets a value indicating whether integer values are allowed when serializing and deserializing. + The default value is true. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + true if the written enum text will be camel case; otherwise, false. + + + + Initializes a new instance of the class. + + The naming strategy used to resolve how enum text is written. + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from Unix epoch time + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attribute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Gets or sets a value indicating whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + true if special characters are encoded; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + true if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + The default JSON name table implementation. + + + + + Initializes a new instance of the class. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Adds the specified string into name table. + + The string to add. + This method is not thread-safe. + The resolved string. + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + The minimum required length of the array. The returned array may be longer. + The rented array from the pool. This array must be returned when it is no longer needed. + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, when returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, when returns false). + + + + Instructs the how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the to a JSON string. + + The node to serialize. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to serialize. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Serializes the to a JSON string. + + The node to convert to JSON. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to convert to JSON. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. If there is no existing value then null will be used. + The existing value has a value. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Gets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + + + + + Initializes a new instance of the class. + + Type of the . + + + + Initializes a new instance of the class. + + Type of the . + Parameter list to use when constructing the . Can be null. + + + + Represents a collection of . + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Initializes a new instance of the class. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Base class for a table of atomized string objects. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to always serialize the member with the specified name. + + + + + Gets or sets the type used when serializing the property's collection items. + + The collection's items type. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously skips the children of the current token. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Specifies the state of the reader. + + + + + A read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true to close the source when this reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Reads the next JSON token from the source. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + A flag indicating whether the position index inside an array should be updated. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the reader's state to . + If is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is . + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + The default value is false. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance. + The will not use default settings + from . + + + A new instance. + The will not use default settings + from . + + + + + Creates a new instance using the specified . + The will not use default settings + from . + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings + from . + + + + + Creates a new instance. + The will use default settings + from . + + + A new instance. + The will use default settings + from . + + + + + Creates a new instance using the specified . + The will use default settings + from as well as the specified . + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings + from as well as the specified . + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Specifies the settings on a object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + The default value is . + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets the used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets a function that creates the used by the serializer when resolving references. + + A function that creates the used by the serializer when resolving references. + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + The default value is false. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Initializes a new instance of the class with the specified . + + The containing the JSON data to read. + + + + Gets or sets the reader's property name table. + + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how many s to write for each level in the hierarchy when is set to . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the class using the specified . + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying . + + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides validation. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a []. + + + A [] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously ets the state of the . + + The being written. + The value being written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true to close the destination when this writer is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If is set to true, the destination is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current JSON object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Sets the state of the . + + The being written. + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class + with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a with type . + + + + + Specifies how duplicate property names are handled when loading JSON. + + + + + Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used. + + + + + Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used. + + + + + Throw a when a duplicate property is encountered. + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a collection of objects. + + The type of token. + + + + Gets the of with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads an from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + + + Returns an enumerator that iterates through the collection. + + + A of that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + + + + Removes all items from the . + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + + + Represents a JSON constructor. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a token that can contain other tokens. + + + + + Occurs when the items list of the collection has changed, or the collection is reset. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the event. + + The instance containing the event data. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An of containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An of containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates a that can be used to add tokens to the . + + A that is ready to have content written to it. + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of objects. + + The type of token. + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the of with the specified key. + + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Represents a JSON object. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Occurs when a property value is changing. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets the node type for this . + + The type. + + + + Gets an of of this object's properties. + + An of of this object's properties. + + + + Gets a with the specified name. + + The property name. + A with the specified name or null. + + + + Gets the with the specified name. + The exact name will be searched for first and if no matching property is found then + the will be used to match a property. + + The property name. + One of the enumeration values that specifies how the strings will be compared. + A matched with the specified name or null. + + + + Gets a of of this object's property values. + + A of of this object's property values. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + true if the JSON object has the specified property name; otherwise, false. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries to get the with the specified property name. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Represents a JSON property. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a raw JSON string. + + + + + Asynchronously creates an instance of with the content of the reader's current token. + + The reader. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns an instance of with the content of the reader's current token. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + The default value is . + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + The default value is . + + The JSON line info handling. + + + + Gets or sets how duplicate property names in JSON objects are handled when loading JSON. + The default value is . + + The JSON duplicate property name handling. + + + + Specifies the settings used when merging JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Gets or sets the comparison used to match property names while merging. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + The comparison used to match property names while merging. + + + + Specifies the settings used when selecting JSON. + + + + + Gets or sets a timeout that will be used when executing regular expressions. + + The timeout that will be used when executing regular expressions. + + + + Gets or sets a flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + A flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + + + Represents an abstract JSON token. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Writes this token to a asynchronously. + + A into which this method will write. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + A collection of s which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Creates a for this token. + + A that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object. + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + Creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A , or null. + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + The used to select tokens. + A . + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + The used to select tokens. + An of that contains the selected elements. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the at the reader's current position. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Initializes a new instance of the class. + + The token to read from. + The initial path of the token. It is prepended to the returned . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying . + + + + + Closes this writer. + If is set to true, the JSON is auto-completed. + + + Setting to true has no additional effect, since the underlying is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a value. + An error will be raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a undefined value. + + A undefined value. + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a . + + A into which this method will write. + A collection of s which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not of the same type as this instance. + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). + + A flag indicating whether the value can not equal the number defined by the minimum attribute (). + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). + + A flag indicating whether the value can not equal the number defined by the maximum attribute (). + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains JSON Schema. + + A that contains JSON Schema. + A populated from the string that contains JSON Schema. + + + + Load a from a string that contains JSON Schema using the specified . + + A that contains JSON Schema. + The resolver. + A populated from the string that contains JSON Schema. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + + Resolves from an id. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + + The value types allowed by the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Allows users to control class loading and mandate what class to load. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + A camel case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolve a for a given . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. + + + true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. + + + true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Used by to resolve a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + The that will be used to filter the trace messages passed to the writer. + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a used by the . + + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + true if the creator has a parameter with the collection values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Handles serialization callback events. + + The object that raised the callback event. + The streaming context. + + + + Handles serialization error callback events. + + The object that raised the callback event. + The streaming context. + The error context. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets the internally resolved for the contract's type. + This converter is used as a fallback converter when no other converter is resolved. + Setting will always override this converter. + + + + + Gets or sets all methods called immediately after deserialization of the object. + + The methods called immediately after deserialization of the object. + + + + Gets or sets all methods called during deserialization of the object. + + The methods called during deserialization of the object. + + + + Gets or sets all methods called after serialization of the object graph. + + The methods called after serialization of the object graph. + + + + Gets or sets all methods called before serialization of the object. + + The methods called before serialization of the object. + + + + Gets or sets all method called when an error is thrown during the serialization of the object. + + The methods called when an error is thrown during the serialization of the object. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + true if the default object creator is non-public; otherwise, false. + + + + Contract details for a used by the . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + true if the creator has a parameter with the dictionary values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets the object's properties. + + The object's properties. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object constructor. + + The object constructor. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets a value indicating whether has a value specified. + + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the type described by the argument. + + The type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + A kebab case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Initializes a new instance of the class. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Returns an enumeration of the most recent trace messages. + + An enumeration of the most recent trace messages. + + + + Returns a of the most recent trace messages. + + + A of the most recent trace messages. + + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + A flag indicating whether the property has had a name explicitly specified. + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Hash code calculation + + + + + + Object equality implementation + + + + + + + Compare to another NamingStrategy + + + + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + The instance to get attributes for. This parameter should be a , , or . + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Specifies what messages to output for the class. + + + + + Output no tracing and debugging messages. + + + + + Output error-handling messages. + + + + + Output warnings and error-handling messages. + + + + + Output informational messages, warnings, and error-handling messages. + + + + + Output all debugging and tracing messages. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. + + + + + Specifies type name handling options for the . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON + you must specify a root type object with + or . + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + List of primitive types which can be widened. + + + + + Widening masks for primitive types above. + Index of the value in this array defines a type we're widening, + while the bits in mask define types it can be widened to (including itself). + + For example, value at index 0 defines a bool type, and it only has bit 0 set, + i.e. bool values can be assigned only to bool. + + + + + Checks if value of primitive type can be + assigned to parameter of primitive type . + + Source primitive type. + Target primitive type. + true if source type can be widened to target type, false otherwise. + + + + Checks if a set of values with given can be used + to invoke a method with specified . + + Method parameters. + Argument types. + Try to pack extra arguments into the last parameter when it is marked up with . + true if method can be called with given arguments, false otherwise. + + + + Compares two sets of parameters to determine + which one suits better for given argument types. + + + + + Returns a best method overload for given argument . + + List of method candidates. + Argument types. + Best method overload, or null if none matched. + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls result in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the method is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The is used to load the assembly. + + + + Specifies that an output will not be null even if the corresponding type allows it. + + + Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + + Gets the return value condition. + + + Specifies that an output may be null even if the corresponding type disallows it. + + + Specifies that null is allowed as an input even if the corresponding type disallows it. + + + + Specifies that the method will not return if the associated Boolean parameter is passed the specified value. + + + + + Initializes a new instance of the class. + + + The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to + the associated parameter matches this value. + + + + Gets the condition parameter value. + + + diff --git a/packages/Newtonsoft.Json.13.0.1/lib/netstandard2.0/Newtonsoft.Json.dll b/packages/Newtonsoft.Json.13.0.1/lib/netstandard2.0/Newtonsoft.Json.dll new file mode 100644 index 0000000..1ffeabe Binary files /dev/null and b/packages/Newtonsoft.Json.13.0.1/lib/netstandard2.0/Newtonsoft.Json.dll differ diff --git a/packages/Newtonsoft.Json.13.0.1/lib/netstandard2.0/Newtonsoft.Json.xml b/packages/Newtonsoft.Json.13.0.1/lib/netstandard2.0/Newtonsoft.Json.xml new file mode 100644 index 0000000..e3f5ad0 --- /dev/null +++ b/packages/Newtonsoft.Json.13.0.1/lib/netstandard2.0/Newtonsoft.Json.xml @@ -0,0 +1,11280 @@ + + + + Newtonsoft.Json + + + + + Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Initializes a new instance of the class. + + The to write to. + + + + Initializes a new instance of the class. + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a F# discriminated union type to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an Entity Framework to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + The default value is false. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets the naming strategy used to resolve how enum text is written. + + The naming strategy used to resolve how enum text is written. + + + + Gets or sets a value indicating whether integer values are allowed when serializing and deserializing. + The default value is true. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + true if the written enum text will be camel case; otherwise, false. + + + + Initializes a new instance of the class. + + The naming strategy used to resolve how enum text is written. + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from Unix epoch time + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attribute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Gets or sets a value indicating whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + true if special characters are encoded; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + true if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + The default JSON name table implementation. + + + + + Initializes a new instance of the class. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Adds the specified string into name table. + + The string to add. + This method is not thread-safe. + The resolved string. + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + The minimum required length of the array. The returned array may be longer. + The rented array from the pool. This array must be returned when it is no longer needed. + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, when returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, when returns false). + + + + Instructs the how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the to a JSON string. + + The node to serialize. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to serialize. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Serializes the to a JSON string. + + The node to convert to JSON. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to convert to JSON. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. If there is no existing value then null will be used. + The existing value has a value. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Gets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + + + + + Initializes a new instance of the class. + + Type of the . + + + + Initializes a new instance of the class. + + Type of the . + Parameter list to use when constructing the . Can be null. + + + + Represents a collection of . + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Initializes a new instance of the class. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Base class for a table of atomized string objects. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to always serialize the member with the specified name. + + + + + Gets or sets the type used when serializing the property's collection items. + + The collection's items type. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously skips the children of the current token. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Specifies the state of the reader. + + + + + A read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true to close the source when this reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Reads the next JSON token from the source. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + A flag indicating whether the position index inside an array should be updated. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the reader's state to . + If is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is . + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + The default value is false. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance. + The will not use default settings + from . + + + A new instance. + The will not use default settings + from . + + + + + Creates a new instance using the specified . + The will not use default settings + from . + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings + from . + + + + + Creates a new instance. + The will use default settings + from . + + + A new instance. + The will use default settings + from . + + + + + Creates a new instance using the specified . + The will use default settings + from as well as the specified . + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings + from as well as the specified . + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Specifies the settings on a object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + The default value is . + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets the used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets a function that creates the used by the serializer when resolving references. + + A function that creates the used by the serializer when resolving references. + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 128. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + The default value is false. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Initializes a new instance of the class with the specified . + + The containing the JSON data to read. + + + + Gets or sets the reader's property name table. + + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how many s to write for each level in the hierarchy when is set to . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the class using the specified . + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying . + + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides validation. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a []. + + + A [] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously ets the state of the . + + The being written. + The value being written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true to close the destination when this writer is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If is set to true, the destination is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current JSON object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Sets the state of the . + + The being written. + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a with type . + + + + + Specifies how duplicate property names are handled when loading JSON. + + + + + Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used. + + + + + Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used. + + + + + Throw a when a duplicate property is encountered. + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a collection of objects. + + The type of token. + + + + Gets the of with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads an from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + + + Returns an enumerator that iterates through the collection. + + + A of that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + + + + Removes all items from the . + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + + + Represents a JSON constructor. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a token that can contain other tokens. + + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Occurs when the items list of the collection has changed, or the collection is reset. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An of containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An of containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates a that can be used to add tokens to the . + + A that is ready to have content written to it. + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of objects. + + The type of token. + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the of with the specified key. + + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Represents a JSON object. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Occurs when a property value is changing. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets the node type for this . + + The type. + + + + Gets an of of this object's properties. + + An of of this object's properties. + + + + Gets a with the specified name. + + The property name. + A with the specified name or null. + + + + Gets the with the specified name. + The exact name will be searched for first and if no matching property is found then + the will be used to match a property. + + The property name. + One of the enumeration values that specifies how the strings will be compared. + A matched with the specified name or null. + + + + Gets a of of this object's property values. + + A of of this object's property values. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + true if the JSON object has the specified property name; otherwise, false. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries to get the with the specified property name. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Represents a JSON property. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. + When the or + + methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents a raw JSON string. + + + + + Asynchronously creates an instance of with the content of the reader's current token. + + The reader. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns an instance of with the content of the reader's current token. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + The default value is . + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + The default value is . + + The JSON line info handling. + + + + Gets or sets how duplicate property names in JSON objects are handled when loading JSON. + The default value is . + + The JSON duplicate property name handling. + + + + Specifies the settings used when merging JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Gets or sets the comparison used to match property names while merging. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + The comparison used to match property names while merging. + + + + Specifies the settings used when selecting JSON. + + + + + Gets or sets a timeout that will be used when executing regular expressions. + + The timeout that will be used when executing regular expressions. + + + + Gets or sets a flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + A flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + + + Represents an abstract JSON token. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Writes this token to a asynchronously. + + A into which this method will write. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + A collection of s which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Creates a for this token. + + A that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object. + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + Creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A , or null. + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + The used to select tokens. + A . + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + The used to select tokens. + An of that contains the selected elements. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the at the reader's current position. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Initializes a new instance of the class. + + The token to read from. + The initial path of the token. It is prepended to the returned . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying . + + + + + Closes this writer. + If is set to true, the JSON is auto-completed. + + + Setting to true has no additional effect, since the underlying is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a value. + An error will be raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a undefined value. + + A undefined value. + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a . + + A into which this method will write. + A collection of s which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not of the same type as this instance. + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). + + A flag indicating whether the value can not equal the number defined by the minimum attribute (). + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). + + A flag indicating whether the value can not equal the number defined by the maximum attribute (). + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains JSON Schema. + + A that contains JSON Schema. + A populated from the string that contains JSON Schema. + + + + Load a from a string that contains JSON Schema using the specified . + + A that contains JSON Schema. + The resolver. + A populated from the string that contains JSON Schema. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + + Resolves from an id. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + + The value types allowed by the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + A camel case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolve a for a given . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. + + + true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. + + + true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer that writes to the application's instances. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Used by to resolve a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + The that will be used to filter the trace messages passed to the writer. + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a used by the . + + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + true if the creator has a parameter with the collection values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Handles serialization callback events. + + The object that raised the callback event. + The streaming context. + + + + Handles serialization error callback events. + + The object that raised the callback event. + The streaming context. + The error context. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets the internally resolved for the contract's type. + This converter is used as a fallback converter when no other converter is resolved. + Setting will always override this converter. + + + + + Gets or sets all methods called immediately after deserialization of the object. + + The methods called immediately after deserialization of the object. + + + + Gets or sets all methods called during deserialization of the object. + + The methods called during deserialization of the object. + + + + Gets or sets all methods called after serialization of the object graph. + + The methods called after serialization of the object graph. + + + + Gets or sets all methods called before serialization of the object. + + The methods called before serialization of the object. + + + + Gets or sets all method called when an error is thrown during the serialization of the object. + + The methods called when an error is thrown during the serialization of the object. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + true if the default object creator is non-public; otherwise, false. + + + + Contract details for a used by the . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + true if the creator has a parameter with the dictionary values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets the object's properties. + + The object's properties. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object constructor. + + The object constructor. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets a value indicating whether has a value specified. + + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the type described by the argument. + + The type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + A kebab case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Initializes a new instance of the class. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Returns an enumeration of the most recent trace messages. + + An enumeration of the most recent trace messages. + + + + Returns a of the most recent trace messages. + + + A of the most recent trace messages. + + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + A flag indicating whether the property has had a name explicitly specified. + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Hash code calculation + + + + + + Object equality implementation + + + + + + + Compare to another NamingStrategy + + + + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + The instance to get attributes for. This parameter should be a , , or . + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. + + + + + Specifies type name handling options for the . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON + you must specify a root type object with + or . + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls result in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + Specifies that an output will not be null even if the corresponding type allows it. + + + Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + + Gets the return value condition. + + + Specifies that an output may be null even if the corresponding type disallows it. + + + Specifies that null is allowed as an input even if the corresponding type disallows it. + + + + Specifies that the method will not return if the associated Boolean parameter is passed the specified value. + + + + + Initializes a new instance of the class. + + + The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to + the associated parameter matches this value. + + + + Gets the condition parameter value. + + + diff --git a/packages/Newtonsoft.Json.13.0.1/packageIcon.png b/packages/Newtonsoft.Json.13.0.1/packageIcon.png new file mode 100644 index 0000000..10c06a5 Binary files /dev/null and b/packages/Newtonsoft.Json.13.0.1/packageIcon.png differ diff --git a/tongxin/NetWorkHelper/.vs/NetWorkHelper.csproj.dtbcache.json b/tongxin/NetWorkHelper/.vs/NetWorkHelper.csproj.dtbcache.json new file mode 100644 index 0000000..e3d6e99 --- /dev/null +++ b/tongxin/NetWorkHelper/.vs/NetWorkHelper.csproj.dtbcache.json @@ -0,0 +1 @@ +{"RootPath":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\huabei4tongdao\\LL-28\\tongxin\\NetWorkHelper","ProjectFileName":"NetWorkHelper.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"Addins\\NetAddinManagement.cs"},{"SourceFile":"Addins\\AddinUtil.cs"},{"SourceFile":"Addins\\IAddin.cs"},{"SourceFile":"Addins\\IAddinManager.cs"},{"SourceFile":"Helper\\ApplicationHelper.cs"},{"SourceFile":"Helper\\CollectionHelper.cs"},{"SourceFile":"Helper\\DataFrame.cs"},{"SourceFile":"Helper\\DataFrameHeader.cs"},{"SourceFile":"Helper\\FileHelper.cs"},{"SourceFile":"Helper\\ReflectionHelper.cs"},{"SourceFile":"Helper\\TypeHelper.cs"},{"SourceFile":"Helper\\WindowsHelper.cs"},{"SourceFile":"Helper\\XmlHelper.cs"},{"SourceFile":"IBase\\MapItem.cs"},{"SourceFile":"ICollections\\CollectionConverter.cs"},{"SourceFile":"ICollections\\SortedArray.cs"},{"SourceFile":"ICommond\\CommonMethod.cs"},{"SourceFile":"ICommond\\IDelegate.cs"},{"SourceFile":"ITool\\ConvertStringManager.cs"},{"SourceFile":"IModels\\IClient.cs"},{"SourceFile":"ITool\\CsvManager.cs"},{"SourceFile":"ITool\\DateTimeManager.cs"},{"SourceFile":"ITool\\JsonManager.cs"},{"SourceFile":"IUser\\CustomEnum.cs"},{"SourceFile":"TClass\\ClientType.cs"},{"SourceFile":"TClass\\ControlTag.cs"},{"SourceFile":"Helper\\ImageHelper.cs"},{"SourceFile":"TCP\\IBase.cs"},{"SourceFile":"TCP\\ITcpClient.cs"},{"SourceFile":"TCP\\ITcpClient.Designer.cs"},{"SourceFile":"TCP\\ITcpServer.cs"},{"SourceFile":"TCP\\ITcpServer.Designer.cs"},{"SourceFile":"UDP\\AxUdpClient.cs"},{"SourceFile":"UDP\\AxUdpClient.Designer.cs"},{"SourceFile":"Helper\\MD5Helper.cs"},{"SourceFile":"UDP\\Controls\\ControlState.cs"},{"SourceFile":"UDP\\Controls\\FileTansfersContainer.cs"},{"SourceFile":"UDP\\Controls\\FileTransfersItem.cs"},{"SourceFile":"UDP\\Controls\\FileTransfersItemStyle.cs"},{"SourceFile":"UDP\\Controls\\FileTransfersItemText.cs"},{"SourceFile":"UDP\\Controls\\GraphicsPathHelper.cs"},{"SourceFile":"UDP\\Controls\\IFileTransfersItemText.cs"},{"SourceFile":"UDP\\Controls\\RoundStyle.cs"},{"SourceFile":"UDP\\Controls\\TraFransfersFile.cs"},{"SourceFile":"UDP\\Controls\\TraFransfersFileStart.cs"},{"SourceFile":"UDP\\Event\\ReadFileBufferEvent.cs"},{"SourceFile":"UDP\\Event\\ReceiveDataEvent.cs"},{"SourceFile":"UDP\\Event\\FileReceiveBufferEvent.cs"},{"SourceFile":"UDP\\Event\\FileReceiveCompleteEvent.cs"},{"SourceFile":"UDP\\Event\\FileReceiveEvent.cs"},{"SourceFile":"UDP\\Event\\FileSendBufferEvent.cs"},{"SourceFile":"UDP\\Event\\FileSendEvent.cs"},{"SourceFile":"UDP\\Event\\RequestSendFileEvent.cs"},{"SourceFile":"UDP\\Receive\\ReadFileObject.cs"},{"SourceFile":"UDP\\Receive\\ReceiveFileManager.cs"},{"SourceFile":"UDP\\Send\\SendFileManager.cs"},{"SourceFile":"Helper\\SerHelper.cs"},{"SourceFile":"UDP\\IDataCell.cs"},{"SourceFile":"UDP\\SerializableClass\\MsgCell.cs"},{"SourceFile":"UDP\\SerializableClass\\MsgTypeCell.cs"},{"SourceFile":"UDP\\SerializableClass\\ResponeTraFransfersFile.cs"},{"SourceFile":"UDP\\UdpLibrary.cs"},{"SourceFile":"TClass\\EnumClass.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.8.AssemblyAttributes.cs"}],"References":[{"Reference":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\huabei4tongdao\\LL-28\\packages\\Microsoft.Office.Interop.Excel.15.0.4795.1001\\lib\\net20\\Microsoft.Office.Interop.Excel.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Drawing.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Runtime.Serialization.Formatters.Soap.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Web.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Windows.Forms.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\huabei4tongdao\\LL-28\\tongxin\\NetWorkHelper\\bin\\Debug\\NetWorkHelper.dll","OutputItemRelativePath":"NetWorkHelper.dll"},{"OutputItemFullPath":"D:\\桌面\\莫禧亮\\华勤\\华贝LL-28\\huabei4tongdao\\LL-28\\tongxin\\NetWorkHelper\\bin\\Debug\\NetWorkHelper.pdb","OutputItemRelativePath":"NetWorkHelper.pdb"}],"CopyToOutputEntries":[]} \ No newline at end of file diff --git a/tongxin/NetWorkHelper/Addins/AddinUtil.cs b/tongxin/NetWorkHelper/Addins/AddinUtil.cs new file mode 100644 index 0000000..2adf24b --- /dev/null +++ b/tongxin/NetWorkHelper/Addins/AddinUtil.cs @@ -0,0 +1,81 @@ +using System.Collections.Generic; + +namespace NetWorkHelper.Addins +{ + /// + /// 用于宿主应用程序向插件传递必要的参数信息 + /// + public static class AddinUtil + { + private static IDictionary DicUtil = new Dictionary(); + + #region RegisterObject + /// + /// RegisterObject + /// + /// + /// + public static void RegisterObject(string name, object obj) + { + lock (AddinUtil.DicUtil) + { + if (AddinUtil.DicUtil.ContainsKey(name)) + { + AddinUtil.Remove(name); + } + + AddinUtil.DicUtil.Add(name, obj); + } + } + #endregion + + #region GetObject + /// + /// GetObject + /// + /// + /// + public static object GetObject(string name) + { + lock (AddinUtil.DicUtil) + { + if (AddinUtil.DicUtil.ContainsKey(name)) + { + return AddinUtil.DicUtil[name]; + } + return null; + } + } + #endregion + + #region Remove + /// + /// Remove + /// + /// + public static void Remove(string name) + { + lock (AddinUtil.DicUtil) + { + if (AddinUtil.DicUtil.ContainsKey(name)) + { + AddinUtil.DicUtil.Remove(name); + } + } + } + #endregion + + #region Clear + /// + /// Clear + /// + public static void Clear() + { + lock (AddinUtil.DicUtil) + { + AddinUtil.DicUtil.Clear(); + } + } + #endregion + } +} diff --git a/tongxin/NetWorkHelper/Addins/IAddin.cs b/tongxin/NetWorkHelper/Addins/IAddin.cs new file mode 100644 index 0000000..4eb2c65 --- /dev/null +++ b/tongxin/NetWorkHelper/Addins/IAddin.cs @@ -0,0 +1,49 @@ + +namespace NetWorkHelper.Addins +{ + /// + /// 所有插件基本接口 + /// + public interface IAddin + { + /// + /// OnLoading 生命周期回调,当插件加载完毕被调用。可以从AddinUtil获取主应用传递的参数来初始化插件 + /// + void OnLoading(); + + /// + /// BeforeTerminating 生命周期回调,卸载插件前调用 + /// + void BeforeTerminating(); + + /// + /// Enabled 插件是否启用 + /// + bool Enabled { get; set; } + + /// + /// AddinKey 插件关键字,不同的插件其Key是不一样的 + /// + int AddinKey { get; } + + /// + /// ServiceName 插件提供的服务的名字 + /// + string AddinName { get; } + + /// + /// Description 插件的描述信息 + /// + string Description { get; } + + /// + /// Version 插件版本 + /// + float Version { get; } + } + + public class AddinHelper + { + public const string AddinSign = "BinGoo.dll"; //所有的插件都以"BinGoo.dll"结尾 + } +} diff --git a/tongxin/NetWorkHelper/Addins/IAddinManager.cs b/tongxin/NetWorkHelper/Addins/IAddinManager.cs new file mode 100644 index 0000000..27ffb87 --- /dev/null +++ b/tongxin/NetWorkHelper/Addins/IAddinManager.cs @@ -0,0 +1,67 @@ +using NetWorkHelper.ICommond; +using System.Collections.Generic; + +namespace NetWorkHelper.Addins +{ + /// + /// 用于加载/卸载,管理各种插件接口。 + /// + public interface IAddinManager + { + #region Property + /// + /// CopyToMemory 是否将插件拷贝到内存后加载 + /// + bool CopyToMemory { get; set; } + + /// + /// AddinList 已加载的插件列表 + /// + IList AddinList { get; } //集合中为IAddin + + #endregion + + #region Method + /// + /// LoadDefault 加载当前目录或子目录下的所有有效插件 + /// + void LoadDefault(); + + /// + /// LoadAllAddins 加载指定目录下的所有插件 + /// + void LoadAllAddins(string addinFolderPath, bool searchChildFolder); + + /// + /// LoadAddinAssembly 加载指定的插件 + /// + void LoadAddinAssembly(string assemblyPath); + + /// + /// Clear 清空所有已经加载的插件 + /// + void Clear(); + + /// + /// DynRemoveAddin 动态移除指定的插件 + /// + void DynRemoveAddin(int addinKey); + + /// + /// EnableAddin 启用指定的插件 + /// + void EnableAddin(int addinKey); + + /// + /// EnableAddin 禁用指定的插件 + /// + void DisableAddin(int addinKey); + + IAddin GetAddin(int addinKey); + #endregion + + #region Event + event NetWorkEventHandler AddinsChanged; + #endregion + } +} diff --git a/tongxin/NetWorkHelper/Addins/NetAddinManagement.cs b/tongxin/NetWorkHelper/Addins/NetAddinManagement.cs new file mode 100644 index 0000000..674288b --- /dev/null +++ b/tongxin/NetWorkHelper/Addins/NetAddinManagement.cs @@ -0,0 +1,168 @@ +using NetWorkHelper.Helper; +using NetWorkHelper.ICollections; +using NetWorkHelper.ICommond; +using System; +using System.Collections.Generic; +using System.Reflection; + +namespace NetWorkHelper.Addins +{ + /// + /// 插件管理类 + /// + public class NetAddinManagement : IAddinManager + { + private IDictionary dicAddins = new Dictionary(); + public event NetWorkEventHandler AddinsChanged; + + public NetAddinManagement() + { + this.AddinsChanged += delegate { }; + } + + #region IAddinManagement 成员 + #region LoadAllAddins + public void LoadAllAddins(string addin_FolderPath, bool searchChildFolder) + { + ReflectionHelper.TypeLoadConfig config = new ReflectionHelper.TypeLoadConfig(this.copyToMem, false, AddinHelper.AddinSign); + IList addinTypeList = ReflectionHelper.LoadDerivedType(typeof(IAddin), addin_FolderPath, searchChildFolder, config); + foreach (Type addinType in addinTypeList) + { + IAddin addin = (IAddin)Activator.CreateInstance(addinType); + this.dicAddins.Add(addin.AddinKey, addin); + addin.OnLoading(); + } + + this.AddinsChanged(); + } + #endregion + + #region LoadDefault + public void LoadDefault() + { + this.LoadAllAddins(AppDomain.CurrentDomain.BaseDirectory, true); + } + #endregion + + #region LoadAddinAssembly + public void LoadAddinAssembly(string assemblyPath) + { + Assembly asm = null; + if (this.copyToMem) + { + byte[] addinStream = FileHelper.ReadFileReturnBytes(assemblyPath); + asm = Assembly.Load(addinStream); + } + else + { + asm = Assembly.LoadFrom(assemblyPath); + } + + + IList newList = ReflectionHelper.LoadDerivedInstance(asm); + foreach (IAddin newAddin in newList) + { + this.dicAddins.Add(newAddin.AddinKey, newAddin); + newAddin.OnLoading(); + } + + this.AddinsChanged(); + } + #endregion + + #region Clear ,DynRemoveAddin + public void Clear() + { + foreach (IAddin addin in this.dicAddins.Values) + { + try + { + addin.BeforeTerminating(); + } + catch { } + } + + this.dicAddins.Clear(); + this.AddinsChanged(); + } + + public void DynRemoveAddin(int addinKey) + { + IAddin dest = this.GetAddin(addinKey); + + if (dest != null) + { + dest.BeforeTerminating(); + this.dicAddins.Remove(addinKey); + this.AddinsChanged(); + } + } + + private bool ContainsAddin(int addinKey) + { + return this.dicAddins.ContainsKey(addinKey); + } + #endregion + + #region AddinList + public IList AddinList + { + get + { + return CollectionConverter.CopyAllToList(this.dicAddins.Values); + } + } + #endregion + + #region GetAddin + public IAddin GetAddin(int addinKey) + { + if (!this.dicAddins.ContainsKey(addinKey)) + { + return null; + } + + return this.dicAddins[addinKey]; + } + #endregion + + #region event ,property + private bool copyToMem = false; + public bool CopyToMemory + { + get + { + return this.copyToMem; + } + set + { + this.copyToMem = value; + } + } + + + + #endregion + + #region EnableAddin ,DisableAddin + public void EnableAddin(int addinKey) + { + IAddin dest = this.GetAddin(addinKey); + if (dest != null) + { + dest.Enabled = true; + } + } + + public void DisableAddin(int addinKey) + { + IAddin dest = this.GetAddin(addinKey); + if (dest != null) + { + dest.Enabled = false; + } + } + #endregion + #endregion + } +} diff --git a/tongxin/NetWorkHelper/Helper/ApplicationHelper.cs b/tongxin/NetWorkHelper/Helper/ApplicationHelper.cs new file mode 100644 index 0000000..84f1ec1 --- /dev/null +++ b/tongxin/NetWorkHelper/Helper/ApplicationHelper.cs @@ -0,0 +1,74 @@ +/******************************************************************** + * * + * * Copyright (C) 2013-2018 uiskin.cn + * * 作者: BinGoo QQ:315567586 + * * 请尊重作者劳动成果,请保留以上作者信息,禁止用于商业活动。 + * * + * * 创建时间:2014-08-05 + * * 说明:应用程序帮助类 + * * +********************************************************************/ +using System.Diagnostics; +using System.Threading; + +namespace NetWorkHelper.Helper +{ + public static class ApplicationHelper + { + #region 启动指定程序 + + /// + /// 启动一个应用程序或进程 + /// + /// 程序或线程的路径 + public static void StartApplication(string appFilePath) + { + Process downprocess = new Process(); + downprocess.StartInfo.FileName = appFilePath; + downprocess.Start(); + } + #endregion + + #region 判断目标应用程序是否已经启动 + + /// + /// 目标应用程序是否已经启动。通常用于判断单实例应用。将占用锁。 + /// + /// 应用名称 + /// + public static bool IsAppInstanceExist(string instanceName) + { + + bool createdNew = false; + ApplicationHelper.MutexForSingletonExe = new Mutex(false, instanceName, out createdNew); + + return (!createdNew); + } + + public static System.Threading.Mutex MutexForSingletonExe = null; + /// + /// 释放进程中占用的程序。 + /// + /// + public static void ReleaseAppInstance(string instanceName) + { + if (ApplicationHelper.MutexForSingletonExe != null) + { + ApplicationHelper.MutexForSingletonExe.Close(); + ApplicationHelper.MutexForSingletonExe = null; + } + } + #endregion + + #region 打开网址 + /// + /// 在浏览器中打开Url链接 + /// + /// + public static void OpenUrl(string url) + { + Process.Start(url); + } + #endregion + } +} diff --git a/tongxin/NetWorkHelper/Helper/CollectionHelper.cs b/tongxin/NetWorkHelper/Helper/CollectionHelper.cs new file mode 100644 index 0000000..19eac52 --- /dev/null +++ b/tongxin/NetWorkHelper/Helper/CollectionHelper.cs @@ -0,0 +1,259 @@ +using NetWorkHelper.ICollections; +using System; +using System.Collections.Generic; + +namespace NetWorkHelper.Helper +{ + public static class CollectionHelper + { + #region Find + /// + /// Find 从集合中选取符合条件的元素 + /// + public static List Find(IEnumerable source, Predicate predicate) + { + List list = new List(); + CollectionHelper.ActionOnSpecification(source, delegate (TObject ele) { list.Add(ele); }, predicate); + return list; + } + #endregion + + #region FindFirstSpecification + /// + /// FindFirstSpecification 返回符合条件的第一个元素 + /// + public static TObject FindFirstSpecification(IEnumerable source, Predicate predicate) + { + foreach (TObject element in source) + { + if (predicate(element)) + { + return element; + } + } + + return default(TObject); + } + #endregion + + #region ContainsSpecification + /// + /// ContainsSpecification 集合中是否包含满足predicate条件的元素。 + /// + public static bool ContainsSpecification(IEnumerable source, Predicate predicate, out TObject specification) + { + specification = default(TObject); + foreach (TObject element in source) + { + if (predicate(element)) + { + specification = element; + return true; + } + } + + return false; + } + + /// + /// ContainsSpecification 集合中是否包含满足predicate条件的元素。 + /// + public static bool ContainsSpecification(IEnumerable source, Predicate predicate) + { + TObject specification; + return CollectionHelper.ContainsSpecification(source, predicate, out specification); + } + #endregion + + #region ActionOnSpecification + /// + /// ActionOnSpecification 对集合中满足predicate条件的元素执行action。如果没有条件,predicate传入null。 + /// + public static void ActionOnSpecification(IEnumerable collection, Action action, Predicate predicate) + { + if (collection == null) + { + return; + } + + if (predicate == null) + { + foreach (TObject obj in collection) + { + action(obj); + } + + return; + } + + foreach (TObject obj in collection) + { + if (predicate(obj)) + { + action(obj); + } + } + } + #endregion + + #region ActionOnEach + /// + /// ActionOnEach 对集合中的每个元素执行action。 + /// + public static void ActionOnEach(IEnumerable collection, Action action) + { + CollectionHelper.ActionOnSpecification(collection, action, null); + } + #endregion + + #region GetPart + public static T[] GetPart(T[] ary, int startIndex, int count) + { + return CollectionHelper.GetPart(ary, startIndex, count, false); + } + + public static T[] GetPart(T[] ary, int startIndex, int count, bool reverse) + { + if (startIndex >= ary.Length) + { + return null; + } + + if (ary.Length < startIndex + count) + { + count = ary.Length - startIndex; + } + + T[] result = new T[count]; + + if (!reverse) + { + for (int i = 0; i < count; i++) + { + result[i] = ary[startIndex + i]; + } + } + else + { + for (int i = 0; i < count; i++) + { + result[i] = ary[ary.Length - startIndex - 1 - i]; + } + } + + return result; + } + #endregion + + #region BinarySearch + /// + /// BinarySearch 从已排序的列表中,采用二分查找找到目标在列表中的位置。 + /// 如果刚好有个元素与目标相等,则返回true,且minIndex会被赋予该元素的位置;否则,返回false,且minIndex会被赋予比目标小且最接近目标的元素的位置 + /// + public static bool BinarySearch(IList sortedList, T target, out int minIndex) where T : IComparable + { + if (target.CompareTo(sortedList[0]) == 0) + { + minIndex = 0; + return true; + } + + if (target.CompareTo(sortedList[0]) < 0) + { + minIndex = -1; + return false; + } + + if (target.CompareTo(sortedList[sortedList.Count - 1]) == 0) + { + minIndex = sortedList.Count - 1; + return true; + } + + if (target.CompareTo(sortedList[sortedList.Count - 1]) > 0) + { + minIndex = sortedList.Count - 1; + return false; + } + + int targetPosIndex = -1; + int left = 0; + int right = sortedList.Count - 1; + + while (right - left > 1) + { + int middle = (left + right) / 2; + + if (target.CompareTo(sortedList[middle]) == 0) + { + minIndex = middle; + return true; + } + + if (target.CompareTo(sortedList[middle]) < 0) + { + right = middle; + } + else + { + left = middle; + } + } + + minIndex = left; + return false; + } + #endregion + + #region GetIntersection 、GetUnion + /// + /// GetIntersection 高效地求两个List元素的交集。 + /// + public static List GetIntersection(List list1, List list2) where T : IComparable + { + List largList = list1.Count > list2.Count ? list1 : list2; + List smallList = largList == list1 ? list2 : list1; + + largList.Sort(); + + int minIndex = 0; + + List result = new List(); + foreach (T tmp in smallList) + { + if (CollectionHelper.BinarySearch(largList, tmp, out minIndex)) + { + result.Add(tmp); + } + } + + return result; + } + + /// + /// GetUnion 高效地求两个List元素的并集。 + /// + public static List GetUnion(List list1, List list2) + { + SortedDictionary result = new SortedDictionary(); + foreach (T tmp in list1) + { + if (!result.ContainsKey(tmp)) + { + result.Add(tmp, 0); + } + } + + foreach (T tmp in list2) + { + if (!result.ContainsKey(tmp)) + { + result.Add(tmp, 0); + } + } + + return (List)CollectionConverter.CopyAllToList(result.Keys); + } + #endregion + } +} diff --git a/tongxin/NetWorkHelper/Helper/DataFrame.cs b/tongxin/NetWorkHelper/Helper/DataFrame.cs new file mode 100644 index 0000000..b7f6137 --- /dev/null +++ b/tongxin/NetWorkHelper/Helper/DataFrame.cs @@ -0,0 +1,134 @@ +using System; +using System.Text; + +namespace NetWorkHelper.Helper +{ + public class DataFrame + { + DataFrameHeader _header; + private byte[] _extend = new byte[0]; + private byte[] _mask = new byte[0]; + private byte[] _content = new byte[0]; + + public DataFrame(byte[] buffer) + { + //帧头 + _header = new DataFrameHeader(buffer); + + //扩展长度 + if (_header.Length == 126) + { + _extend = new byte[2]; + Buffer.BlockCopy(buffer, 2, _extend, 0, 2); + } + else if (_header.Length == 127) + { + _extend = new byte[8]; + Buffer.BlockCopy(buffer, 2, _extend, 0, 8); + } + + //是否有掩码 + if (_header.HasMask) + { + _mask = new byte[4]; + Buffer.BlockCopy(buffer, _extend.Length + 2, _mask, 0, 4); + } + + //消息体 + if (_extend.Length == 0) + { + _content = new byte[_header.Length]; + Buffer.BlockCopy(buffer, _extend.Length + _mask.Length + 2, _content, 0, _content.Length); + } + else if (_extend.Length == 2) + { + int contentLength = (int)_extend[0] * 256 + (int)_extend[1]; + _content = new byte[contentLength]; + Buffer.BlockCopy(buffer, _extend.Length + _mask.Length + 2, _content, 0, contentLength > 1024 * 100 ? 1024 * 100 : contentLength); + } + else + { + long len = 0; + int n = 1; + for (int i = 7; i >= 0; i--) + { + len += (int)_extend[i] * n; + n *= 256; + } + _content = new byte[len]; + Buffer.BlockCopy(buffer, _extend.Length + _mask.Length + 2, _content, 0, _content.Length); + } + + if (_header.HasMask) _content = Mask(_content, _mask); + + } + + public DataFrame(string content) + { + _content = Encoding.UTF8.GetBytes(content); + int length = _content.Length; + + if (length < 126) + { + _extend = new byte[0]; + _header = new DataFrameHeader(true, false, false, false, 1, false, length); + } + else if (length < 65536) + { + _extend = new byte[2]; + _header = new DataFrameHeader(true, false, false, false, 1, false, 126); + _extend[0] = (byte)(length / 256); + _extend[1] = (byte)(length % 256); + } + else + { + _extend = new byte[8]; + _header = new DataFrameHeader(true, false, false, false, 1, false, 127); + + int left = length; + int unit = 256; + + for (int i = 7; i > 1; i--) + { + _extend[i] = (byte)(left % unit); + left = left / unit; + + if (left == 0) + break; + } + } + } + + public byte[] GetBytes() + { + byte[] buffer = new byte[2 + _extend.Length + _mask.Length + _content.Length]; + Buffer.BlockCopy(_header.GetBytes(), 0, buffer, 0, 2); + Buffer.BlockCopy(_extend, 0, buffer, 2, _extend.Length); + Buffer.BlockCopy(_mask, 0, buffer, 2 + _extend.Length, _mask.Length); + Buffer.BlockCopy(_content, 0, buffer, 2 + _extend.Length + _mask.Length, _content.Length); + return buffer; + } + + public string Text + { + get + { + if (_header.OpCode != 1) + return string.Empty; + + return Encoding.UTF8.GetString(_content); + } + } + + private byte[] Mask(byte[] data, byte[] mask) + { + for (var i = 0; i < data.Length; i++) + { + data[i] = (byte)(data[i] ^ mask[i % 4]); + } + + return data; + } + + } +} diff --git a/tongxin/NetWorkHelper/Helper/DataFrameHeader.cs b/tongxin/NetWorkHelper/Helper/DataFrameHeader.cs new file mode 100644 index 0000000..bc1b2fd --- /dev/null +++ b/tongxin/NetWorkHelper/Helper/DataFrameHeader.cs @@ -0,0 +1,80 @@ +using System; + +namespace NetWorkHelper.Helper +{ + public class DataFrameHeader + { + private bool _fin; + private bool _rsv1; + private bool _rsv2; + private bool _rsv3; + private sbyte _opcode; + private bool _maskcode; + private sbyte _payloadlength; + + public bool FIN { get { return _fin; } } + + public bool RSV1 { get { return _rsv1; } } + + public bool RSV2 { get { return _rsv2; } } + + public bool RSV3 { get { return _rsv3; } } + + public sbyte OpCode { get { return _opcode; } } + + public bool HasMask { get { return _maskcode; } } + + public sbyte Length { get { return _payloadlength; } } + + public DataFrameHeader(byte[] buffer) + { + if (buffer.Length < 2) + throw new Exception("无效的数据头."); + + //第一个字节 + _fin = (buffer[0] & 0x80) == 0x80; + _rsv1 = (buffer[0] & 0x40) == 0x40; + _rsv2 = (buffer[0] & 0x20) == 0x20; + _rsv3 = (buffer[0] & 0x10) == 0x10; + _opcode = (sbyte)(buffer[0] & 0x0f); + + //第二个字节 + _maskcode = (buffer[1] & 0x80) == 0x80; + _payloadlength = (sbyte)(buffer[1] & 0x7f); + + } + + //发送封装数据 + public DataFrameHeader(bool fin, bool rsv1, bool rsv2, bool rsv3, sbyte opcode, bool hasmask, int length) + { + _fin = fin; + _rsv1 = rsv1; + _rsv2 = rsv2; + _rsv3 = rsv3; + _opcode = opcode; + //第二个字节 + _maskcode = hasmask; + _payloadlength = (sbyte)length; + } + + //返回帧头字节 + public byte[] GetBytes() + { + byte[] buffer = { 0, 0 }; + + if (_fin) buffer[0] ^= 0x80; + if (_rsv1) buffer[0] ^= 0x40; + if (_rsv2) buffer[0] ^= 0x20; + if (_rsv3) buffer[0] ^= 0x10; + + buffer[0] ^= (byte)_opcode; + + if (_maskcode) buffer[1] ^= 0x80; + + buffer[1] ^= (byte)_payloadlength; + + return buffer; + } + } +} + diff --git a/tongxin/NetWorkHelper/Helper/FileHelper.cs b/tongxin/NetWorkHelper/Helper/FileHelper.cs new file mode 100644 index 0000000..3b449ff --- /dev/null +++ b/tongxin/NetWorkHelper/Helper/FileHelper.cs @@ -0,0 +1,571 @@ +/******************************************************************** + * * + * * Copyright (C) 2013-2018 uiskin.cn + * * 作者: BinGoo QQ:315567586 + * * 请尊重作者劳动成果,请保留以上作者信息,禁止用于商业活动。 + * * + * * 创建时间:2014-08-05 + * * 说明:文件操作类 + * * +********************************************************************/ +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Windows.Forms; + +namespace NetWorkHelper.Helper +{ + public static class FileHelper + { + #region 将字符串写成文件 + /// + /// 将字符串写成文件 + /// + public static void GenerateFile(string filePath, string text) + { + string directoryPath = Path.GetDirectoryName(filePath); + if (!Directory.Exists(directoryPath)) + { + Directory.CreateDirectory(directoryPath); + } + + FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); + + StreamWriter sw = new StreamWriter(fs); + + sw.Write(text); + sw.Flush(); + + sw.Close(); + fs.Close(); + } + #endregion + + #region 读取文本文件的内容 + /// + /// 读取文本文件的内容 + /// + public static string GetFileContent(string file_path) + { + if (!File.Exists(file_path)) + { + return null; + } + + StreamReader reader = new StreamReader(file_path, Encoding.UTF8); + string content = reader.ReadToEnd(); + reader.Close(); + + return content; + } + #endregion + + #region 将二进制数据写入文件中 + /// + /// 将二进制数据写入文件中 + /// + public static void WriteBuffToFile(byte[] buff, int offset, int len, string filePath) + { + string directoryPath = Path.GetDirectoryName(filePath); + if (!Directory.Exists(directoryPath)) + { + Directory.CreateDirectory(directoryPath); + } + + FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); + BinaryWriter bw = new BinaryWriter(fs); + + bw.Write(buff, offset, len); + bw.Flush(); + + bw.Close(); + fs.Close(); + } + + /// + /// WriteBuffToFile 将二进制数据写入文件中 + /// + public static void WriteBuffToFile(byte[] buff, string filePath) + { + string directoryPath = Path.GetDirectoryName(filePath); + if (!Directory.Exists(directoryPath)) + { + Directory.CreateDirectory(directoryPath); + } + + FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); + BinaryWriter bw = new BinaryWriter(fs); + + bw.Write(buff); + bw.Flush(); + + bw.Close(); + fs.Close(); + } + #endregion + + #region 从文件中读取二进制数据 + /// + /// 从文件中读取二进制数据 + /// + public static byte[] ReadFileReturnBytes(string filePath) + { + if (!File.Exists(filePath)) + { + return null; + } + + FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); + + BinaryReader br = new BinaryReader(fs); + + byte[] buff = br.ReadBytes((int)fs.Length); + + br.Close(); + fs.Close(); + + return buff; + } + #endregion + + #region 获取要打开的文件路径 + /// + /// 获取要打开的文件路径 + /// + public static string GetFileToOpen(string title) + { + OpenFileDialog openDlg = new OpenFileDialog(); + openDlg.Filter = "All Files (*.*)|*.*"; + openDlg.FileName = ""; + if (title != null) + { + openDlg.Title = title; + } + + openDlg.CheckFileExists = true; + openDlg.CheckPathExists = true; + + DialogResult res = openDlg.ShowDialog(); + if (res == DialogResult.OK) + { + return openDlg.FileName; + } + + return null; + } + + /// + /// 获取要打开的文件路径 + /// + /// 对话框标题 + /// 初始目录 + /// 文件类型 + /// + public static string GetFileToOpen(string title, string iniDir, string extendName) + { + return GetFileToOpen2(title, iniDir, extendName); + } + /// + /// 获取要打开的文件路径 + /// + /// 对话框标题 + /// 初始目录 + /// 文件类型 + /// + public static string GetFileToOpen2(string title, string iniDir, params string[] extendNames) + { + StringBuilder filterBuilder = new StringBuilder("("); + for (int i = 0; i < extendNames.Length; i++) + { + filterBuilder.Append("*"); + filterBuilder.Append(extendNames[i]); + if (i < extendNames.Length - 1) + { + filterBuilder.Append(";"); + } + else + { + filterBuilder.Append(")"); + } + } + filterBuilder.Append("|"); + for (int i = 0; i < extendNames.Length; i++) + { + filterBuilder.Append("*"); + filterBuilder.Append(extendNames[i]); + if (i < extendNames.Length - 1) + { + filterBuilder.Append(";"); + } + } + + OpenFileDialog openDlg = new OpenFileDialog(); + openDlg.Filter = filterBuilder.ToString(); + openDlg.FileName = ""; + openDlg.InitialDirectory = iniDir; + if (title != null) + { + openDlg.Title = title; + } + + openDlg.CheckFileExists = true; + openDlg.CheckPathExists = true; + + DialogResult res = openDlg.ShowDialog(); + if (res == DialogResult.OK) + { + return openDlg.FileName; + } + + return null; + } + #endregion + + #region 获取要打开的文件夹 + /// + /// 获取要打开的文件夹 + /// + /// 新建文件夹按钮是否显示在浏览文件夹对话框中 + /// + public static string GetFolderToOpen(bool newFolderButton) + { + FolderBrowserDialog folderDialog = new FolderBrowserDialog(); + folderDialog.ShowNewFolderButton = newFolderButton; + DialogResult res = folderDialog.ShowDialog(); + if (res == DialogResult.OK) + { + return folderDialog.SelectedPath; + } + + return null; + } + #endregion + + #region 获取要保存的文件的路径 + /// + /// 获取要保存的文件的路径 + /// + /// 对话框标题 + /// 默认名称 + /// 初始化文件夹 + /// + public static string GetPathToSave(string title, string defaultName, string iniDir) + { + string extendName = Path.GetExtension(defaultName); + SaveFileDialog saveDlg = new SaveFileDialog(); + saveDlg.Filter = string.Format("The Files (*{0})|*{0}", extendName); + saveDlg.FileName = defaultName; + saveDlg.InitialDirectory = iniDir; + saveDlg.OverwritePrompt = false; + if (title != null) + { + saveDlg.Title = title; + } + + DialogResult res = saveDlg.ShowDialog(); + if (res == DialogResult.OK) + { + return saveDlg.FileName; + } + + return null; + } + #endregion + + #region 获取不包括路径的文件名 + /// + /// 获取不包括路径的文件名 + /// + /// 指定的文件夹 + /// + public static string GetFileNameNoPath(string filePath) + { + return Path.GetFileName(filePath); + } + #endregion + + #region 获取文件的大小 + /// + /// 获取目标文件的大小 + /// + /// 文件路径 + /// + public static ulong GetFileSize(string filePath) + { + FileInfo info = new FileInfo(filePath); + return (ulong)info.Length; + } + #endregion + + #region 获取文件夹的大小 + /// + /// 获取某个文件夹的大小。 + /// + /// 文件夹路径 + /// + public static ulong GetDirectorySize(string dirPath) + { + if (!Directory.Exists(dirPath)) + { + return 0; + } + ulong len = 0; + DirectoryInfo di = new DirectoryInfo(dirPath); + foreach (FileInfo fi in di.GetFiles()) + { + len += (ulong)fi.Length; + } + + DirectoryInfo[] dis = di.GetDirectories(); + if (dis.Length > 0) + { + for (int i = 0; i < dis.Length; i++) + { + len += FileHelper.GetDirectorySize(dis[i].FullName); + } + } + + return len; + } + #endregion + + #region 从文件流中读取指定大小的内容 + /// + /// 从文件流中读取指定大小的内容 + /// + /// + /// + /// + /// + public static void ReadFileData(FileStream fs, byte[] buff, int count, int offset) + { + int readCount = 0; + while (readCount < count) + { + int read = fs.Read(buff, offset + readCount, count - readCount); + readCount += read; + } + + return; + } + #endregion + + #region 获取文件所在的目录路径 + /// + /// 获取文件所在的目录路径 + /// + /// 文件路径 + /// + public static string GetFileDirectory(string filePath) + { + return Path.GetDirectoryName(filePath); + } + #endregion + + #region 删除文件 + /// + /// 删除文件 + /// + /// 文件路径 + public static void DeleteFile(string filePath) + { + if (File.Exists(filePath)) + { + File.Delete(filePath); + } + } + #endregion + + #region 确保扩展名正确 + /// + /// 确保扩展名正确 + /// + /// 文件名 + /// 扩展名 + /// + public static string EnsureExtendName(string origin_path, string extend_name) + { + if (Path.GetExtension(origin_path) != extend_name) + { + origin_path += extend_name; + } + + return origin_path; + } + #endregion + + #region 创建文件夹 + /// + /// 创建文件夹 + /// + /// 文件夹路径 + public static void ClearDirectory(string dirPath) + { + string[] filePaths = Directory.GetFiles(dirPath); + foreach (string file in filePaths) + { + File.Delete(file); + } + + foreach (string childDirPath in Directory.GetDirectories(dirPath)) + { + FileHelper.DeleteDirectory(childDirPath); + } + } + #endregion + + #region 删除文件夹 + /// + /// 删除文件夹 + /// + /// 文件夹路径 + public static void DeleteDirectory(string dirPath) + { + foreach (string filePath in Directory.GetFiles(dirPath)) + { + File.Delete(filePath); + } + + foreach (string childDirPath in Directory.GetDirectories(dirPath)) + { + FileHelper.DeleteDirectory(childDirPath); + } + + DirectoryInfo dir = new DirectoryInfo(dirPath); + dir.Refresh(); + if ((dir.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) + { + dir.Attributes &= ~FileAttributes.ReadOnly; + } + dir.Delete(); + } + #endregion + + #region 将某个文件夹下的多个文件和子文件夹移到另外一个目录中 + /// + /// 将某个文件夹下的多个文件和子文件夹移到另外一个目录中。 + /// + /// 移动之前文件和子文件夹所处的父目录路径 + /// 被移动的文件名称的集合 + /// 被移动的文件夹名称的集合 + /// 移往的目标文件夹路径 + public static void Move(string oldParentDirectoryPath, IEnumerable filesBeMoved, IEnumerable directoriesBeMoved, string newParentDirectoryPath) + { + if (filesBeMoved != null) + { + foreach (string beMoved in filesBeMoved) + { + string pathOfBeMoved = oldParentDirectoryPath + beMoved; + if (File.Exists(pathOfBeMoved)) + { + File.Move(pathOfBeMoved, newParentDirectoryPath + beMoved); + } + } + } + + if (directoriesBeMoved != null) + { + foreach (string beMoved in directoriesBeMoved) + { + string pathOfBeMoved = oldParentDirectoryPath + beMoved; + + if (Directory.Exists(pathOfBeMoved)) + { + Directory.Move(pathOfBeMoved, newParentDirectoryPath + beMoved); + } + } + } + } + #endregion + + #region 拷贝多个文件和文件夹 + /// + /// 拷贝多个文件和文件夹 + /// + /// 被拷贝的文件和文件夹所处的父目录路径 + /// 被复制的文件名称的集合 + /// 被复制的文件夹名称的集合 + /// 目标目录的路径 + public static void Copy(string sourceParentDirectoryPath, IEnumerable filesBeCopyed, IEnumerable directoriesCopyed, string destParentDirectoryPath) + { + bool sameParentDir = sourceParentDirectoryPath == destParentDirectoryPath; + if (filesBeCopyed != null) + { + foreach (string beCopyed in filesBeCopyed) + { + string newName = beCopyed; + while (sameParentDir && File.Exists(destParentDirectoryPath + newName)) + { + newName = "副本-" + newName; + } + string pathOfBeCopyed = sourceParentDirectoryPath + beCopyed; + if (File.Exists(pathOfBeCopyed)) + { + File.Copy(pathOfBeCopyed, destParentDirectoryPath + newName); + } + } + } + + if (directoriesCopyed != null) + { + foreach (string beCopyed in directoriesCopyed) + { + string newName = beCopyed; + while (sameParentDir && Directory.Exists(destParentDirectoryPath + newName)) + { + newName = "副本-" + newName; + } + string pathOfBeCopyed = sourceParentDirectoryPath + beCopyed; + if (Directory.Exists(pathOfBeCopyed)) + { + CopyDirectoryAndFiles(sourceParentDirectoryPath, beCopyed, destParentDirectoryPath, newName); + } + + } + } + } + + /// + /// 递归拷贝文件夹以及下面的所有文件 + /// + private static void CopyDirectoryAndFiles(string sourceParentDirectoryPath, string dirBeCopyed, string destParentDirectoryPath, string newDirName) + { + Directory.CreateDirectory(destParentDirectoryPath + newDirName); + DirectoryInfo source = new DirectoryInfo(sourceParentDirectoryPath + dirBeCopyed); + foreach (FileInfo file in source.GetFiles()) + { + File.Copy(file.FullName, destParentDirectoryPath + newDirName + "\\" + file.Name); + } + foreach (DirectoryInfo dir in source.GetDirectories()) + { + CopyDirectoryAndFiles(sourceParentDirectoryPath + dirBeCopyed + "\\", dir.Name, destParentDirectoryPath + newDirName + "\\", dir.Name); + } + } + #endregion + + #region 获取目标目录下以及其子目录下的所有文件(采用相对路径) + /// + /// 获取目标目录下以及其子目录下的所有文件(采用相对路径) + /// + public static List GetOffspringFiles(string dirPath) + { + List list = new List(); + DirectoryInfo dir = new DirectoryInfo(dirPath); + DoGetOffspringFiles(dirPath, dir, ref list); + return list; + } + + private static void DoGetOffspringFiles(string rootPath, DirectoryInfo dir, ref List list) + { + foreach (FileInfo file in dir.GetFiles()) + { + list.Add(file.FullName.Substring(rootPath.Length)); + } + foreach (DirectoryInfo childDir in dir.GetDirectories()) + { + DoGetOffspringFiles(rootPath, childDir, ref list); + } + } + #endregion + } +} diff --git a/tongxin/NetWorkHelper/Helper/ImageHelper.cs b/tongxin/NetWorkHelper/Helper/ImageHelper.cs new file mode 100644 index 0000000..c2d74c6 --- /dev/null +++ b/tongxin/NetWorkHelper/Helper/ImageHelper.cs @@ -0,0 +1,97 @@ +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; + +namespace NetWorkHelper +{ + public static class ImageHelper + { + /// + /// Convert Image to Byte[] + /// + /// + /// + public static byte[] ImageToBytes(Image image) + { + ImageFormat format = image.RawFormat; + using (MemoryStream ms = new MemoryStream()) + { + if (format.Equals(ImageFormat.Jpeg)) + { + image.Save(ms, ImageFormat.Jpeg); + } + else if (format.Equals(ImageFormat.Png)) + { + image.Save(ms, ImageFormat.Png); + } + else if (format.Equals(ImageFormat.Bmp)) + { + image.Save(ms, ImageFormat.Bmp); + } + else if (format.Equals(ImageFormat.Gif)) + { + image.Save(ms, ImageFormat.Gif); + } + else if (format.Equals(ImageFormat.Icon)) + { + image.Save(ms, ImageFormat.Icon); + } + byte[] buffer = new byte[ms.Length]; + //Image.Save()会改变MemoryStream的Position,需要重新Seek到Begin + ms.Seek(0, SeekOrigin.Begin); + ms.Read(buffer, 0, buffer.Length); + return buffer; + } + } + + /// + /// Convert Byte[] to Image + /// + /// + /// + public static Image BytesToImage(byte[] buffer) + { + MemoryStream ms = new MemoryStream(buffer); + Image image = System.Drawing.Image.FromStream(ms); + return image; + } + + /// + /// Convert Byte[] to a picture and Store it in file + /// + /// + /// + /// + public static string CreateImageFromBytes(string fileName, byte[] buffer) + { + string file = fileName; + Image image = BytesToImage(buffer); + ImageFormat format = image.RawFormat; + if (format.Equals(ImageFormat.Jpeg)) + { + file += ".jpeg"; + } + else if (format.Equals(ImageFormat.Png)) + { + file += ".png"; + } + else if (format.Equals(ImageFormat.Bmp)) + { + file += ".bmp"; + } + else if (format.Equals(ImageFormat.Gif)) + { + file += ".gif"; + } + else if (format.Equals(ImageFormat.Icon)) + { + file += ".icon"; + } + System.IO.FileInfo info = new System.IO.FileInfo(file); + System.IO.Directory.CreateDirectory(info.Directory.FullName); + File.WriteAllBytes(file, buffer); + return file; + } + } + +} diff --git a/tongxin/NetWorkHelper/Helper/MD5Helper.cs b/tongxin/NetWorkHelper/Helper/MD5Helper.cs new file mode 100644 index 0000000..d20bf81 --- /dev/null +++ b/tongxin/NetWorkHelper/Helper/MD5Helper.cs @@ -0,0 +1,57 @@ +using System; +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace NetWorkHelper +{ + public static class MD5Helper + { + public static string CretaeMD5(string fileName) + { + string hashStr = string.Empty; + try + { + FileStream fs = new FileStream( + fileName, + FileMode.Open, + FileAccess.Read, + FileShare.Read); + MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); + byte[] hash = md5.ComputeHash(fs); + hashStr = ByteArrayToHexString(hash); + fs.Close(); + fs.Dispose(); + } + catch (Exception ex) + { + throw ex; + } + return hashStr; + } + + public static string CretaeMD5(Stream stream) + { + MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); + byte[] hash = md5.ComputeHash(stream); + return ByteArrayToHexString(hash); + } + + public static string CretaeMD5(byte[] buffer, int offset, int count) + { + MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); + byte[] hash = md5.ComputeHash(buffer, offset, count); + return ByteArrayToHexString(hash); + } + + private static string ByteArrayToHexString(byte[] values) + { + StringBuilder sb = new StringBuilder(); + foreach (byte value in values) + { + sb.AppendFormat("{0:X2}", value); + } + return sb.ToString(); + } + } +} diff --git a/tongxin/NetWorkHelper/Helper/ReflectionHelper.cs b/tongxin/NetWorkHelper/Helper/ReflectionHelper.cs new file mode 100644 index 0000000..8f869b2 --- /dev/null +++ b/tongxin/NetWorkHelper/Helper/ReflectionHelper.cs @@ -0,0 +1,582 @@ +using NetWorkHelper.IBase; +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; + +namespace NetWorkHelper.Helper +{ + public static class ReflectionHelper + { + #region 获取类型 + /// + /// GetType 通过完全限定的类型名来加载对应的类型。typeAndAssName如"NetWorkHelper.Filters.SourceFilter,NetWorkHelper"。 + /// 如果为系统简单类型,则可以不带程序集名称。 + /// + public static Type GetType(string typeAndAssName) + { + string[] names = typeAndAssName.Split(','); + if (names.Length < 2) + { + return Type.GetType(typeAndAssName); + } + + return ReflectionHelper.GetType(names[0].Trim(), names[1].Trim()); + } + + /// + /// GetType 加载assemblyName程序集中的名为typeFullName的类型。assemblyName不用带扩展名,如果目标类型在当前程序集中,assemblyName传入null + /// + public static Type GetType(string typeFullName, string assemblyName) + { + if (assemblyName == null) + { + return Type.GetType(typeFullName); + } + + //搜索当前域中已加载的程序集 + Assembly[] asses = AppDomain.CurrentDomain.GetAssemblies(); + foreach (Assembly ass in asses) + { + string[] names = ass.FullName.Split(','); + if (names[0].Trim() == assemblyName.Trim()) + { + return ass.GetType(typeFullName); + } + } + + //加载目标程序集 + Assembly tarAssem = Assembly.Load(assemblyName); + if (tarAssem != null) + { + return tarAssem.GetType(typeFullName); + } + + return null; + } + #endregion + + #region GetTypeFullName + public static string GetTypeFullName(Type t) + { + return t.FullName + "," + t.Assembly.FullName.Split(',')[0]; + } + #endregion + + #region LoadDerivedInstance + /// + /// LoadDerivedInstance 将程序集中所有继承自TBase的类型实例化 + /// + /// 基础类型(或接口类型) + /// 目标程序集 + /// TBase实例列表 + public static IList LoadDerivedInstance(Assembly asm) + { + IList list = new List(); + + Type supType = typeof(TBase); + foreach (Type t in asm.GetTypes()) + { + if (supType.IsAssignableFrom(t) && (!t.IsAbstract) && (!t.IsInterface)) + { + TBase instance = (TBase)Activator.CreateInstance(t); + list.Add(instance); + } + } + + return list; + } + #endregion + + #region LoadDerivedType + /// + /// LoadDerivedType 加载directorySearched目录下所有程序集中的所有派生自baseType的类型 + /// + /// 基类(或接口)类型 + /// 搜索的目录 + /// 是否搜索子目录中的程序集 + /// 高级配置,可以传入null采用默认配置 + /// 所有从BaseType派生的类型列表 + public static IList LoadDerivedType(Type baseType, string directorySearched, bool searchChildFolder, TypeLoadConfig config) + { + if (config == null) + { + config = new TypeLoadConfig(); + } + + IList derivedTypeList = new List(); + if (searchChildFolder) + { + ReflectionHelper.LoadDerivedTypeInAllFolder(baseType, derivedTypeList, directorySearched, config); + } + else + { + ReflectionHelper.LoadDerivedTypeInOneFolder(baseType, derivedTypeList, directorySearched, config); + } + + return derivedTypeList; + } + + #region TypeLoadConfig + public class TypeLoadConfig + { + #region Ctor + public TypeLoadConfig() { } + public TypeLoadConfig(bool copyToMem, bool loadAbstract, string postfix) + { + this.copyToMemory = copyToMem; + this.loadAbstractType = loadAbstract; + this.targetFilePostfix = postfix; + } + #endregion + + #region CopyToMemory + private bool copyToMemory = false; + /// + /// CopyToMem 是否将程序集拷贝到内存后加载 + /// + public bool CopyToMemory + { + get { return copyToMemory; } + set { copyToMemory = value; } + } + #endregion + + #region LoadAbstractType + private bool loadAbstractType = false; + /// + /// LoadAbstractType 是否加载抽象类型 + /// + public bool LoadAbstractType + { + get { return loadAbstractType; } + set { loadAbstractType = value; } + } + #endregion + + #region TargetFilePostfix + private string targetFilePostfix = ".dll"; + /// + /// TargetFilePostfix 搜索的目标程序集的后缀名 + /// + public string TargetFilePostfix + { + get { return targetFilePostfix; } + set { targetFilePostfix = value; } + } + #endregion + } + #endregion + + #region LoadDerivedTypeInAllFolder + private static void LoadDerivedTypeInAllFolder(Type baseType, IList derivedTypeList, string folderPath, TypeLoadConfig config) + { + ReflectionHelper.LoadDerivedTypeInOneFolder(baseType, derivedTypeList, folderPath, config); + string[] folders = Directory.GetDirectories(folderPath); + if (folders != null) + { + foreach (string nextFolder in folders) + { + ReflectionHelper.LoadDerivedTypeInAllFolder(baseType, derivedTypeList, nextFolder, config); + } + } + } + #endregion + + #region LoadDerivedTypeInOneFolder + private static void LoadDerivedTypeInOneFolder(Type baseType, IList derivedTypeList, string folderPath, TypeLoadConfig config) + { + string[] files = Directory.GetFiles(folderPath); + foreach (string file in files) + { + if (config.TargetFilePostfix != null) + { + if (!file.EndsWith(config.TargetFilePostfix)) + { + continue; + } + } + + Assembly asm = null; + + #region Asm + try + { + if (config.CopyToMemory) + { + byte[] addinStream = FileHelper.ReadFileReturnBytes(file); + asm = Assembly.Load(addinStream); + } + else + { + asm = Assembly.LoadFrom(file); + } + } + catch (Exception ee) + { + ee = ee; + } + + if (asm == null) + { + continue; + } + #endregion + + Type[] types = asm.GetTypes(); + + foreach (Type t in types) + { + if (t.IsSubclassOf(baseType) || baseType.IsAssignableFrom(t)) + { + bool canLoad = config.LoadAbstractType ? true : (!t.IsAbstract); + if (canLoad) + { + derivedTypeList.Add(t); + } + } + } + } + + } + #endregion + #endregion + + #region SetProperty + /// + /// SetProperty 如果list中的object具有指定的propertyName属性,则设置该属性的值为proValue + /// + public static void SetProperty(IList objs, string propertyName, object proValue) + { + object[] args = { proValue }; + foreach (object target in objs) + { + ReflectionHelper.SetProperty(target, propertyName, proValue); + } + } + + public static void SetProperty(object obj, string propertyName, object proValue) + { + ReflectionHelper.SetProperty(obj, propertyName, proValue, true); + } + + /// + /// SetProperty 如果object具有指定的propertyName属性,则设置该属性的值为proValue + /// + public static void SetProperty(object obj, string propertyName, object proValue, bool ignoreError) + { + Type t = obj.GetType(); + PropertyInfo pro = t.GetProperty(propertyName); + if ((pro == null) || (!pro.CanWrite)) + { + if (!ignoreError) + { + string msg = string.Format("The setter of property named '{0}' not found in '{1}'.", propertyName, t); + throw new Exception(msg); + } + + return; + } + + #region 尝试转换类型 + try + { + proValue = TypeHelper.ChangeType(pro.PropertyType, proValue); + } + catch { } + #endregion + + object[] args = { proValue }; + t.InvokeMember(propertyName, BindingFlags.Public | BindingFlags.IgnoreCase | + BindingFlags.Instance | BindingFlags.SetProperty, null, obj, args); + } + #endregion + + #region GetProperty + /// + /// GetProperty 根据指定的属性名获取目标对象该属性的值 + /// + public static object GetProperty(object obj, string propertyName) + { + Type t = obj.GetType(); + + return t.InvokeMember(propertyName, BindingFlags.Default | BindingFlags.GetProperty, null, obj, null); + } + #endregion + + #region GetFieldValue + /// + /// GetFieldValue 取得目标对象的指定field的值,field可以是private + /// + public static object GetFieldValue(object obj, string fieldName) + { + Type t = obj.GetType(); + FieldInfo field = t.GetField(fieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance); + if (field == null) + { + string msg = string.Format("The field named '{0}' not found in '{1}'.", fieldName, t); + throw new Exception(msg); + } + + return field.GetValue(obj); + } + #endregion + + #region SetFieldValue + /// + /// SetFieldValue 设置目标对象的指定field的值,field可以是private + /// + public static void SetFieldValue(object obj, string fieldName, object val) + { + Type t = obj.GetType(); + FieldInfo field = t.GetField(fieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.SetField | BindingFlags.Instance); + if (field == null) + { + string msg = string.Format("The field named '{0}' not found in '{1}'.", fieldName, t); + throw new Exception(msg); + } + + field.SetValue(obj, val); + } + #endregion + + #region CopyProperty + /// + /// CopyProperty 将source中的属性的值赋给target上同名的属性 + /// 使用CopyProperty可以方便的实现拷贝构造函数 + /// + public static void CopyProperty(object source, object target) + { + ReflectionHelper.CopyProperty(source, target, null); + } + + /// + /// CopyProperty 将source中的属性的值赋给target上想匹配的属性,匹配关系通过propertyMapItemList确定 + /// + public static void CopyProperty(object source, object target, IList propertyMapItemList) + { + Type sourceType = source.GetType(); + Type targetType = target.GetType(); + PropertyInfo[] sourcePros = sourceType.GetProperties(); + + if (propertyMapItemList != null) + { + foreach (MapItem item in propertyMapItemList) + { + object val = ReflectionHelper.GetProperty(source, item.Source); + ReflectionHelper.SetProperty(target, item.Target, val); + } + } + else + { + foreach (PropertyInfo sourceProperty in sourcePros) + { + if (sourceProperty.CanRead) + { + object val = ReflectionHelper.GetProperty(source, sourceProperty.Name); + ReflectionHelper.SetProperty(target, sourceProperty.Name, val); + } + } + } + } + #endregion + + #region GetAllMethods、SearchMethod + /// + /// GetAllMethods 获取接口的所有方法信息,包括继承的 + /// + public static IList GetAllMethods(params Type[] interfaceTypes) + { + foreach (Type interfaceType in interfaceTypes) + { + if (!interfaceType.IsInterface) + { + throw new Exception("Target Type must be interface!"); + } + } + + IList list = new List(); + foreach (Type interfaceType in interfaceTypes) + { + ReflectionHelper.DistillMethods(interfaceType, ref list); + } + + return list; + } + + private static void DistillMethods(Type interfaceType, ref IList methodList) + { + foreach (MethodInfo meth in interfaceType.GetMethods()) + { + bool isExist = false; + foreach (MethodInfo temp in methodList) + { + if ((temp.Name == meth.Name) && (temp.ReturnType == meth.ReturnType)) + { + ParameterInfo[] para1 = temp.GetParameters(); + ParameterInfo[] para2 = meth.GetParameters(); + if (para1.Length == para2.Length) + { + bool same = true; + for (int i = 0; i < para1.Length; i++) + { + if (para1[i].ParameterType != para2[i].ParameterType) + { + same = false; + } + } + + if (same) + { + isExist = true; + break; + } + } + } + } + + if (!isExist) + { + methodList.Add(meth); + } + } + + foreach (Type superInterfaceType in interfaceType.GetInterfaces()) + { + ReflectionHelper.DistillMethods(superInterfaceType, ref methodList); + } + } + + + + /// + /// SearchGenericMethodInType 搜索指定类型定义的泛型方法,不包括继承的。 + /// + public static MethodInfo SearchGenericMethodInType(Type originType, string methodName, Type[] argTypes) + { + foreach (MethodInfo method in originType.GetMethods()) + { + if (method.ContainsGenericParameters && method.Name == methodName) + { + bool succeed = true; + ParameterInfo[] paras = method.GetParameters(); + if (paras.Length == argTypes.Length) + { + for (int i = 0; i < paras.Length; i++) + { + if (!paras[i].ParameterType.IsGenericParameter) //跳过泛型参数 + { + if (paras[i].ParameterType.IsGenericType) //如果参数本身就是泛型类型,如IList + { + if (paras[i].ParameterType.GetGenericTypeDefinition() != argTypes[i].GetGenericTypeDefinition()) + { + succeed = false; + break; + } + } + else //普通类型的参数 + { + if (paras[i].ParameterType != argTypes[i]) + { + succeed = false; + break; + } + } + } + } + if (succeed) + { + return method; + } + } + } + } + + return null; + } + + /// + /// SearchMethod 包括被继承的所有方法,也包括泛型方法。 + /// + public static MethodInfo SearchMethod(Type originType, string methodName, Type[] argTypes) + { + MethodInfo meth = originType.GetMethod(methodName, argTypes); + if (meth != null) + { + return meth; + } + + meth = ReflectionHelper.SearchGenericMethodInType(originType, methodName, argTypes); + if (meth != null) + { + return meth; + } + + //搜索基类 + Type baseType = originType.BaseType; + if (baseType != null) + { + while (baseType != typeof(object)) + { + MethodInfo target = baseType.GetMethod(methodName, argTypes); + if (target != null) + { + return target; + } + + target = ReflectionHelper.SearchGenericMethodInType(baseType, methodName, argTypes); + if (target != null) + { + return target; + } + + baseType = baseType.BaseType; + } + } + + //搜索基接口 + if (originType.GetInterfaces() != null) + { + IList list = ReflectionHelper.GetAllMethods(originType.GetInterfaces()); + foreach (MethodInfo theMethod in list) + { + if (theMethod.Name != methodName) + { + continue; + } + ParameterInfo[] args = theMethod.GetParameters(); + if (args.Length != argTypes.Length) + { + continue; + } + + bool correctArgType = true; + for (int i = 0; i < args.Length; i++) + { + if (args[i].ParameterType != argTypes[i]) + { + correctArgType = false; + break; + } + } + + if (correctArgType) + { + return theMethod; + } + } + } + + return null; + } + + #endregion + + #region GetFullMethodName + public static string GetMethodFullName(MethodInfo method) + { + return string.Format("{0}.{1}()", method.DeclaringType, method.Name); + } + #endregion + } +} diff --git a/tongxin/NetWorkHelper/Helper/SerHelper.cs b/tongxin/NetWorkHelper/Helper/SerHelper.cs new file mode 100644 index 0000000..f23dc66 --- /dev/null +++ b/tongxin/NetWorkHelper/Helper/SerHelper.cs @@ -0,0 +1,65 @@ +using System.IO; +using System.Runtime.Serialization.Formatters.Binary; + +namespace NetWorkHelper +{ + /// + /// 负责将对象序列化成byte[]数组 + /// + public class SerHelper + { + + /// + /// 将实体序列化成byte[]数组 + /// + /// + /// + public static byte[] Serialize(object obj) + { + // 1.0 实例化流的序列化帮助类 + BinaryFormatter bf = new BinaryFormatter(); + //2.0 定义内存流,用来接收通过bf的Serialize()方法将obj对象序列化成byte[]字节数组 + byte[] res; + using (MemoryStream ms = new MemoryStream()) + { + bf.Serialize(ms, obj); + + res = ms.ToArray(); + } + + return res; + } + + /// + /// 根据byte[]字节数组反序列化成 对象实体 + /// + /// + /// + public static T Deserialize(byte[] buffer) + { + // 1.0 实例化流的序列化帮助类 + BinaryFormatter bf = new BinaryFormatter(); + T obj; + using (MemoryStream ms = new MemoryStream(buffer)) + { + obj = (T)bf.Deserialize(ms); + } + //bf.Deserialize( + return obj; + } + /// + /// 根据byte[]字节数组反序列化成 对象实体 + /// + /// + /// + /// + public static object Deserialize(byte[] datas, int index) + { + BinaryFormatter bf = new BinaryFormatter(); + MemoryStream stream = new MemoryStream(datas, index, datas.Length - index); + object obj = bf.Deserialize(stream); + stream.Dispose(); + return obj; + } + } +} diff --git a/tongxin/NetWorkHelper/Helper/TypeHelper.cs b/tongxin/NetWorkHelper/Helper/TypeHelper.cs new file mode 100644 index 0000000..f0e24c4 --- /dev/null +++ b/tongxin/NetWorkHelper/Helper/TypeHelper.cs @@ -0,0 +1,293 @@ +using System; + +namespace NetWorkHelper.Helper +{ + public static class TypeHelper + { + #region IsSimpleType + /// + /// IsSimpleType 是否为简单类型:数值、字符、字符串、日期、布尔、枚举、Type + /// + public static bool IsSimpleType(Type t) + { + if (TypeHelper.IsNumbericType(t)) + { + return true; + } + + if (t == typeof(char)) + { + return true; + } + + if (t == typeof(string)) + { + return true; + } + + + if (t == typeof(bool)) + { + return true; + } + + + if (t == typeof(DateTime)) + { + return true; + } + + if (t == typeof(Type)) + { + return true; + } + + if (t.IsEnum) + { + return true; + } + + return false; + } + #endregion + + #region IsNumbericType 是否为数值类型 + public static bool IsNumbericType(Type destDataType) + { + if ((destDataType == typeof(int)) || (destDataType == typeof(uint)) || (destDataType == typeof(double)) + || (destDataType == typeof(short)) || (destDataType == typeof(ushort)) || (destDataType == typeof(decimal)) + || (destDataType == typeof(long)) || (destDataType == typeof(ulong)) || (destDataType == typeof(float)) + || (destDataType == typeof(byte)) || (destDataType == typeof(sbyte))) + { + return true; + } + + return false; + } + #endregion + + #region IsIntegerCompatibleType 是否为整数兼容类型 + public static bool IsIntegerCompatibleType(Type destDataType) + { + if ((destDataType == typeof(int)) || (destDataType == typeof(uint)) || (destDataType == typeof(short)) || (destDataType == typeof(ushort)) + || (destDataType == typeof(long)) || (destDataType == typeof(ulong)) || (destDataType == typeof(byte)) || (destDataType == typeof(sbyte))) + { + return true; + } + + return false; + } + #endregion + + #region GetClassSimpleName + /// + /// GetClassSimpleName 获取class的声明名称,如 Person + /// + public static string GetClassSimpleName(Type t) + { + string[] parts = t.ToString().Split('.'); + return parts[parts.Length - 1].ToString(); + } + #endregion + + #region IsFixLength + public static bool IsFixLength(Type destDataType) + { + if (TypeHelper.IsNumbericType(destDataType)) + { + return true; + } + + if (destDataType == typeof(byte[])) + { + return true; + } + + if ((destDataType == typeof(DateTime)) || (destDataType == typeof(bool))) + { + return true; + } + + return false; + } + #endregion + + #region ChangeType + /// + /// ChangeType 对System.Convert.ChangeType进行了增强,支持(0,1)到bool的转换,字符串->枚举、int->枚举、字符串->Type + /// + public static object ChangeType(Type targetType, object val) + { + #region null + if (val == null) + { + return null; + } + #endregion + + if (targetType.IsAssignableFrom(val.GetType())) + { + return val; + } + + #region Same Type + if (targetType == val.GetType()) + { + return val; + } + #endregion + + #region bool 1,0 + if (targetType == typeof(bool)) + { + if (val.ToString() == "0") + { + return false; + } + + if (val.ToString() == "1") + { + return true; + } + } + #endregion + + #region Enum + if (targetType.IsEnum) + { + int intVal = 0; + bool suc = int.TryParse(val.ToString(), out intVal); + if (!suc) + { + return Enum.Parse(targetType, val.ToString()); + } + else + { + return val; + } + } + #endregion + + #region Type + if (targetType == typeof(Type)) + { + return ReflectionHelper.GetType(val.ToString()); + } + #endregion + + if (targetType == typeof(IComparable)) + { + return val; + } + + //将double赋值给数值型的DataRow的字段是可以的,但是通过反射赋值给object的非double的其它数值类型的属性,却不行 + return System.Convert.ChangeType(val, targetType); + + } + #endregion + + #region GetDefaultValue + public static object GetDefaultValue(Type destType) + { + if (TypeHelper.IsNumbericType(destType)) + { + return 0; + } + + if (destType == typeof(string)) + { + return ""; + } + + if (destType == typeof(bool)) + { + return false; + } + + if (destType == typeof(DateTime)) + { + return DateTime.Now; + } + + if (destType == typeof(Guid)) + { + return System.Guid.NewGuid(); + } + + if (destType == typeof(TimeSpan)) + { + return System.TimeSpan.Zero; + } + + return null; + } + #endregion + + #region GetDefaultValueString + public static string GetDefaultValueString(Type destType) + { + if (TypeHelper.IsNumbericType(destType)) + { + return "0"; + } + + if (destType == typeof(string)) + { + return "\"\""; + } + + if (destType == typeof(bool)) + { + return "false"; + } + + if (destType == typeof(DateTime)) + { + return "DateTime.Now"; + } + + if (destType == typeof(Guid)) + { + return "System.Guid.NewGuid()"; + } + + if (destType == typeof(TimeSpan)) + { + return "System.TimeSpan.Zero"; + } + + + return "null"; + } + #endregion + + #region GetTypeRegularName + /// + /// GetTypeRegularName 获取类型的完全名称,如"ESBasic.Filters.SourceFilter,ESBasic" + /// + public static string GetTypeRegularName(Type destType) + { + string assName = destType.Assembly.FullName.Split(',')[0]; + + return string.Format("{0},{1}", destType.ToString(), assName); + + } + + public static string GetTypeRegularNameOf(object obj) + { + Type destType = obj.GetType(); + return TypeHelper.GetTypeRegularName(destType); + } + #endregion + + #region GetTypeByRegularName + /// + /// GetTypeByFullString 通过类型的完全名称获取类型,regularName如"ESBasic.Filters.SourceFilter,ESBasic" + /// + public static Type GetTypeByRegularName(string regularName) + { + return ReflectionHelper.GetType(regularName); + } + #endregion + } +} diff --git a/tongxin/NetWorkHelper/Helper/WindowsHelper.cs b/tongxin/NetWorkHelper/Helper/WindowsHelper.cs new file mode 100644 index 0000000..a21a7f8 --- /dev/null +++ b/tongxin/NetWorkHelper/Helper/WindowsHelper.cs @@ -0,0 +1,269 @@ +/******************************************************************** + * * + * * Copyright (C) 2013-2018 uiskin.cn + * * 作者: BinGoo QQ:315567586 + * * 请尊重作者劳动成果,请保留以上作者信息,禁止用于商业活动。 + * * + * * 创建时间:2014-08-05 + * * 说明:Windows帮助类 + * * +********************************************************************/ + +using Microsoft.Win32; +using System; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace NetWorkHelper.Helper +{ + public class WindowsHelper + { + #region 开机自动启动 + /// + /// 开机自动启动,使用注册表 + /// + /// 是否开机自动启动 + /// 取一个唯一的注册表Key名称 + /// 启动程序的完整路径 + public static void RunWhenStart_usingReg(bool started, string name, string path) + { + RegistryKey HKLM = Registry.LocalMachine; + try + { + RegistryKey run = HKLM.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\"); + if (run == null) + { + return; + } + if (started) + { + run.SetValue(name, path); + } + else + { + object val = run.GetValue(name); + if (val != null) + { + run.DeleteValue(name); + } + } + } + finally + { + HKLM.Close(); + } + } + #endregion + + #region MouseEvent 模拟鼠标/键盘点击 + /// + /// MouseEvent 模拟鼠标点击 + /// + [DllImport("user32.dll", EntryPoint = "mouse_event")] + public static extern void MouseEvent(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo); + + //在(34, 258)处点击鼠标 + //SetCursorPos(34, 258); + //MouseEvent(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero); + //MouseEvent(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero); + + /// + /// SetCursorPos 设置光标的绝对位置 + /// + [DllImport("user32.dll")] + public static extern bool SetCursorPos(int x, int y); + + /// + /// KeybdEvent 模拟键盘。已经过期。 + /// + [DllImport("user32.dll", EntryPoint = "keybd_event")] + public static extern void KeybdEvent2(byte key, byte bScan, KeybdEventFlag flags, uint dwExtraInfo); + + public static void KeybdEvent(byte key, byte bScan, KeybdEventFlag flags, uint dwExtraInfo) + { + INPUT input = new INPUT(); + input.type = 1; //keyboard + input.ki.wVk = key; + input.ki.wScan = MapVirtualKey(key, 0); + input.ki.dwFlags = (int)flags; + SendInput(1, ref input, Marshal.SizeOf(input)); + } + + [DllImport("user32.dll")] + private static extern UInt32 SendInput(UInt32 nInputs, ref INPUT pInputs, int cbSize); + [DllImport("user32.dll")] + private static extern byte MapVirtualKey(byte wCode, int wMap); + #endregion + + #region 根据扩展名获取系统图标 + /// + /// 根据扩展名获取系统图标。 + /// + /// 文件类型,使用扩展名表示,如".txt" + public static Icon GetSystemIconByFileType(string fileType, bool isLarge) + { + if (isLarge) + { + return GetIcon(fileType, FILE_ATTRIBUTE.NORMAL, SHGFI.USEFILEATTRIBUTES | SHGFI.ICON | SHGFI.LARGEICON); + } + + return GetIcon(fileType, FILE_ATTRIBUTE.NORMAL, SHGFI.USEFILEATTRIBUTES | SHGFI.ICON | SHGFI.SMALLICON); + } + + private static Icon GetIcon(string path, FILE_ATTRIBUTE dwAttr, SHGFI dwFlag) + { + SHFILEINFO fi = new SHFILEINFO(); + Icon ic = null; + int iTotal = (int)SHGetFileInfo(path, dwAttr, ref fi, 0, dwFlag); + ic = Icon.FromHandle(fi.hIcon); + return ic; + } + + #region shell32函数 + [DllImport("shell32", EntryPoint = "SHGetFileInfo", ExactSpelling = false, CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr SHGetFileInfo(string pszPath, FILE_ATTRIBUTE dwFileAttributes, ref SHFILEINFO sfi, int cbFileInfo, SHGFI uFlags); + + + // Contains information about a file object + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + private struct SHFILEINFO + { + public IntPtr hIcon; //文件的图标句柄 + public IntPtr iIcon; //图标的系统索引号 + public uint dwAttributes; //文件的属性值 + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] + public string szDisplayName; //文件的显示名 + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] + public string szTypeName; //文件的类型名 + }; + + // Flags that specify the file information to retrieve with SHGetFileInfo + [Flags] + public enum SHGFI : uint + { + ADDOVERLAYS = 0x20, + ATTR_SPECIFIED = 0x20000, + ATTRIBUTES = 0x800, //获得属性 + DISPLAYNAME = 0x200, //获得显示名 + EXETYPE = 0x2000, + ICON = 0x100, //获得图标 + ICONLOCATION = 0x1000, + LARGEICON = 0, //获得大图标 + LINKOVERLAY = 0x8000, + OPENICON = 2, + OVERLAYINDEX = 0x40, + PIDL = 8, + SELECTED = 0x10000, + SHELLICONSIZE = 4, + SMALLICON = 1, //获得小图标 + SYSICONINDEX = 0x4000, + TYPENAME = 0x400, //获得类型名 + USEFILEATTRIBUTES = 0x10 + } + // Flags that specify the file information to retrieve with SHGetFileInfo + [Flags] + public enum FILE_ATTRIBUTE + { + READONLY = 0x00000001, + HIDDEN = 0x00000002, + SYSTEM = 0x00000004, + DIRECTORY = 0x00000010, + ARCHIVE = 0x00000020, + DEVICE = 0x00000040, + NORMAL = 0x00000080, + TEMPORARY = 0x00000100, + SPARSE_FILE = 0x00000200, + REPARSE_POINT = 0x00000400, + COMPRESSED = 0x00000800, + OFFLINE = 0x00001000, + NOT_CONTENT_INDEXED = 0x00002000, + ENCRYPTED = 0x00004000 + } + #endregion + #endregion + + #region 设置目标窗体为活动窗体,将其TopLevel在最前。 + [DllImport("user32.dll", EntryPoint = "SetForegroundWindow")] + private static extern bool SetActiveWindow(IntPtr hWnd); + /// + /// 设置目标窗体为活动窗体,将其TopLevel在最前。 + /// + public static void SetForegroundWindow(Form window) + { + SetActiveWindow(window.Handle); + } + #endregion + } + #region MouseEventFlag ,KeybdEventFlag + /// + /// 模拟鼠标点击的相关标志 。 + /// + [Flags] + public enum MouseEventFlag : uint + { + Move = 0x0001, + LeftDown = 0x0002, + LeftUp = 0x0004, + RightDown = 0x0008, + RightUp = 0x0010, + MiddleDown = 0x0020, + MiddleUp = 0x0040, + XDown = 0x0080, + XUp = 0x0100, + Wheel = 0x0800, + VirtualDesk = 0x4000, + Absolute = 0x8000 //绝对坐标 + } + + /// + /// 模拟键盘点击的相关标志 。 + /// + [Flags] + public enum KeybdEventFlag : uint + { + Down = 0, + Up = 0x0002 + } + #endregion + + [StructLayout(LayoutKind.Explicit)] + public struct INPUT + { + [FieldOffset(0)] + public Int32 type; + [FieldOffset(4)] + public KEYBDINPUT ki; + [FieldOffset(4)] + public MOUSEINPUT mi; + [FieldOffset(4)] + public HARDWAREINPUT hi; + } + + [StructLayout(LayoutKind.Sequential)] + public struct MOUSEINPUT + { + public Int32 dx; + public Int32 dy; + public Int32 mouseData; + public Int32 dwFlags; + public Int32 time; + public IntPtr dwExtraInfo; + } + [StructLayout(LayoutKind.Sequential)] + public struct KEYBDINPUT + { + public Int16 wVk; + public Int16 wScan; + public Int32 dwFlags; + public Int32 time; + public IntPtr dwExtraInfo; + } + [StructLayout(LayoutKind.Sequential)] + public struct HARDWAREINPUT + { + public Int32 uMsg; + public Int16 wParamL; + public Int16 wParamH; + } +} diff --git a/tongxin/NetWorkHelper/Helper/XmlHelper.cs b/tongxin/NetWorkHelper/Helper/XmlHelper.cs new file mode 100644 index 0000000..34cd064 --- /dev/null +++ b/tongxin/NetWorkHelper/Helper/XmlHelper.cs @@ -0,0 +1,166 @@ +/******************************************************************** + * * + * * Copyright (C) 2013-2018 uiskin.cn + * * 作者: BinGoo QQ:315567586 + * * 请尊重作者劳动成果,请保留以上作者信息,禁止用于商业活动。 + * * + * * 创建时间:2014-08-05 + * * 说明:实体类与XML互转帮助类 + * * +********************************************************************/ +using System; +using System.IO; +using System.Xml.Serialization; + +namespace NetWorkHelper.Helper +{ + /// + /// 实体类与XML互转,多用于保存配置文件 + /// + public class XmlHelper + { + #region 反序列化 + + /// + /// 反序列化返回实体类 + /// + /// 类型 + /// XML字符串 + /// 返回实体类 + public static object Deserialize(Type type, string xml) + { + try + { + using (StringReader sr = new StringReader(xml)) + { + XmlSerializer xmldes = new XmlSerializer(type); + return xmldes.Deserialize(sr); + } + } + catch (Exception e) + { + + return null; + } + } + + /// + /// 反序列化 + /// + /// + /// + /// + public static object Deserialize(Type type, Stream stream) + { + XmlSerializer xmldes = new XmlSerializer(type); + return xmldes.Deserialize(stream); + } + + #endregion + + #region 序列化 + + /// + /// 序列化返回XML字符串 + /// + /// 类型 + /// 对象 + /// 返回XML字符串 + public static string Serializer(Type type, object obj) + { + MemoryStream Stream = new MemoryStream(); + XmlSerializer xml = new XmlSerializer(type); + try + { + //序列化对象 + xml.Serialize(Stream, obj); + } + catch (InvalidOperationException) + { + throw; + } + Stream.Position = 0; + StreamReader sr = new StreamReader(Stream); + string str = sr.ReadToEnd(); + + sr.Dispose(); + Stream.Dispose(); + + return str; + } + + #endregion + + #region 写XML字符串文件 + + /// + /// 写XML字符串文件 + /// + /// + /// + /// + public static void WriteXmlData(string datafilePath, string dataFileName, string message) + { + //DirectoryInfo path=new DirectoryInfo(DataFileName); + //如果数据文件目录不存在,则创建 + if (!Directory.Exists(datafilePath)) + { + Directory.CreateDirectory(datafilePath); + } + FileInfo finfo = new FileInfo(datafilePath + dataFileName); + try + { + using (FileStream fs = new FileStream(datafilePath + dataFileName, FileMode.Create)) + { + using (StreamWriter strwriter = new StreamWriter(fs)) + { + try + { + strwriter.WriteLine(message); + strwriter.Flush(); + } + catch (Exception ex) + { + Console.WriteLine(string.Format("数据文件写入失败信息:{0},行号{1}", ex.Message, ex.StackTrace)); + } + } + } + } + catch (Exception ee) + { + Console.WriteLine(string.Format("数据文件没有打开,详细信息如下:{0}", ee.Message)); + } + } + + #endregion + + #region 读取XML文件 + + /// + /// 读取XML文件 + /// + /// 文件名(包含路径) + /// 返回文件字符串 + public static string ReadXmlFile(string fileName) + { + //异常检测开始 + try + { + string fileContent = ""; + using (var reader = new StreamReader(fileName)) + { + fileContent = reader.ReadToEnd(); + } + return fileContent; + } + catch + { + //抛出异常 + return ""; + } + //异常检测结束 + } + + #endregion + } +} diff --git a/tongxin/NetWorkHelper/IBase/MapItem.cs b/tongxin/NetWorkHelper/IBase/MapItem.cs new file mode 100644 index 0000000..2d9a3e1 --- /dev/null +++ b/tongxin/NetWorkHelper/IBase/MapItem.cs @@ -0,0 +1,38 @@ +namespace NetWorkHelper.IBase +{ + /// + /// MapItem 映射项。 + /// + public class MapItem + { + #region 构造函数 + public MapItem() + { + } + + public MapItem(string theSource, string theTarget) + { + this.source = theSource; + this.target = theTarget; + } + #endregion + + #region Source + private string source; + public string Source + { + get { return source; } + set { source = value; } + } + #endregion + + #region Target + private string target; + public string Target + { + get { return target; } + set { target = value; } + } + #endregion + } +} diff --git a/tongxin/NetWorkHelper/ICollections/CollectionConverter.cs b/tongxin/NetWorkHelper/ICollections/CollectionConverter.cs new file mode 100644 index 0000000..8582376 --- /dev/null +++ b/tongxin/NetWorkHelper/ICollections/CollectionConverter.cs @@ -0,0 +1,139 @@ +using NetWorkHelper.Helper; +using NetWorkHelper.ICommond; +using System; +using System.Collections.Generic; + +namespace NetWorkHelper.ICollections +{ + /// + /// CollectionConverter 用于转换集合内的元素或集合类型。 + /// + public static class CollectionConverter + { + #region ConvertAll + /// + /// ConvertAll 将source中的每个元素转换为TResult类型 + /// + public static List ConvertAll(IEnumerable source, CommonMethod.Func converter) + { + return CollectionConverter.ConvertSpecification(source, converter, null); + } + #endregion + + #region ConvertSpecification + /// + /// ConvertSpecification 将source中的符合predicate条件元素转换为TResult类型 + /// + public static List ConvertSpecification(IEnumerable source, CommonMethod.Func converter, Predicate predicate) + { + List list = new List(); + CollectionHelper.ActionOnSpecification(source, delegate (TObject ele) { list.Add(converter(ele)); }, predicate); + return list; + } + #endregion + + #region ConvertFirstSpecification + /// + /// ConvertSpecification 将source中的符合predicate条件的第一个元素转换为TResult类型 + /// + public static TResult ConvertFirstSpecification(IEnumerable source, CommonMethod.Func converter, Predicate predicate) + { + TObject target = CollectionHelper.FindFirstSpecification(source, predicate); + + if (target == null) + { + return default(TResult); + } + + return converter(target); + } + #endregion + + #region CopyAllToList + public static List CopyAllToList(IEnumerable source) + { + List copy = new List(); + CollectionHelper.ActionOnEach(source, delegate (TObject t) { copy.Add(t); }); + return copy; + } + #endregion + + #region CopySpecificationToList + public static List CopySpecificationToList(IEnumerable source, Predicate predicate) + { + List copy = new List(); + CollectionHelper.ActionOnSpecification(source, delegate (TObject t) { copy.Add(t); }, predicate); + return copy; + } + #endregion + + #region ConvertListUpper + /// + /// ConvertListUpper 将子类对象集合转换为基类对象集合 + /// + public static List ConvertListUpper(IList list) where T : TBase + { + List baseList = new List(list.Count); + for (int i = 0; i < list.Count; i++) + { + baseList.Add(list[i]); + } + + return baseList; + } + #endregion + + #region ConvertListDown + /// + /// ConvertListDown 将基类对象集合强制转换为子类对象集合 + /// + public static List ConvertListDown(IList baseList) where T : TBase + { + List list = new List(baseList.Count); + for (int i = 0; i < baseList.Count; i++) + { + list.Add((T)baseList[i]); + } + + return list; + } + #endregion + + #region ConvertArrayToList + /// + /// ConverArrayToList 将数组转换为List + /// + public static List ConvertArrayToList(TElement[] ary) + { + if (ary == null) + { + return null; + } + + return CollectionHelper.Find(ary, null); + } + #endregion + + #region ConvertListToArray + /// + /// ConverListToArray 将List转换为数组 + /// + public static TElement[] ConvertListToArray(IList list) + { + if (list == null) + { + return null; + } + + TElement[] ary = new TElement[list.Count]; + for (int i = 0; i < ary.Length; i++) + { + ary[i] = list[i]; + } + + return ary; + } + #endregion + + } +} diff --git a/tongxin/NetWorkHelper/ICollections/SortedArray.cs b/tongxin/NetWorkHelper/ICollections/SortedArray.cs new file mode 100644 index 0000000..244baa8 --- /dev/null +++ b/tongxin/NetWorkHelper/ICollections/SortedArray.cs @@ -0,0 +1,672 @@ +using System; +using System.Collections.Generic; +using System.Threading; + +namespace NetWorkHelper.ICollections +{ + /// + /// 有序的数组,SortedArray 中的元素是不允许重复的。如果添加数组中已经存在的元素,将会被忽略。 + /// 该实现是线程安全的。 + /// + [Serializable] + public class SortedArray : SortedArray2, IComparer where T : IComparable + { + public SortedArray() + { + base.comparer4Key = this; + } + + public SortedArray(ICollection collection) + { + base.comparer4Key = this; + base.Rebuild(collection); + } + + #region IComparer 成员 + + public int Compare(T x, T y) + { + return x.CompareTo(y); + } + + #endregion + } + + /// + /// 有序的数组,SortedArray 中的元素是不允许重复的。如果添加数组中已经存在的元素,将会被忽略。 + /// 该实现是线程安全的。 + /// + [Serializable] + public class SortedArray2 + { + private List lazyCopy = null; + private int minCapacityForShrink = 32; + private T[] array = new T[32]; + private int validCount = 0; + protected IComparer comparer4Key = null; + + #region SmartRWLocker + + [NonSerialized] private SmartRWLocker smartRWLocker = new SmartRWLocker(); + + private SmartRWLocker SmartRWLocker + { + get + { + if (smartRWLocker == null) + { + smartRWLocker = new SmartRWLocker(); + } + + return smartRWLocker; + } + } + + #endregion + + #region Ctor + + protected SortedArray2() + { + } + + public SortedArray2(IComparer comparer) + { + this.comparer4Key = comparer; + } + + public SortedArray2(IComparer comparer, ICollection collection) + { + this.comparer4Key = comparer; + Rebuild(collection); + } + + protected void Rebuild(ICollection collection) + { + if (collection == null || collection.Count == 0) + { + return; + } + this.array = new T[collection.Count]; + collection.CopyTo(this.array, 0); + Array.Sort(this.array, this.comparer4Key); + this.validCount = collection.Count; + } + + #endregion + + #region Property + + #region Count + + public int Count + { + get { return this.validCount; } + } + + #endregion + + #region Capacity + + private int Capacity + { + get { return this.array.Length; } + } + + #endregion + + #region LastReadTime + + public DateTime LastReadTime + { + get { return this.SmartRWLocker.LastRequireReadTime; } + } + + #endregion + + #region LastWriteTime + + public DateTime LastWriteTime + { + get { return this.SmartRWLocker.LastRequireWriteTime; } + } + + #endregion + + #endregion + + #region Contains + + public bool Contains(T t) + { + return this.IndexOf(t) >= 0; + } + + #endregion + + #region Index + + public T this[int index] + { + get + { + using (this.SmartRWLocker.Lock(AccessMode.Read)) + { + if (index < 0 || (index >= this.validCount)) + { + throw new Exception("Index out of the range !"); + } + + return this.array[index]; + } + } + } + + #endregion + + #region IndexOf + + public int IndexOf(T t) + { + using (this.SmartRWLocker.Lock(AccessMode.Read)) + { + if (this.validCount == 0) + { + return -1; + } + + int index = Array.BinarySearch(this.array, 0, this.validCount, t, this.comparer4Key); + + return (index < 0) ? -1 : index; + } + } + + #endregion + + #region Add + + public void Add(T t) + { + int posIndex = 0; + this.Add(t, out posIndex); + } + + /// + /// Add 将一个元素添加到数组中。如果数组中已存在目标元素,则忽略。无论哪种情况,posIndex都会被赋予正确的值。 + /// + public void Add(T t, out int posIndex) + { + if (t == null) + { + throw new Exception("Target can't be null !"); + } + + using (this.SmartRWLocker.Lock(AccessMode.Write)) + { + int index = Array.BinarySearch(this.array, 0, this.validCount, t, this.comparer4Key); + if (index >= 0) + { + posIndex = index; + return; + } + + this.AdjustCapacity(1); + posIndex = ~index; + Array.Copy(this.array, posIndex, this.array, posIndex + 1, this.validCount - posIndex); + this.array[posIndex] = t; + + ++this.validCount; + } + + this.lazyCopy = null; + } + + public void Add(ICollection collection) + { + this.Add(collection, true); + } + + /// + /// Add 如果能保证collection中的元素不会与现有的元素重复,则checkRepeat可以传入false。 + /// + public void Add(ICollection collection, bool checkRepeat) + { + if (collection == null || collection.Count == 0) + { + return; + } + + using (this.SmartRWLocker.Lock(AccessMode.Write)) + { + ICollection resultCollection = collection; + + #region checkRepeat + + if (checkRepeat) + { + Dictionary dic = new Dictionary(); + foreach (T t in collection) + { + if (dic.ContainsKey(t) || this.Contains(t)) + { + continue; + } + + dic.Add(t, t); + } + + resultCollection = dic.Keys; + } + + #endregion + + if (resultCollection.Count == 0) + { + return; + } + + this.AdjustCapacity(resultCollection.Count); + + foreach (T t in resultCollection) + { + this.array[this.validCount] = t; + ++this.validCount; + } + + Array.Sort(this.array, 0, this.validCount, this.comparer4Key); + } + + this.lazyCopy = null; + } + + #endregion + + #region Remove + + #region Remove + + /// + /// Remove 删除数组中所有值为t的元素。 + /// + public void Remove(T t) + { + if (t == null) + { + return; + } + + int index = -1; + do + { + index = this.IndexOf(t); + if (index >= 0) + { + this.RemoveAt(index); + } + + } while (index >= 0); + + this.lazyCopy = null; + } + + #endregion + + #region RemoveAt + + public void RemoveAt(int index) + { + using (this.SmartRWLocker.Lock(AccessMode.Write)) + { + if (index < 0 || (index >= this.validCount)) + { + return; + } + + if (index == this.validCount - 1) + { + this.array[index] = default(T); + } + else + { + Array.Copy(this.array, index + 1, this.array, index, this.validCount - index - 1); + } + --this.validCount; + } + + this.lazyCopy = null; + } + + #endregion + + #region RemoveBetween + + public void RemoveBetween(int minIndex, int maxIndex) + { + using (this.SmartRWLocker.Lock(AccessMode.Write)) + { + minIndex = minIndex < 0 ? 0 : minIndex; + maxIndex = maxIndex >= this.validCount ? this.validCount - 1 : maxIndex; + + if (maxIndex < minIndex) + { + return; + } + + Array.Copy(this.array, maxIndex + 1, this.array, minIndex, this.validCount - maxIndex - 1); + + this.validCount -= (maxIndex - minIndex + 1); + } + + this.lazyCopy = null; + } + + #endregion + + #endregion + + #region GetBetween + + public T[] GetBetween(int minIndex, int maxIndex) + { + using (this.SmartRWLocker.Lock(AccessMode.Read)) + { + minIndex = minIndex < 0 ? 0 : minIndex; + maxIndex = maxIndex >= this.validCount ? this.validCount - 1 : maxIndex; + + if (maxIndex < minIndex) + { + return new T[0]; + } + + int count = maxIndex - minIndex - 1; + T[] result = new T[count]; + + Array.Copy(this.array, minIndex, result, 0, count); + return result; + } + } + + #endregion + + #region Shrink + + /// + /// Shrink 将内部数组收缩到最小,释放内存。 + /// + public void Shrink() + { + using (this.SmartRWLocker.Lock(AccessMode.Write)) + { + if (this.array.Length == this.validCount) + { + return; + } + + + int len = this.validCount >= this.minCapacityForShrink ? this.validCount : this.minCapacityForShrink; + + T[] newAry = new T[len]; + + Array.Copy(this.array, 0, newAry, 0, this.validCount); + this.array = newAry; + } + } + + #endregion + + #region AdjustCapacity + + private void AdjustCapacity(int newCount) + { + using (this.SmartRWLocker.Lock(AccessMode.Write)) + { + int totalCount = this.validCount + newCount; + if (this.array.Length >= totalCount) + { + return; + } + + int newCapacity = this.array.Length; + while (newCapacity < totalCount) + { + newCapacity *= 2; + } + + T[] newAry = new T[newCapacity]; + Array.Copy(this.array, 0, newAry, 0, this.validCount); + this.array = newAry; + } + } + + #endregion + + #region GetMax + + public T GetMax() + { + using (this.SmartRWLocker.Lock(AccessMode.Read)) + { + if (this.validCount == 0) + { + throw new Exception("SortedArray is Empty !"); + } + + return this.array[this.validCount - 1]; + } + } + + #endregion + + #region GetMin + + public T GetMin() + { + using (this.SmartRWLocker.Lock(AccessMode.Read)) + { + if (this.validCount == 0) + { + throw new Exception("SortedArray is Empty !"); + } + + return this.array[0]; + } + } + + #endregion + + #region GetAll + + public List GetAll() + { + List list = new List(); + using (this.SmartRWLocker.Lock(AccessMode.Read)) + { + for (int i = 0; i < this.validCount; i++) + { + list.Add(this.array[i]); + } + } + return list; + } + + #endregion + + #region GetAllReadonly + + /// + /// 注意,内部使用了Lazy缓存,返回的集合不可被修改。 + /// + public List GetAllReadonly() + { + if (this.lazyCopy != null) + { + return this.lazyCopy; + } + + using (this.SmartRWLocker.Lock(AccessMode.Read)) + { + List list = new List(); + for (int i = 0; i < this.validCount; i++) + { + list.Add(this.array[i]); + } + + this.lazyCopy = list; + return this.lazyCopy; + } + } + + #endregion + + #region Clear + + public void Clear() + { + using (this.SmartRWLocker.Lock(AccessMode.Write)) + { + this.array = new T[this.minCapacityForShrink]; + this.validCount = 0; + } + + this.lazyCopy = null; + } + + #endregion + + #region ToString + + public override string ToString() + { + return string.Format("Count:{0} ,Capacity:{1}", this.validCount, this.array.Length); + } + + #endregion + } + + /// + /// SmartRWLocker 简化了ReaderWriterLock的使用。通过using来使用Lock方法返回的对象,如:using(this.smartLocker.Lock(AccessMode.Read)){...} + /// zhuweisky 2008.11.25 + /// + public class SmartRWLocker + { + private ReaderWriterLock readerWriterLock = new ReaderWriterLock(); + + #region LastRequireReadTime + + private DateTime lastRequireReadTime = DateTime.Now; + + public DateTime LastRequireReadTime + { + get { return lastRequireReadTime; } + } + + #endregion + + #region LastRequireWriteTime + + private DateTime lastRequireWriteTime = DateTime.Now; + + public DateTime LastRequireWriteTime + { + get { return lastRequireWriteTime; } + } + + #endregion + + #region Lock + + public LockingObject Lock(AccessMode accessMode, bool enableSynchronize) + { + if (!enableSynchronize) + { + return null; + } + + return this.Lock(accessMode); + } + + public LockingObject Lock(AccessMode accessMode) + { + if (accessMode == AccessMode.Read) + { + this.lastRequireReadTime = DateTime.Now; + } + else + { + this.lastRequireWriteTime = DateTime.Now; + } + + return new LockingObject(this.readerWriterLock, accessMode); + } + + #endregion + } + + /// + /// LockingObject SmartRWLocker的Lock方法返回的锁对象。仅仅通过using来使用该对象,如:using(this.smartLocker.Lock(AccessMode.Read)){...} + /// + public class LockingObject : IDisposable + { + private ReaderWriterLock readerWriterLock; + private AccessMode accessMode = AccessMode.Read; + private LockCookie lockCookie; + + #region Ctor + + public LockingObject(ReaderWriterLock _lock, AccessMode _lockMode) + { + this.readerWriterLock = _lock; + this.accessMode = _lockMode; + + if (this.accessMode == AccessMode.Read) + { + this.readerWriterLock.AcquireReaderLock(-1); + } + else if (this.accessMode == AccessMode.Write) + { + this.readerWriterLock.AcquireWriterLock(-1); + } + else //UpAndDowngrade + { + this.lockCookie = this.readerWriterLock.UpgradeToWriterLock(-1); + } + } + + #endregion + + #region IDisposable 成员 + + public void Dispose() + { + if (this.accessMode == AccessMode.Read) + { + this.readerWriterLock.ReleaseReaderLock(); + } + else if (this.accessMode == AccessMode.Write) + { + this.readerWriterLock.ReleaseWriterLock(); + } + else //UpAndDowngrade + { + this.readerWriterLock.DowngradeFromWriterLock(ref this.lockCookie); + } + } + + #endregion + } + + /// + /// AccessMode 访问锁定资源的方式。 + /// + public enum AccessMode + { + Read = 0, + Write, + + /// + /// 前提条件:已经获取Read锁。 + /// 再采用此模式,可以先升级到Write,访问资源,再降级回Read。 + /// + UpAndDowngrade4Write + } +} \ No newline at end of file diff --git a/tongxin/NetWorkHelper/ICommond/CommonMethod.cs b/tongxin/NetWorkHelper/ICommond/CommonMethod.cs new file mode 100644 index 0000000..fcd4161 --- /dev/null +++ b/tongxin/NetWorkHelper/ICommond/CommonMethod.cs @@ -0,0 +1,85 @@ + +using System.Net; +using System.Windows.Forms; + +namespace NetWorkHelper.ICommond +{ + public class CommonMethod + { + /// + /// 域名转换为IP地址 + /// + /// 域名或IP地址 + /// IP地址 + internal static string HostnameToIp(string hostname) + { + try + { + IPAddress ip; + if (IPAddress.TryParse(hostname, out ip)) + return ip.ToString(); + else + return Dns.GetHostEntry(hostname).AddressList[0].ToString(); + } + catch + { + throw; + } + } + /// + /// 外部调用是否需要用Invoket + /// + /// 事件参数 + internal static void EventInvoket(Action func) + { + Form form = null; + if (Application.OpenForms.Count > 0) + { + form = Application.OpenForms[0]; + } + //Form form = Application.OpenForms.Cast
().FirstOrDefault(); + if (form != null && form.InvokeRequired) + { + form.Invoke(func); + } + else + { + func(); + } + } + /// + /// 具有返回值的 非bool 外部调用是否需要用Invoket + /// + /// 方法 + /// 返回客户操作之后的数据 + internal static object EventInvoket(Func func) + { + object haveStr; + Form form = null; + if (Application.OpenForms.Count > 0) + { + form = Application.OpenForms[0]; + } + //Form form = Application.OpenForms.Cast().FirstOrDefault(); + if (form != null && form.InvokeRequired) + { + haveStr = form.Invoke(func); + } + else + { + haveStr = func(); + } + return haveStr; + } + public delegate void Action(); + public delegate TResult Func(); + + public delegate TResult Func(T a); + + public delegate TResult Func(T1 arg1, T2 arg2); + + public delegate TResult Func(T1 arg1, T2 arg2, T3 arg3); + + public delegate TResult Func(T1 arg1, T2 arg2, T3 arg3, T4 arg4); + } +} diff --git a/tongxin/NetWorkHelper/ICommond/IDelegate.cs b/tongxin/NetWorkHelper/ICommond/IDelegate.cs new file mode 100644 index 0000000..4a8da5b --- /dev/null +++ b/tongxin/NetWorkHelper/ICommond/IDelegate.cs @@ -0,0 +1,273 @@ +/******************************************************************** + * * + * * Copyright (C) 2013-2018 uiskin.cn + * * 作者: BinGoo QQ:315567586 + * * 请尊重作者劳动成果,请保留以上作者信息,禁止用于商业活动。 + * * + * * 创建时间:2014-08-05 + * * 说明:事件委托类,用于事件的申明 + * * +********************************************************************/ + +using NetWorkHelper.IModels; +using System; + +namespace NetWorkHelper.ICommond +{ + public class TcpServerReceviceaEventArgs : EventArgs + { + public TcpServerReceviceaEventArgs(IClient iClient, byte[] data) + { + IClient = iClient; + Data = data; + } + /// + /// 客户端 + /// + public IClient IClient { get; set; } + /// + /// 接收到的原始数据 + /// + public byte[] Data { get; set; } + } + public class TcpServerClientEventArgs : EventArgs + { + public TcpServerClientEventArgs(IClient iClient) + { + IClient = iClient; + } + /// + /// 客户端 + /// + public IClient IClient { get; set; } + } + public class TcpServerStateEventArgs : EventArgs + { + public TcpServerStateEventArgs(IClient iClient, string msg, SocketState state) + { + IClient = iClient; + Msg = msg; + State = state; + } + + /// + /// 客户端 + /// + public IClient IClient { get; set; } + + /// + /// 状态消息 + /// + public string Msg { get; set; } + /// + /// 状态类型 + /// + public SocketState State { get; set; } + } + public class TcpServerLogEventArgs : EventArgs + { + public TcpServerLogEventArgs(IClient iClient, LogType logType, string logMsg) + { + IClient = iClient; + LogType = logType; + LogMsg = logMsg; + } + + /// + /// 客户端 + /// + public IClient IClient { get; set; } + /// + /// 日志类型 + /// + public LogType LogType { get; set; } + /// + /// 日志信息 + /// + public string LogMsg { get; set; } + } + public class TcpServerErrorEventArgs : EventArgs + { + public TcpServerErrorEventArgs(string errorMsg) + { + ErrorMsg = errorMsg; + } + + /// + /// 错误信息 + /// + public string ErrorMsg { get; set; } + } + public class TcpServerSendReturnEventArgs : EventArgs + { + public TcpServerSendReturnEventArgs(IClient iClient, int byteLen) + { + IClient = iClient; + ByteLen = byteLen; + } + + /// + /// 客户端 + /// + public IClient IClient { get; set; } + /// + /// 成功发送的数据长度 + /// + public int ByteLen { get; set; } + } + public class TcpServerReturnClientCountEventArgs : EventArgs + { + public TcpServerReturnClientCountEventArgs(int clientCount) + { + ClientCount = clientCount; + } + + /// + /// 客户端数量 + /// + public int ClientCount { get; set; } + } + + public class TcpClientReceviceEventArgs : EventArgs + { + public TcpClientReceviceEventArgs(byte[] data) + { + Data = data; + } + + /// + /// 接收到的原始数据 + /// + public byte[] Data { get; set; } + } + public class TcpClientErrorEventArgs : EventArgs + { + public TcpClientErrorEventArgs(string errorMsg) + { + ErrorMsg = errorMsg; + } + + /// + /// 错误信息 + /// + public string ErrorMsg { get; set; } + } + public class TcpClientStateEventArgs : EventArgs + { + public TcpClientStateEventArgs(string stateInfo, SocketState state) + { + StateInfo = stateInfo; + State = state; + } + + /// + /// 状态爱信息 + /// + public string StateInfo { get; set; } + /// + /// 状态 + /// + public SocketState State { get; set; } + } + + public class HttpDownLoadEventArgs : EventArgs + { + public HttpDownLoadEventArgs(long totalSize, long curSize, int progress) + { + TotalSize = totalSize; + CurSize = curSize; + Progress = progress; + } + + public long TotalSize { get; set; } + public long CurSize { get; set; } + public int Progress { get; set; } + } + #region 委托 + + #region ITcpServer服务端事件委托 + //public delegate void TcpServerReceviceEventHandler(IClient iClient, byte[] data); + //public delegate void TcpServerClientEventHandler(IClient iClient); + //public delegate void TcpServerStateEventHandler(IClient iClient, string msg, SocketState state); + //public delegate void TcpServerLogEventHandler(IClient iClient, LogType logType, string logMsg); + //public delegate void TcpServerErrorEventHandler(string errorMsg); + //public delegate void TcpServerSendReturnEventHandler(IClient iClient, int byteLen); + //public delegate void TcpServerReturnClientCountEventHandler(int clientCount); + + #endregion + + #region ITcpClient客户端事件委托 + //public delegate void TcpClientReceviceEventHandler(byte[] data); + //public delegate void TcpClientErrorEventHandler(string errorMsg); + //public delegate void TcpClientStateEventHandler(string msg, SocketState state); + #endregion + + #region 通用类的委托(可能到时双击注册事件时改变参数类型,谨慎使用) + /// + /// 不带参数的委托 + /// + public delegate void NetWorkEventHandler(); + + + /// + /// 带一个参数的委托 + /// + /// + /// + public delegate void NetWorkEventHandler(T1 object1); + + /// + /// 带两个参数的委托 + /// + /// + /// + /// + /// + public delegate void NetWorkEventHandler(T1 object1, T2 object2); + + /// + /// 带三个参数的委托 + /// + /// + /// + /// + /// + /// + /// + public delegate void NetWorkEventHandler(T1 object1, T2 object2, T3 object3); + /// + /// 带四个参数的委托 + /// + /// + /// + /// + /// + /// + /// + /// + /// + public delegate void NetWorkEventHandler(T1 object1, T2 object2, T3 object3, T4 object4); + /// + /// 带五个参数的委托 + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public delegate void NetWorkEventHandler(T1 object1, T2 object2, T3 object3, T4 object4, T5 object5); + public delegate void NetWorkEventHandler(T1 object1, T2 object2, T3 object3, T4 object4, T5 object5, T6 object6); + public delegate void NetWorkEventHandler(T1 object1, T2 object2, T3 object3, T4 object4, T5 object5, T6 object6, T7 object7); + public delegate void NetWorkEventHandler(T1 object1, T2 object2, T3 object3, T4 object4, T5 object5, T6 object6, T7 object7, T8 object8); + public delegate void NetWorkEventHandler(T1 object1, T2 object2, T3 object3, T4 object4, T5 object5, T6 object6, T7 object7, T8 object8, T9 object9); + #endregion + + #endregion + + +} diff --git a/tongxin/NetWorkHelper/IModels/ClientModel.cs b/tongxin/NetWorkHelper/IModels/ClientModel.cs new file mode 100644 index 0000000..0b79c8f --- /dev/null +++ b/tongxin/NetWorkHelper/IModels/ClientModel.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Net.Sockets; +using System.Text; +using SocketHelper.TClass; + +namespace SocketHelper.IModels +{ + /// + /// 此类在旧版本AxTcpServer组件中中使用 + /// 客户端类 + /// + public class ClientModel + { + private byte[] _bufferBackup = null;//备份缓冲区;主要是缓冲区有时候需要增大或缩小的时候用到; + /// + /// 备份缓冲区;主要是缓冲区有时候需要增大或缩小的时候用到; + /// + internal byte[] BufferBackup + { + get { return _bufferBackup; } + set { _bufferBackup = value; } + } + /// + /// 接受的数据缓存 + /// + public string RecevidMsg = ""; + /// + /// 缓存数据 + /// + public List RecevidBuffer = new List(); + /// + /// PC嵌套字 + /// + public Socket ClientSocket; + /// + /// 客户端类型1 + /// + public ClientType Clienttype = ClientType.None; + + /// + /// Socket类型(网页版或者PC版) + /// + public ClientStyle ClientStyle = ClientStyle.PcSocket; + /// + /// 客户端编号 + /// + public int Id = -1; + /// + /// 若是小车类型,则该标示表示车辆编号,若是信号机类型,则该标示表示信号机编号,其他则不使用该类型 + /// + public string ClientNo = ""; + /// + /// 如果是小车类型,则该项用于存储车辆运动状态,默认:运动 + /// + public VehicleMotionState VehicleMotionState = VehicleMotionState.Running; + /// + /// 判断在停车位上的状态 + /// + public SitState SitState = SitState.None; + public LedState[] SingleState = new LedState[0]; + public LedState[] SidewalkState = new LedState[0]; + /// + /// 若是小车类型,则该标示表示小车单前的RFID卡号 + /// + public string ClientRfidNo = ""; + /// + /// 若是小车类型,则该标示表示小车单前的车道号 + /// + public string ClientLaneNo = ""; + /// + /// 若是PC客户端类型,则下面两个表示表示用户登陆账号和密码 + /// + public string Username = ""; + public string Password = ""; + //存储PC客户端当前需要订阅的车辆 + public List CarNo { get; set; } + /// + /// 如果是闸机,升降杆客户端,(用于存储各个控制端的状态) + /// + public byte[] MotorClientState = new byte[32]; + /// + /// 是否登陆 + /// + public bool IsLogin { get; set; } + /// + /// 是否授权 + /// + public bool IsAuthorization { get; set; } + /// + /// 是否在线 + /// + public bool IsOnline = true; + /// + /// 心跳包字符串【如果为空则不发送心跳包】 + /// + public string Heartbeat = ""; + public string OrderType = ""; + /// + /// 承载客户端Socket的网络流 + /// + public NetworkStream NetworkStream { get; set; } + /// + /// 发生异常时不为null. + /// + public Exception Exception { get; set; } + /// + /// 接收缓冲区 + /// + public byte[] RecBuffer =new byte[1024]; + + /// + /// 发送缓冲区 + /// + public byte[] SendBuffer { get; set; } + + /// + /// 异步接收后包的大小 + /// + public int Offset { get; set; } + } + + + +} diff --git a/tongxin/NetWorkHelper/IModels/IClient.cs b/tongxin/NetWorkHelper/IModels/IClient.cs new file mode 100644 index 0000000..fce7ec2 --- /dev/null +++ b/tongxin/NetWorkHelper/IModels/IClient.cs @@ -0,0 +1,198 @@ +/******************************************************************** + * * + * * 创建时间:2014-08-05 + * * 说明:客户端信息类,存储客户端的一些基本信息,可定义修改 + * * +********************************************************************/ + +using NetWorkHelper.IUser; +using NetWorkHelper.TClass; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; + +namespace NetWorkHelper.IModels +{ + public class IClient + { + public IClient() + { + ClientStyle = ClientStyle.PcSocket; + Username = ""; + Password = ""; + BufferInfo = new BufferInfo(); + ClientInfo = new ClientInfo(); + } + public IClient(Socket socket) + { + WorkSocket = socket; + if (socket != null) + { + Ip = ((IPEndPoint)WorkSocket.RemoteEndPoint).Address.ToString(); + Port = ((IPEndPoint)WorkSocket.RemoteEndPoint).Port; + } + ClientStyle = ClientStyle.PcSocket; + Username = ""; + Password = ""; + BufferInfo = new BufferInfo(); + ClientInfo = new ClientInfo(); + } + /// + /// Socket + /// + public Socket WorkSocket { get; set; } + /// + /// 客户端端口IP + /// + public string Ip { get; set; } + /// + /// 客户端端口 + /// + public int Port { get; set; } + /// + /// Socket类型(网页版或者PC版) + /// + public ClientStyle ClientStyle { get; set; } + /// + /// 客户端登录账号 + /// + public string Username { get; set; } + /// + /// 客户端登录密码 + /// + public string Password { get; set; } + /// + /// 客户端信息类 + /// + public ClientInfo ClientInfo { get; set; } + /// + /// 数据缓存区信息 + /// + public BufferInfo BufferInfo { get; set; } + /// + /// 自定义数据 + /// + public object CustomData { get; set; } + /// + /// 是否已登录 + /// + public bool IsLogin { get; set; } + } + + public class ClientInfo + { + /// + /// 心跳检测模式 + /// + public HeartCheckType HeartCheckType = HeartCheckType.EncodingString; + /// + /// 心跳包数组数据【如果长度为0为空则不发送心跳包】 + /// + public byte[] HeartbeatByte = new byte[0]; + /// + /// 心跳包字符串【如果为空则不发送心跳包】 + /// + public string Heartbeat = ""; + /// + /// 客户端ID + /// + public int ClientId { get; set; } + + /// + /// 客户端编号 + /// + public string ClientNo { get; set; } + /// + /// 客户端类型 + /// + public ClientType Clienttype = ClientType.None; + /// + /// 若是小车类型,则该标示表示小车单前的RFID卡号 + /// + public string ClientRfidNo = ""; + /// + /// 若是小车类型,则该标示表示小车单前的车道号 + /// + public string ClientLaneNo = ""; + /// + /// 如果是小车类型,则该项用于存储车辆运动状态,默认:运动 + /// + public VehicleMotionState VehicleMotionState = VehicleMotionState.Running; + /// + /// 判断在停车位上的状态 + /// + public SitState SitState = SitState.None; + /// + /// 如果是信号机类型,用来存储信号灯路口状态 + /// + public LedState[] SingleState = new LedState[0]; + /// + /// 如果是信号机类型,用来存储信号灯人行道状态 + /// + public LedState[] SidewalkState = new LedState[0]; + /// + /// 如果是闸机,升降杆客户端,(用于存储各个控制端的状态) + /// + public byte[] MotorClientState = new byte[32]; + /// + /// 是否授权 + /// + public bool IsAuthorization { get; set; } + /// + /// 指令操作类型 + /// + public string OrderType = ""; + /// + /// 如果是调度系统客户端,则用来存储PC客户端当前需要订阅的车辆列表 + /// + public List CarNo { get; set; } + } + + public class BufferInfo + { + //备份缓冲区 + private byte[] _bufferBackup = null; + /// + /// 备份缓冲区;动态增大或缩小缓冲区的时候用到; + /// + internal byte[] BufferBackup + { + get { return _bufferBackup; } + set { _bufferBackup = value; } + } + + /// + /// 接收缓冲区 + /// + public byte[] ReceivedBuffer = new byte[2048]; + + /// + /// 发送缓冲区 + /// + public byte[] SendBuffer = new byte[1024]; + + /// + /// 接收的字符串信息 + /// + public string RecevidMsg = ""; + } + + /// + /// 心跳检测模式 + /// + public enum HeartCheckType + { + /// + /// 字符串模式 + /// + EncodingString, + /// + /// 十六进制字符串 + /// + HexString, + /// + /// byte数组模式 + /// + Byte + } +} diff --git a/tongxin/NetWorkHelper/ITool/ConvertStringManager.cs b/tongxin/NetWorkHelper/ITool/ConvertStringManager.cs new file mode 100644 index 0000000..3db8026 --- /dev/null +++ b/tongxin/NetWorkHelper/ITool/ConvertStringManager.cs @@ -0,0 +1,548 @@ +/******************************************************************** + * * + * * Copyright (C) 2013-2018 uiskin.cn + * * 作者: BinGoo QQ:315567586 + * * 请尊重作者劳动成果,请保留以上作者信息,禁止用于商业活动。 + * * + * * 创建时间:2017-09-18 + * * 说明:字符串,数字转换管理类 + * * +********************************************************************/ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace NetWorkHelper.ITool +{ + public class ConvertStringManager + { + #region 十六进制字符串和数组互转 + /// + /// 十六进制字符串转为字节数组 + /// + /// + /// + public static byte[] StringToHexByteArray(string s) + { + try + { + s = s.Replace(" ", ""); + if ((s.Length % 2) != 0) + s += " "; + byte[] returnBytes = new byte[s.Length / 2]; + for (int i = 0; i < returnBytes.Length; i++) + returnBytes[i] = Convert.ToByte(s.Substring(i * 2, 2), 16); + return returnBytes; + } + catch + { + return new byte[0]; + } + } + /// + /// 字节数组转为十六进制字符串 + /// + /// + /// + /// + public static string HexByteArrayToString(byte[] data, char intervalChar = ' ') + { + try + { + StringBuilder sb = new StringBuilder(data.Length * 3); + foreach (byte b in data) + { + sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, intervalChar)); + } + return sb.ToString().ToUpper();//将得到的字符全部以字母大写形式输出 + } + catch + { + return ""; + } + } + #endregion + + #region 各进制数间转换 + /// + /// 实现各进制数间的转换。ConvertBase("15",10,16)表示将十进制数15转换为16进制的数。 + /// + /// 要转换的值,即原值 + /// 原值的进制,只能是2,8,10,16四个值。 + /// 要转换到的目标进制,只能是2,8,10,16四个值。 + public static string ConvertBase(string value, int from, int to) + { + try + { + int intValue = Convert.ToInt32(value, from); //先转成10进制 + string result = Convert.ToString(intValue, to); //再转成目标进制 + if (to == 2) + { + int resultLength = result.Length; //获取二进制的长度 + switch (resultLength) + { + case 7: + result = "0" + result; + break; + case 6: + result = "00" + result; + break; + case 5: + result = "000" + result; + break; + case 4: + result = "0000" + result; + break; + case 3: + result = "00000" + result; + break; + } + } + return result; + } + catch + { + + //LogHelper.WriteTraceLog(TraceLogLevel.Error, ex.Message); + return "0"; + } + } + #endregion + + #region 使用指定字符集将string转换成byte[] + /// + /// 使用指定字符集将string转换成byte[] + /// + /// 要转换的字符串 + /// 字符编码 + public static byte[] StringToBytes(string text, Encoding encoding) + { + return encoding.GetBytes(text); + } + #endregion + + #region 使用指定字符集将byte[]转换成string + /// + /// 使用指定字符集将byte[]转换成string + /// + /// 要转换的字节数组 + /// 字符编码 + public static string BytesToString(byte[] bytes, Encoding encoding) + { + return encoding.GetString(bytes); + } + #endregion + + #region 将byte[]转换成int + /// + /// 将byte[]转换成int + /// + /// 需要转换成整数的byte数组 + public static int BytesToInt32(byte[] data) + { + //如果传入的字节数组长度小于4,则返回0 + if (data.Length < 4) + { + return 0; + } + + //定义要返回的整数 + int num = 0; + + //如果传入的字节数组长度大于4,需要进行处理 + if (data.Length >= 4) + { + //创建一个临时缓冲区 + byte[] tempBuffer = new byte[4]; + + //将传入的字节数组的前4个字节复制到临时缓冲区 + Buffer.BlockCopy(data, 0, tempBuffer, 0, 4); + + //将临时缓冲区的值转换成整数,并赋给num + num = BitConverter.ToInt32(tempBuffer, 0); + } + + //返回整数 + return num; + } + #endregion + + #region 字符串、数组、列表互转 + /// + /// 把字符串按照分隔符转换成 List + /// + /// 源字符串 + /// 分隔符 + /// + public static List GetStrList(string str, char speater) + { + List list = new List(); + string[] ss = str.Split(speater); + foreach (string s in ss) + { + if (!string.IsNullOrEmpty(s) && s != speater.ToString()) + { + string strVal = s; + list.Add(strVal); + } + } + return list; + } + /// + /// 把字符串按照分隔符转换成数组 + /// + /// + /// 分隔符 + /// + public static string[] GetStrArray(string str, char speater) + { + return str.Split(speater); + } + /// + /// 把 字符串列表 按照分隔符组装成 新字符串 + /// + /// + /// + /// + public static string GetListToString(List list, string speater) + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < list.Count; i++) + { + if (i == list.Count - 1) + { + sb.Append(list[i]); + } + else + { + sb.Append(list[i]); + sb.Append(speater); + } + } + return sb.ToString(); + } + #endregion + + #region 删除最后一个字符之后的字符 + + /// + /// 删除最后结尾的一个逗号 + /// + public static string DelLastComma(string str) + { + return str.Substring(0, str.LastIndexOf(",")); + } + + /// + /// 删除最后结尾的指定字符后的字符 + /// + public static string DelLastChar(string str, string strchar) + { + return str.Substring(0, str.LastIndexOf(strchar)); + } + + #endregion + + #region 全角半角装换 + /// + /// 转全角的函数(SBC case) + /// + /// + /// + public static string ToSbc(string input) + { + //半角转全角: + char[] c = input.ToCharArray(); + for (int i = 0; i < c.Length; i++) + { + if (c[i] == 32) + { + c[i] = (char)12288; + continue; + } + if (c[i] < 127) + c[i] = (char)(c[i] + 65248); + } + return new string(c); + } + + /// + /// 转半角的函数(DBC case) + /// + /// 输入 + /// + public static string ToDbc(string input) + { + char[] c = input.ToCharArray(); + for (int i = 0; i < c.Length; i++) + { + if (c[i] == 12288) + { + c[i] = (char)32; + continue; + } + if (c[i] > 65280 && c[i] < 65375) + c[i] = (char)(c[i] - 65248); + } + return new string(c); + } + #endregion + + #region 快速验证一个字符串是否符合指定的正则表达式。 + /// + /// 快速验证一个字符串是否符合指定的正则表达式。 + /// + /// 正则表达式的内容。 + /// 需验证的字符串。 + /// 是否合法的bool值。 + public static bool QuickValidate(string _express, string _value) + { + if (_value == null) return false; + Regex myRegex = new Regex(_express); + if (_value.Length == 0) + { + return false; + } + return myRegex.IsMatch(_value); + } + #endregion + + #region 补足位数 + /// + /// 指定字符串的固定长度,如果字符串小于固定长度, + /// 则在字符串的前面补足零,可设置的固定长度最大为9位 + /// + /// 原始字符串 + /// 字符串的固定长度 + /// 要填补的字符 + public static string RepairZero(string text, int limitedLength, string repairStr) + { + //补足完整的字符串 + string temp = ""; + + //补足字符串 + for (int i = 0; i < limitedLength - text.Length; i++) + { + temp += repairStr; + } + + //连接text + temp += text; + + //返回补足0的字符串 + return temp; + } + #endregion + + #region 数字转大写字符串人民币 + /// + /// 转换人民币大小金额 + /// + /// 金额 + /// 返回大写形式 + public static string CmycurD(decimal num) + { + string str1 = "零壹贰叁肆伍陆柒捌玖"; //0-9所对应的汉字 + string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字 + string str3 = ""; //从原num值中取出的值 + string str4 = ""; //数字的字符串形式 + string str5 = ""; //人民币大写金额形式 + int i; //循环变量 + int j; //num的值乘以100的字符串长度 + string ch1 = ""; //数字的汉语读法 + string ch2 = ""; //数字位的汉字读法 + int nzero = 0; //用来计算连续的零值是几个 + int temp; //从原num值中取出的值 + + num = Math.Round(Math.Abs(num), 2); //将num取绝对值并四舍五入取2位小数 + str4 = ((long)(num * 100)).ToString(); //将num乘100并转换成字符串形式 + j = str4.Length; //找出最高位 + if (j > 15) { return "溢出"; } + str2 = str2.Substring(15 - j); //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分 + + //循环取出每一位需要转换的值 + for (i = 0; i < j; i++) + { + str3 = str4.Substring(i, 1); //取出需转换的某一位的值 + temp = Convert.ToInt32(str3); //转换为数字 + if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15)) + { + //当所取位数不为元、万、亿、万亿上的数字时 + if (str3 == "0") + { + ch1 = ""; + ch2 = ""; + nzero = nzero + 1; + } + else + { + if (str3 != "0" && nzero != 0) + { + ch1 = "零" + str1.Substring(temp * 1, 1); + ch2 = str2.Substring(i, 1); + nzero = 0; + } + else + { + ch1 = str1.Substring(temp * 1, 1); + ch2 = str2.Substring(i, 1); + nzero = 0; + } + } + } + else + { + //该位是万亿,亿,万,元位等关键位 + if (str3 != "0" && nzero != 0) + { + ch1 = "零" + str1.Substring(temp * 1, 1); + ch2 = str2.Substring(i, 1); + nzero = 0; + } + else + { + if (str3 != "0" && nzero == 0) + { + ch1 = str1.Substring(temp * 1, 1); + ch2 = str2.Substring(i, 1); + nzero = 0; + } + else + { + if (str3 == "0" && nzero >= 3) + { + ch1 = ""; + ch2 = ""; + nzero = nzero + 1; + } + else + { + if (j >= 11) + { + ch1 = ""; + nzero = nzero + 1; + } + else + { + ch1 = ""; + ch2 = str2.Substring(i, 1); + nzero = nzero + 1; + } + } + } + } + } + if (i == (j - 11) || i == (j - 3)) + { + //如果该位是亿位或元位,则必须写上 + ch2 = str2.Substring(i, 1); + } + str5 = str5 + ch1 + ch2; + + if (i == j - 1 && str3 == "0") + { + //最后一位(分)为0时,加上“整” + str5 = str5 + '整'; + } + } + if (num == 0) + { + str5 = "零元整"; + } + return str5; + } + + /**/ + /// + /// 一个重载,将字符串先转换成数字在调用CmycurD(decimal num) + /// + /// 用户输入的金额,字符串形式未转成decimal + /// + public static string CmycurD(string numstr) + { + try + { + decimal num = Convert.ToDecimal(numstr); + return CmycurD(num); + } + catch + { + return "非数字形式!"; + } + } + #endregion + + #region 数字转中文 + /// + /// 数字转中文 + /// + /// eg: 22 + /// + public static string NumberToChinese(int number) + { + string res = string.Empty; + string str = number.ToString(); + string schar = str.Substring(0, 1); + switch (schar) + { + case "1": + res = "一"; + break; + case "2": + res = "二"; + break; + case "3": + res = "三"; + break; + case "4": + res = "四"; + break; + case "5": + res = "五"; + break; + case "6": + res = "六"; + break; + case "7": + res = "七"; + break; + case "8": + res = "八"; + break; + case "9": + res = "九"; + break; + default: + res = "零"; + break; + } + if (str.Length > 1) + { + switch (str.Length) + { + case 2: + case 6: + res += "十"; + break; + case 3: + case 7: + res += "百"; + break; + case 4: + res += "千"; + break; + case 5: + res += "万"; + break; + default: + res += ""; + break; + } + res += NumberToChinese(int.Parse(str.Substring(1, str.Length - 1))); + } + return res; + } + #endregion + } +} diff --git a/tongxin/NetWorkHelper/ITool/CsvManager.cs b/tongxin/NetWorkHelper/ITool/CsvManager.cs new file mode 100644 index 0000000..2363462 --- /dev/null +++ b/tongxin/NetWorkHelper/ITool/CsvManager.cs @@ -0,0 +1,87 @@ +/******************************************************************** + * * + * * Copyright (C) 2013-2018 uiskin.cn + * * 作者: BinGoo QQ:315567586 + * * 请尊重作者劳动成果,请保留以上作者信息,禁止用于商业活动。 + * * + * * 创建时间:2017-09-18 + * * 说明:Csv文件操作类 + * * +********************************************************************/ +using System.Data; +using System.IO; +using System.Text; + +namespace NetWorkHelper.ITool +{ + class CsvManager + { + /// + /// 导出报表为Csv + /// + /// DataTable + /// 物理路径 + /// 表头 + /// 字段标题,逗号分隔 + public static bool DataTable2Csv(DataTable dt, string strFilePath, string tableheader, string columname) + { + try + { + string strBufferLine; + StreamWriter strmWriterObj = new StreamWriter(strFilePath, false, Encoding.UTF8); + strmWriterObj.WriteLine(tableheader); + strmWriterObj.WriteLine(columname); + for (int i = 0; i < dt.Rows.Count; i++) + { + strBufferLine = ""; + for (int j = 0; j < dt.Columns.Count; j++) + { + if (j > 0) + strBufferLine += ","; + strBufferLine += dt.Rows[i][j].ToString(); + } + strmWriterObj.WriteLine(strBufferLine); + } + strmWriterObj.Close(); + return true; + } + catch + { + return false; + } + } + + /// + /// 将Csv读入DataTable + /// + /// csv文件路径 + /// 表示第n行是字段title,第n+1行是记录开始 + /// 要导出的dataTable + public static DataTable Csv2Dt(string filePath, int n, DataTable dataTable) + { + StreamReader reader = new StreamReader(filePath, Encoding.UTF8, false); + int i, m = 0; + while (reader.Peek() > 0) + { + m = m + 1; + string str = reader.ReadLine(); + if (string.IsNullOrEmpty(str)) + { + break; + } + if (m >= n + 1) + { + string[] split = str.Split(','); + + DataRow dr = dataTable.NewRow(); + for (i = 0; i < split.Length; i++) + { + dr[i] = split[i]; + } + dataTable.Rows.Add(dr); + } + } + return dataTable; + } + } +} diff --git a/tongxin/NetWorkHelper/ITool/DateTimeManager.cs b/tongxin/NetWorkHelper/ITool/DateTimeManager.cs new file mode 100644 index 0000000..41856f1 --- /dev/null +++ b/tongxin/NetWorkHelper/ITool/DateTimeManager.cs @@ -0,0 +1,306 @@ +/******************************************************************** + * * + * * Copyright (C) 2013-2018 uiskin.cn + * * 作者: BinGoo QQ:315567586 + * * 请尊重作者劳动成果,请保留以上作者信息,禁止用于商业活动。 + * * + * * 创建时间:2017-09-18 + * * 说明:时间操作类 + * * +********************************************************************/ +using System; + +namespace NetWorkHelper.ITool +{ + internal class DateTimeManager + { + /// + /// 返回每月的第一天和最后一天 + /// + /// + /// + /// + + public static void ReturnDateFormat(int month, out string firstDay, out string lastDay) + { + int year = DateTime.Now.Year + month / 12; + if (month != 12) + { + month = month % 12; + } + switch (month) + { + case 1: + firstDay = DateTime.Now.ToString(year + "-0" + month + "-01"); + lastDay = DateTime.Now.ToString(year + "-0" + month + "-31"); + break; + case 2: + firstDay = DateTime.Now.ToString(year + "-0" + month + "-01"); + if (DateTime.IsLeapYear(DateTime.Now.Year)) + lastDay = DateTime.Now.ToString(year + "-0" + month + "-29"); + else + lastDay = DateTime.Now.ToString(year + "-0" + month + "-28"); + break; + case 3: + firstDay = DateTime.Now.ToString(year + "-0" + month + "-01"); + lastDay = DateTime.Now.ToString("yyyy-0" + month + "-31"); + break; + case 4: + firstDay = DateTime.Now.ToString(year + "-0" + month + "-01"); + lastDay = DateTime.Now.ToString(year + "-0" + month + "-30"); + break; + case 5: + firstDay = DateTime.Now.ToString(year + "-0" + month + "-01"); + lastDay = DateTime.Now.ToString(year + "-0" + month + "-31"); + break; + case 6: + firstDay = DateTime.Now.ToString(year + "-0" + month + "-01"); + lastDay = DateTime.Now.ToString(year + "-0" + month + "-30"); + break; + case 7: + firstDay = DateTime.Now.ToString(year + "-0" + month + "-01"); + lastDay = DateTime.Now.ToString(year + "-0" + month + "-31"); + break; + case 8: + firstDay = DateTime.Now.ToString(year + "-0" + month + "-01"); + lastDay = DateTime.Now.ToString(year + "-0" + month + "-31"); + break; + case 9: + firstDay = DateTime.Now.ToString(year + "-0" + month + "-01"); + lastDay = DateTime.Now.ToString(year + "-0" + month + "-30"); + break; + case 10: + firstDay = DateTime.Now.ToString(year + "-" + month + "-01"); + lastDay = DateTime.Now.ToString(year + "-" + month + "-31"); + break; + case 11: + firstDay = DateTime.Now.ToString(year + "-" + month + "-01"); + lastDay = DateTime.Now.ToString(year + "-" + month + "-30"); + break; + default: + firstDay = DateTime.Now.ToString(year + "-" + month + "-01"); + lastDay = DateTime.Now.ToString(year + "-" + month + "-31"); + break; + } + } + + /// + /// 将时间格式化成 年月日 的形式,如果时间为null,返回当前系统时间 + /// + /// 年月日分隔符 + /// + /// + public string GetFormatDate(DateTime dt, char Separator) + { + if (dt != null && !dt.Equals(DBNull.Value)) + { + string tem = string.Format("yyyy{0}MM{1}dd", Separator, Separator); + return dt.ToString(tem); + } + else + { + return GetFormatDate(DateTime.Now, Separator); + } + } + + /// + /// 将时间格式化成 时分秒 的形式,如果时间为null,返回当前系统时间 + /// + /// + /// + /// + public string GetFormatTime(DateTime dt, char Separator) + { + if (dt != null && !dt.Equals(DBNull.Value)) + { + string tem = string.Format("hh{0}mm{1}ss", Separator, Separator); + return dt.ToString(tem); + } + else + { + return GetFormatDate(DateTime.Now, Separator); + } + } + + /// + /// 把秒转换成分钟 + /// + /// + public static int SecondToMinute(int Second) + { + decimal mm = (decimal)((decimal)Second / (decimal)60); + return Convert.ToInt32(Math.Ceiling(mm)); + } + + #region 返回某年某月最后一天 + + /// + /// 返回某年某月最后一天 + /// + /// 年份 + /// 月份 + /// + public static int GetMonthLastDate(int year, int month) + { + DateTime lastDay = new DateTime(year, month, + new System.Globalization.GregorianCalendar().GetDaysInMonth(year, month)); + int Day = lastDay.Day; + return Day; + } + + #endregion + + #region 返回时间差 + + public static string DateDiff(DateTime DateTime1, DateTime DateTime2) + { + string dateDiff = null; + try + { + //TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); + //TimeSpan ts2 = new TimeSpan(DateTime2.Ticks); + //TimeSpan ts = ts1.Subtract(ts2).Duration(); + TimeSpan ts = DateTime2 - DateTime1; + if (ts.Days >= 1) + { + dateDiff = string.Format("{0}月{1}日", DateTime1.Month, DateTime1.Day); + } + else + { + if (ts.Hours > 1) + { + dateDiff = string.Format("{0}小时前", ts.Hours); + } + else + { + dateDiff = string.Format("{0}分钟前", ts.Minutes); + } + } + } + catch + { + } + return dateDiff; + } + + #endregion + + #region 获得两个日期的间隔 + + /// + /// 获得两个日期的间隔 + /// + /// 日期一。 + /// 日期二。 + /// 日期间隔TimeSpan。 + public static TimeSpan DateDiff2(DateTime DateTime1, DateTime DateTime2) + { + TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); + TimeSpan ts2 = new TimeSpan(DateTime2.Ticks); + TimeSpan ts = ts1.Subtract(ts2).Duration(); + return ts; + } + + #endregion + + #region 格式化日期时间 + + /// + /// 格式化日期时间 + /// + /// 日期时间 + /// 显示模式 + /// 0-9种模式的日期 + public static string FormatDate(DateTime dateTime1, string dateMode) + { + switch (dateMode) + { + case "0": + return dateTime1.ToString("yyyy-MM-dd"); + case "1": + return dateTime1.ToString("yyyy-MM-dd HH:mm:ss"); + case "2": + return dateTime1.ToString("yyyy/MM/dd"); + case "3": + return dateTime1.ToString("yyyy年MM月dd日"); + case "4": + return dateTime1.ToString("MM-dd"); + case "5": + return dateTime1.ToString("MM/dd"); + case "6": + return dateTime1.ToString("MM月dd日"); + case "7": + return dateTime1.ToString("yyyy-MM"); + case "8": + return dateTime1.ToString("yyyy/MM"); + case "9": + return dateTime1.ToString("yyyy年MM月"); + default: + return dateTime1.ToString(); + } + } + + #endregion + + #region 得到随机日期 + + /// + /// 得到随机日期 + /// + /// 起始日期 + /// 结束日期 + /// 间隔日期之间的 随机日期 + public static DateTime GetRandomTime(DateTime time1, DateTime time2) + { + Random random = new Random(); + DateTime minTime = new DateTime(); + DateTime maxTime = new DateTime(); + + TimeSpan ts = new TimeSpan(time1.Ticks - time2.Ticks); + + // 获取两个时间相隔的秒数 + double dTotalSecontds = ts.TotalSeconds; + int iTotalSecontds = 0; + + if (dTotalSecontds > Int32.MaxValue) + { + iTotalSecontds = Int32.MaxValue; + } + else if (dTotalSecontds < Int32.MinValue) + { + iTotalSecontds = Int32.MinValue; + } + else + { + iTotalSecontds = (int)dTotalSecontds; + } + + + if (iTotalSecontds > 0) + { + minTime = time2; + maxTime = time1; + } + else if (iTotalSecontds < 0) + { + minTime = time1; + maxTime = time2; + } + else + { + return time1; + } + + int maxValue = iTotalSecontds; + + if (iTotalSecontds <= Int32.MinValue) + maxValue = Int32.MinValue + 1; + + int i = random.Next(Math.Abs(maxValue)); + + return minTime.AddSeconds(i); + } + + #endregion + } +} diff --git a/tongxin/NetWorkHelper/ITool/JsonManager.cs b/tongxin/NetWorkHelper/ITool/JsonManager.cs new file mode 100644 index 0000000..5ba090a --- /dev/null +++ b/tongxin/NetWorkHelper/ITool/JsonManager.cs @@ -0,0 +1,328 @@ +/******************************************************************** + * * + * * Copyright (C) 2013-2018 uiskin.cn + * * 作者: BinGoo QQ:315567586 + * * 请尊重作者劳动成果,请保留以上作者信息,禁止用于商业活动。 + * * + * * 创建时间:2017-09-18 + * * 说明:JSON操作类 + * * +********************************************************************/ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using System.Data.Common; +using System.Reflection; +using System.Text; + +namespace NetWorkHelper.ITool +{ + public class JsonManager + { + /// + /// 过滤特殊字符 + /// + private static string String2Json(string s) + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < s.Length; i++) + { + char c = s.ToCharArray()[i]; + switch (c) + { + case '\"': + sb.Append("\\\""); break; + case '\\': + sb.Append("\\\\"); break; + case '/': + sb.Append("\\/"); break; + case '\b': + sb.Append("\\b"); break; + case '\f': + sb.Append("\\f"); break; + case '\n': + sb.Append("\\n"); break; + case '\r': + sb.Append("\\r"); break; + case '\t': + sb.Append("\\t"); break; + default: + sb.Append(c); break; + } + } + return sb.ToString(); + } + /// + /// 格式化字符型、日期型、布尔型 + /// + private static string StringFormat(string str, Type type) + { + if (type == typeof(string)) + { + str = String2Json(str); + str = "\"" + str + "\""; + } + else if (type == typeof(DateTime)) + { + str = "\"" + str + "\""; + } + else if (type == typeof(bool)) + { + str = str.ToLower(); + } + else if (type != typeof(string) && string.IsNullOrEmpty(str)) + { + str = "\"" + str + "\""; + } + return str; + } + + #region List转换成Json + /// + /// List转换成Json + /// + public static string ListToJson(IList list) + { + object obj = list[0]; + return ListToJson(list, obj.GetType().Name); + } + + /// + /// List转换成Json + /// + public static string ListToJson(IList list, string jsonName) + { + StringBuilder Json = new StringBuilder(); + if (string.IsNullOrEmpty(jsonName)) jsonName = list[0].GetType().Name; + Json.Append("{\"" + jsonName + "\":["); + if (list.Count > 0) + { + for (int i = 0; i < list.Count; i++) + { + T obj = Activator.CreateInstance(); + PropertyInfo[] pi = obj.GetType().GetProperties(); + Json.Append("{"); + for (int j = 0; j < pi.Length; j++) + { + Type type = pi[j].GetValue(list[i], null).GetType(); + Json.Append("\"" + pi[j].Name.ToString() + "\":" + StringFormat(pi[j].GetValue(list[i], null).ToString(), type)); + + if (j < pi.Length - 1) + { + Json.Append(","); + } + } + Json.Append("}"); + if (i < list.Count - 1) + { + Json.Append(","); + } + } + } + Json.Append("]}"); + return Json.ToString(); + } + #endregion + + #region 对象转换为Json + /// + /// 对象转换为Json + /// + /// 对象 + /// Json字符串 + public static string ToJson(object jsonObject) + { + string jsonString = "{"; + PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties(); + for (int i = 0; i < propertyInfo.Length; i++) + { + object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null); + string value = string.Empty; + if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan) + { + value = "'" + objectValue.ToString() + "'"; + } + else if (objectValue is string) + { + value = "'" + ToJson(objectValue.ToString()) + "'"; + } + else if (objectValue is IEnumerable) + { + value = ToJson((IEnumerable)objectValue); + } + else + { + value = ToJson(objectValue.ToString()); + } + jsonString += "\"" + ToJson(propertyInfo[i].Name) + "\":" + value + ","; + } + jsonString.Remove(jsonString.Length - 1, jsonString.Length); + return jsonString + "}"; + } + #endregion + + #region 对象集合转换Json + /// + /// 对象集合转换Json + /// + /// 集合对象 + /// Json字符串 + public static string ToJson(IEnumerable array) + { + string jsonString = "["; + foreach (object item in array) + { + jsonString += ToJson(item) + ","; + } + jsonString.Remove(jsonString.Length - 1, jsonString.Length); + return jsonString + "]"; + } + #endregion + + #region 普通集合转换Json + /// + /// 普通集合转换Json + /// + /// 集合对象 + /// Json字符串 + public static string ToArrayString(IEnumerable array) + { + string jsonString = "["; + foreach (object item in array) + { + jsonString = ToJson(item.ToString()) + ","; + } + jsonString.Remove(jsonString.Length - 1, jsonString.Length); + return jsonString + "]"; + } + #endregion + + #region DataSet转换为Json + /// + /// DataSet转换为Json + /// + /// DataSet对象 + /// Json字符串 + public static string ToJson(DataSet dataSet) + { + string jsonString = "{"; + foreach (DataTable table in dataSet.Tables) + { + jsonString += "\"" + table.TableName + "\":" + ToJson(table) + ","; + } + jsonString = jsonString.TrimEnd(','); + return jsonString + "}"; + } + #endregion + + #region Datatable转换为Json + /// + /// Datatable转换为Json + /// + /// Datatable对象 + /// Json字符串 + public static string ToJson(DataTable dt) + { + StringBuilder jsonString = new StringBuilder(); + jsonString.Append("["); + DataRowCollection drc = dt.Rows; + for (int i = 0; i < drc.Count; i++) + { + jsonString.Append("{"); + for (int j = 0; j < dt.Columns.Count; j++) + { + string strKey = dt.Columns[j].ColumnName; + string strValue = drc[i][j].ToString(); + Type type = dt.Columns[j].DataType; + jsonString.Append("\"" + strKey + "\":"); + strValue = StringFormat(strValue, type); + if (j < dt.Columns.Count - 1) + { + jsonString.Append(strValue + ","); + } + else + { + jsonString.Append(strValue); + } + } + jsonString.Append("},"); + } + jsonString.Remove(jsonString.Length - 1, 1); + jsonString.Append("]"); + return jsonString.ToString(); + } + + /// + /// DataTable转换为Json + /// + public static string ToJson(DataTable dt, string jsonName) + { + StringBuilder Json = new StringBuilder(); + if (string.IsNullOrEmpty(jsonName)) jsonName = dt.TableName; + Json.Append("{\"" + jsonName + "\":["); + if (dt.Rows.Count > 0) + { + for (int i = 0; i < dt.Rows.Count; i++) + { + Json.Append("{"); + for (int j = 0; j < dt.Columns.Count; j++) + { + Type type = dt.Rows[i][j].GetType(); + Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j].ToString(), type)); + if (j < dt.Columns.Count - 1) + { + Json.Append(","); + } + } + Json.Append("}"); + if (i < dt.Rows.Count - 1) + { + Json.Append(","); + } + } + } + Json.Append("]}"); + return Json.ToString(); + } + #endregion + + #region DataReader转换为Json + /// + /// DataReader转换为Json + /// + /// DataReader对象 + /// Json字符串 + public static string ToJson(DbDataReader dataReader) + { + StringBuilder jsonString = new StringBuilder(); + jsonString.Append("["); + while (dataReader.Read()) + { + jsonString.Append("{"); + for (int i = 0; i < dataReader.FieldCount; i++) + { + Type type = dataReader.GetFieldType(i); + string strKey = dataReader.GetName(i); + string strValue = dataReader[i].ToString(); + jsonString.Append("\"" + strKey + "\":"); + strValue = StringFormat(strValue, type); + if (i < dataReader.FieldCount - 1) + { + jsonString.Append(strValue + ","); + } + else + { + jsonString.Append(strValue); + } + } + jsonString.Append("},"); + } + dataReader.Close(); + jsonString.Remove(jsonString.Length - 1, 1); + jsonString.Append("]"); + return jsonString.ToString(); + } + #endregion + } +} diff --git a/tongxin/NetWorkHelper/IUser/CustomEnum.cs b/tongxin/NetWorkHelper/IUser/CustomEnum.cs new file mode 100644 index 0000000..b9efa51 --- /dev/null +++ b/tongxin/NetWorkHelper/IUser/CustomEnum.cs @@ -0,0 +1,87 @@ +/******************************************************************** + * * + * * Copyright (C) 2013-? Corporation All rights reserved. + * * 作者: BinGoo QQ:315567586 + * * 请尊重作者劳动成果,请保留以上作者信息,禁止用于商业活动。 + * * + * * 创建时间:2014-08-05 + * * 说明:自定义枚举文件 + * * +********************************************************************/ + +namespace NetWorkHelper.IUser +{ + /// + /// 停车位状态 + /// + public enum SitState + { + None, + Enter, + Leave, + On, + Out + } + + /// + /// 车辆运动状态 + /// + public enum VehicleMotionState + { + /// + /// 运动 + /// + Running = 0x01, + + /// + /// 停止 + /// + Stop = 0x00, + + /// + /// 加速 + /// + AddSpeed = 0x02, + + /// + /// 减速 + /// + DelSpeed = 0x03, + } + + /// + /// 信号灯状态 + /// + public enum LedState + { + /// + /// 绿灯 + /// + Green = 0x00, + + /// + /// 绿灯 + /// + GreenFlash = 0x01, + + /// + /// 红灯 + /// + Red = 0x02, + + /// + /// 黄灯 + /// + Yellow = 0x04, + + /// + /// 黄闪 + /// + YellowFlash = 0x05, + + /// + /// 无灯色(灭灯) + /// + None = 0x06 + } +} diff --git a/tongxin/NetWorkHelper/NetWorkHelper.csproj b/tongxin/NetWorkHelper/NetWorkHelper.csproj new file mode 100644 index 0000000..a864248 --- /dev/null +++ b/tongxin/NetWorkHelper/NetWorkHelper.csproj @@ -0,0 +1,188 @@ + + + + + Debug + AnyCPU + {FB7970FD-F699-4093-83D0-509501B7863C} + Library + Properties + NetWorkHelper + NetWorkHelper + v4.8 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AnyCPU + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + prompt + MinimumRecommendedRules.ruleset + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + prompt + MinimumRecommendedRules.ruleset + + + true + bin\x86\Debug\ + DEBUG;TRACE + full + x86 + prompt + MinimumRecommendedRules.ruleset + + + bin\x86\Release\ + TRACE + true + pdbonly + x86 + prompt + MinimumRecommendedRules.ruleset + + + + ..\..\packages\Microsoft.Office.Interop.Excel.15.0.4795.1001\lib\net20\Microsoft.Office.Interop.Excel.dll + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Component + Always + + + ITcpClient.cs + Always + + + Component + + + ITcpServer.cs + + + Component + + + AxUdpClient.cs + + + + + Component + + + Component + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AxUdpClient.cs + + + + + + + + + + + \ No newline at end of file diff --git a/tongxin/NetWorkHelper/Properties/AssemblyInfo.cs b/tongxin/NetWorkHelper/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..11ea2e4 --- /dev/null +++ b/tongxin/NetWorkHelper/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// 有关程序集的常规信息通过以下 +// 特性集控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("NetWorkHelper,包含Net基础操作类,Socket高度组件封装类库")] +[assembly: AssemblyDescription("作者:BinGoo ; QQ:315567586")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("BinGoo")] +[assembly: AssemblyProduct("NetWorkHelper")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("BinGoo")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 使此程序集中的类型 +// 对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +// 则将该类型上的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("0bbfb4a9-e262-4bbc-a53c-bd61b56c7cf9")] + +// 程序集的版本信息由下面四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("4.18.04.25")] +[assembly: AssemblyFileVersion("4.18.04.25")] diff --git a/tongxin/NetWorkHelper/TCP/AxTcpClient.Designer.cs b/tongxin/NetWorkHelper/TCP/AxTcpClient.Designer.cs new file mode 100644 index 0000000..715e545 --- /dev/null +++ b/tongxin/NetWorkHelper/TCP/AxTcpClient.Designer.cs @@ -0,0 +1,36 @@ +namespace SocketHelper +{ + partial class AxTcpClient + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/tongxin/NetWorkHelper/TCP/AxTcpClient.cs b/tongxin/NetWorkHelper/TCP/AxTcpClient.cs new file mode 100644 index 0000000..c9834f7 --- /dev/null +++ b/tongxin/NetWorkHelper/TCP/AxTcpClient.cs @@ -0,0 +1,416 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading; + +namespace SocketHelper +{ + public partial class AxTcpClient : Component + { + #region 构造函数 + public AxTcpClient() + { + InitializeComponent(); + } + + public AxTcpClient(IContainer container) + { + container.Add(this); + + InitializeComponent(); + } + #endregion + + #region 属性 + /// + /// 服务端IP + /// + private string _serverip; + [Description("服务端IP")] + [Category("TcpClient属性")] + public string ServerIp + { + set { _serverip = value; } + get { return _serverip; } + } + /// + /// 服务端监听端口 + /// + private int _serverport; + [Description("服务端监听端口")] + [Category("TcpClient属性")] + public int ServerPort + { + set { _serverport = value; } + get { return _serverport; } + } + /// + /// TcpClient客户端 + /// + private TcpClient _tcpclient = null; + [Description("TcpClient操作类")] + [Category("TcpClient隐藏属性")] + [Browsable(false)] + public TcpClient Tcpclient + { + set { _tcpclient = value; } + get { return _tcpclient; } + } + /// + /// Tcp客户端连接线程 + /// + private Thread _tcpthread = null; + [Description("TcpClient连接服务端线程")] + [Category("TcpClient隐藏属性")] + [Browsable(false)] + public Thread Tcpthread + { + set { _tcpthread = value; } + get { return _tcpthread; } + } + /// + /// 是否启动Tcp连接线程 + /// + private bool _isStarttcpthreading = false; + [Description("是否启动Tcp连接线程")] + [Category("TcpClient隐藏属性")] + [Browsable(false)] + public bool IsStartTcpthreading + { + set { _isStarttcpthreading = value; } + get { return _isStarttcpthreading; } + } + /// + /// 是否启动TCP + /// + public bool IsStart = false; + /// + /// 是否重连 + /// + private bool _isreconnection = false; + /// + /// 是否重连 + /// + [Description("是否重连")] + [Category("TcpClient属性")] + public bool IsReconnection + { + set { _isreconnection = value; } + get { return _isreconnection; } + } + + private int _reConnectionTime = 3000; + /// + /// 设置断开重连时间间隔单位(毫秒)(默认3000毫秒) + /// + [Description("设置断开重连时间间隔单位(毫秒)(默认3000毫秒)")] + [Category("TcpClient属性")] + public int ReConnectionTime + { + get { return _reConnectionTime; } + set { _reConnectionTime = value; } + } + private string _receivestr; + /// + /// 接收Socket数据包 缓存字符串 + /// + [Description("接收Socket数据包 缓存字符串")] + [Category("TcpClient隐藏属性"), Browsable(false)] + public string Receivestr + { + set { _receivestr = value; } + get { return _receivestr; } + } + /// + /// 重连次数 + /// + private int _reConectedCount = 0; + [Description("重连次数")] + [Category("TcpClient隐藏属性"), Browsable(false)] + public int ReConectedCount + { + get { return _reConectedCount; } + set { _reConectedCount = value; } + } + + #endregion + + #region 方法 + + /// + /// 启动连接Socket服务器 + /// + public void StartConnection() + { + try + { + IsStart = true; + IsReconnection = true; + CreateTcpClient(); + } + catch (Exception ex) + { + OnTcpClientErrorMsgEnterHead("错误信息:" + ex.Message); + } + } + /// + /// 创建线程连接 + /// + private void CreateTcpClient() + { + //如果已经启动TCP并且是可重连状态则继续连接 + if (!(IsReconnection && IsStart)) + return; + //标示已启动连接,防止重复启动线程 + IsReconnection = false; + IsStartTcpthreading = true; + Tcpclient = new TcpClient(); + Tcpthread = new Thread(StartTcpThread); + + IsOnlienCheckStart(); + Tcpthread.Start(); + } + /// + /// 线程接收Socket上传的数据 + /// + private void StartTcpThread() + { + byte[] receivebyte = new byte[2048]; + int bytelen; + try + { + while (IsStartTcpthreading) + { + #region + + if (!Tcpclient.Connected) + { + try + { + if (ReConectedCount != 0) + { + //返回状态信息 + OnTcpClientStateInfoEnterHead( + string.Format("正在第{0}次重新连接服务器... ...", ReConectedCount), + SocketState.Reconnection); + } + else + { + //SocketStateInfo + OnTcpClientStateInfoEnterHead("正在连接服务器... ...", SocketState.Connecting); + } + Tcpclient.Connect(IPAddress.Parse(ServerIp), ServerPort); + OnTcpClientStateInfoEnterHead("已连接服务器", SocketState.Connected); + //Tcpclient.Client.Send(Encoding.Default.GetBytes("login")); + } + catch + { + //连接失败 + ReConectedCount++; + //强制重新连接 + IsReconnection = true; + IsStartTcpthreading = false; + //每三秒重连一次 + Thread.Sleep(ReConnectionTime); + continue; + } + } + //Tcpclient.Client.Send(Encoding.Default.GetBytes("login")); + bytelen = Tcpclient.Client.Receive(receivebyte); + // 连接断开 + if (bytelen == 0) + { + //返回状态信息 + OnTcpClientStateInfoEnterHead("与服务器断开连接... ...", SocketState.Disconnect); + // 异常退出、强制重新连接 + IsReconnection = true; + ReConectedCount = 1; + IsStartTcpthreading = false; + continue; + } + Receivestr = ASCIIEncoding.Default.GetString(receivebyte, 0, bytelen); + byte[] bytes = new byte[bytelen]; + Array.Copy(receivebyte, 0, bytes, 0, bytelen); + //OnTcpClientRecevice(bytes); + if (Receivestr.Trim() != "") + { + //接收数据 + try + { + OnTcpClientRecevice(Receivestr, bytes); + } + catch (Exception ex) + { + //返回错误信息 + OnTcpClientErrorMsgEnterHead("错误信息:" + ex.Message); + } + } + #endregion + } + //此时线程将结束,人为结束,自动判断是否重连 + IsReconnection = true; + CreateTcpClient(); + } + catch (Exception ex) + { + IsReconnection = true; + CreateTcpClient(); + //返回错误信息 + try + { + OnTcpClientErrorMsgEnterHead("错误信息:" + ex.Message); + } + catch { } + } + } + /// + /// 断开连接 + /// + public void StopConnection() + { + IsStart = false; + IsReconnection = false; + IsStartTcpthreading = false; + + Thread.Sleep(10); + if (Tcpclient != null) + { + //关闭连接 + Tcpclient.Close(); + } + if (Tcpthread != null) + { + Tcpthread.Interrupt(); + //关闭线程 + Tcpthread.Abort(); + //Tcpthread = null; + } + + OnTcpClientStateInfoEnterHead("断开连接", SocketState.Disconnect); + //标示线程已关闭可以重新连接 + } + + /// + /// 发送Socket文本消息 + /// + /// + public void SendCommand(string cmdstr) + { + try + { + //byte[] _out=Encoding.GetEncoding("GBK").GetBytes(cmdstr); + byte[] _out = Encoding.Default.GetBytes(cmdstr); + Tcpclient.Client.Send(_out); + } + catch (Exception ex) + { + //返回错误信息 + OnTcpClientErrorMsgEnterHead(ex.Message); + } + } + + public void SendFile(string filename) + { + Tcpclient.Client.BeginSendFile(filename, + new AsyncCallback(SendCallback), Tcpclient); + //Tcpclient.Client.SendFile(filename); + } + private void SendCallback(IAsyncResult result) + { + try + { + TcpClient tc = (TcpClient)result.AsyncState; + + // Complete sending the data to the remote device. + tc.Client.EndSendFile(result); + + } + catch (SocketException ex) + { + } + } + /// + /// 发送Socket消息 + /// + /// + public void SendCommand(byte[] byteMsg) + { + try + { + Tcpclient.Client.Send(byteMsg); + } + catch (Exception ex) + { + //返回错误信息 + OnTcpClientErrorMsgEnterHead("错误信息:" + ex.Message); + } + } + + // 检查一个Socket是否可连接 + public bool IsOnline() + { + return !((Tcpclient.Client.Poll(1000, SelectMode.SelectRead) && (Tcpclient.Client.Available == 0)) || !Tcpclient.Client.Connected); + } + + public void IsOnlienCheckThread() + { + while (IsReconnection) + { + if (IsOnline()) + { + IsStartTcpthreading = false; + } + } + } + + public void IsOnlienCheckStart() + { + Thread t = new Thread(new ThreadStart(IsOnlienCheckThread)); + t.Start(); + } + + #endregion + + #region 事件 + #region OnRecevice接收数据事件 + public delegate void ReceviceEventHandler(string msg, byte[] data); + [Description("接收数据事件")] + [Category("TcpClient事件")] + public event ReceviceEventHandler OnRecevice; + protected virtual void OnTcpClientRecevice(string msg, byte[] data) + { + if (OnRecevice != null) + OnRecevice(msg, data); + } + #endregion + + #region OnErrorMsg返回错误消息事件 + public delegate void ErrorMsgEventHandler(string msg); + [Description("返回错误消息事件")] + [Category("TcpClient事件")] + public event ErrorMsgEventHandler OnErrorMsg; + protected virtual void OnTcpClientErrorMsgEnterHead(string msg) + { + if (OnErrorMsg != null) + OnErrorMsg(msg); + } + #endregion + + #region OnStateInfo连接状态改变时返回连接状态事件 + public delegate void StateInfoEventHandler(string msg, SocketState state); + [Description("连接状态改变时返回连接状态事件")] + [Category("TcpClient事件")] + public event StateInfoEventHandler OnStateInfo; + protected virtual void OnTcpClientStateInfoEnterHead(string msg, SocketState state) + { + if (OnStateInfo != null) + OnStateInfo(msg, state); + } + #endregion + #endregion + } +} diff --git a/tongxin/NetWorkHelper/TCP/AxTcpServer.Designer.cs b/tongxin/NetWorkHelper/TCP/AxTcpServer.Designer.cs new file mode 100644 index 0000000..bd7fc1a --- /dev/null +++ b/tongxin/NetWorkHelper/TCP/AxTcpServer.Designer.cs @@ -0,0 +1,36 @@ +namespace SocketHelper +{ + partial class AxTcpServer + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/tongxin/NetWorkHelper/TCP/AxTcpServer.cs b/tongxin/NetWorkHelper/TCP/AxTcpServer.cs new file mode 100644 index 0000000..857ee5e --- /dev/null +++ b/tongxin/NetWorkHelper/TCP/AxTcpServer.cs @@ -0,0 +1,1042 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Runtime.Serialization.Formatters.Binary; +using System.Security; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using SocketHelper.Helper; +using SocketHelper.ICommond; +using SocketHelper.ITool; +using SocketHelper.Models; + +namespace SocketHelper +{ + public partial class AxTcpServer : Component + { + + #region 构造函数 + public AxTcpServer() + { + InitializeComponent(); + ClientSocketList = new List(); + ClientSocketList.Clear(); + } + + public AxTcpServer(IContainer container) + { + container.Add(this); + InitializeComponent(); + #region 初始化委托方法 + #endregion + ClientSocketList = new List(); + ClientSocketList.Clear(); + + } + #endregion + + #region 变量属性 + /// + /// 信号量 + /// + private Semaphore semap = new Semaphore(5, 5000); + /// + /// 监听Socket + /// + public Socket ServerSocket; + /// + /// 监听线程 + /// + public Thread StartSockst; + /// + /// 心跳检测线程 + /// + public Thread HeadCheck; + /// + /// 本机监听IP,默认是本地ip + /// + private string _serverIp = "127.0.0.1"; + [Description("本机监听IP,默认是本地IP"), Browsable(false)] + [Category("TCP服务端")] + public string ServerIp + { + get { return _serverIp; } + set { _serverIp = value; } + } + //private string _heartbeatPacket = "X"; + ///// + ///// 心跳包检测字符串 + ///// + //[Description("心跳包检测字符串")] + //[Category("TCP服务端")] + //public string HeartbeatPacket + //{ + // get { return _heartbeatPacket; } + // set { _heartbeatPacket = value; } + //} + + private bool _isheartCheck = false; + /// + /// 是否开启心跳检测 + /// + [Description("是否开启心跳检测")] + [Category("TCP服务端")] + public bool IsheartCheck + { + get { return _isheartCheck; } + set { _isheartCheck = value; } + } + + private int _checkTime = 3000; + /// + /// 心跳检测时间,单位:毫秒 + /// + [Description("心跳检测时间,单位:毫秒")] + [Category("TCP服务端")] + public int CheckTime + { + get { return _checkTime; } + set { _checkTime = value; } + } + /// + /// 监听端口 + /// + private int _serverPort = 5000; + + [Description("本机监听端口,默认是5000")] + [Category("TCP服务端")] + public int ServerPort + { + get { return _serverPort; } + set { _serverPort = value; } + } + /// + /// 是否已启动监听 + /// + public bool IsStartListening = false; + /// + /// 客户端列表 + /// + //public List ClientSocketList = new List(); + public List ClientSocketList = new List(); + + public bool XinTiao = true; + + #endregion + + #region 方法 + /// + /// 心跳检测线程 + /// + public void HeadCheckThread() + { + try + { + while (IsStartListening) + { + Thread.Sleep(CheckTime); + if (!_isheartCheck) + { + continue; + } + //ForeachCheack(); + CheackHeart(); + } + } + catch + { + } + } + + public void CheackHeart() + { + int i = 0; + while (i < ClientSocketList.Count) + { + if (ClientSocketList[i] == null) + { + ClientSocketList.RemoveAt(i); + continue; + } + if (ClientSocketList[i].ClientStyle == ClientStyle.WebSocket) + { + continue; + } + //else if ((int)(DateTime.Now - ClientSocketList[i].HeartTime).TotalSeconds > HeartTime * 4)//4次没有收到失去联系 + //{ + // RemoveClient(ClientSocketList[i]); + // continue; + //} + string sendLoginMsg = ""; + switch (ClientSocketList[i].Clienttype) + { + //case ClientType.GpsClientType: + // sendLoginMsg = "&Login&0&&"; + // break; + case ClientType.None: + sendLoginMsg = "客户端\r\n"; + break; + default: sendLoginMsg = ClientSocketList[i].Heartbeat; + break; + } + if (sendLoginMsg != "") + { + try + { + SendData(ClientSocketList[i], Encoding.Default.GetBytes(sendLoginMsg)); + //ClientSocketList[i].ClientSocket.Send(Encoding.Default.GetBytes(sendLoginMsg)); + } + catch + { + try + { + ClientSocketList[i].ClientSocket.Shutdown(SocketShutdown.Both); + ClientSocketList[i].ClientSocket.Close(); + OnTcpServerOfflineClientEnterHead(ClientSocketList[i]); + ClientSocketList.Remove(ClientSocketList[i]); + OnTcpServerReturnClientCountEnterHead(ClientSocketList.Count); + } + catch + { + } + } + } + i++; + } + } + /// + /// 心跳检测方法 + /// + public void ForeachCheack() + { + try + { + foreach (var cs in ClientSocketList) + { + if (cs.ClientStyle == ClientStyle.WebSocket) + { + continue; + } + string sendLoginMsg = ""; + switch (cs.Clienttype) + { + //case ClientType.GpsClientType: + // sendLoginMsg = "&Login&0&&"; + // break; + case ClientType.None: + sendLoginMsg = "客户端\r\n"; + break; + default: sendLoginMsg = cs.Heartbeat; + break; + } + if (sendLoginMsg != "") + { + try + { + cs.ClientSocket.Send(Encoding.Default.GetBytes(sendLoginMsg)); + } + catch + { + try + { + cs.ClientSocket.Shutdown(SocketShutdown.Both); + OnTcpServerOfflineClientEnterHead(cs); + ClientSocketList.Remove(cs); + OnTcpServerReturnClientCountEnterHead(ClientSocketList.Count); + ForeachCheack(); + } + catch + { + } + } + } + ////电子警察客户端,信号机PC控制端,轨道PC客户端,地磁PC客户端,地磁Androdi客户端,不用发送心跳包 + //if (cs.Clienttype != ClientType.PcUtcClientType + // &&cs.Clienttype != ClientType.PcLampClient + // && cs.Clienttype != ClientType.TrainPcType + // && cs.Clienttype != ClientType.PcGeomagnetic + // && cs.Clienttype != ClientType.AndroidGeomagnetic + // && cs.Clienttype != ClientType.ElectronicPoliceClient + // && cs.Clienttype!=ClientType.None) + //{ + // try + // { + // if (cs.Clienttype == ClientType.GpsClientType) + // { + // string sendLoginMsg = "&Login&0&&"; + // byte[] sendBytes = Encoding.UTF8.GetBytes(sendLoginMsg); + // cs.ClientSocket.Send(sendBytes); + // } + // else if (cs.Clienttype != ClientType.PcLampClient && cs.Clienttype != ClientType.PcUtcClientType) + // { + // cs.ClientSocket.Send(Encoding.Default.GetBytes(_heartbeatPacket)); + // } + // } + // catch + // { + // try + // { + // cs.ClientSocket.Shutdown(SocketShutdown.Both); + // OnTcpServerOfflineClientEnterHead(cs); + // ClientSocketList.Remove(cs); + // OnTcpServerReturnClientCountEnterHead(ClientSocketList.Count); + // ForeachCheack(); + // } + // catch + // { + // } + // } + //} + } + } + catch + { + } + } + private void RemoveClient(ClientModel clientModel) + { + if (clientModel == null) + return; + clientModel.ClientSocket.Close(); + OnTcpServerOfflineClientEnterHead(clientModel); + ClientSocketList.Remove(clientModel); + } + /// + /// 开始监听 + /// + public void Start() + { + try + { + //若已开始监听,则不在开启线程监听,直至关闭监听后才能再次开启监听 + if (IsStartListening) + return; + //启动线程打开监听 + StartSockst = new Thread(new ThreadStart(StartSocketListening)); + StartSockst.Start(); + + } + catch (SocketException ex) + { + OnTcpServerErrorMsgEnterHead(ex.Message); + } + } + /// + /// 关闭监听 + /// + public void Stop() + { + try + { + IsStartListening = false; + ShutdownClient(); + if (ServerSocket != null) + { + ServerSocket.Close(); + } + if (StartSockst != null) + { + StartSockst.Interrupt(); + if (StartSockst.IsAlive) + { + StartSockst.Abort(); + } + StartSockst = null; + } + if (HeadCheck != null) + { + HeadCheck.Interrupt(); + HeadCheck.Abort(); + + if (HeadCheck.IsAlive) + { + HeadCheck.Abort(); + } + HeadCheck = null; + } + OnTcpServerStateInfoEnterHead(string.Format("服务端Ip:{0},端口:{1}已停止监听", ServerIp, ServerPort), SocketState.StopListening); + //foreach (var cmodel in ClientSocketList) + //{ + // cmodel.ClientSocket.Shutdown(SocketShutdown.Both); + // //ClientSocketList.Remove(ClientSocketList[i]); + // OnTcpServerOfflineClientEnterHead(cmodel); + // //Thread.Sleep(10); + //} + //ShutdownClient(); + //for (int i = 0; i < ClientSocketList.Count; i++) + //{ + // ClientSocketList[i].ClientSocket.Shutdown(SocketShutdown.Both); + // //ClientSocketList.Remove(ClientSocketList[i]); + // OnTcpServerOfflineClientEnterHead(ClientSocketList[i]); + // Thread.Sleep(10); + //} + ClientSocketList.Clear(); + OnTcpServerReturnClientCountEnterHead(ClientSocketList.Count); + GC.Collect(); + + } + catch (SocketException ex) + { + } + } + public void ShutdownClient() + { + if (ClientSocketList.Count > 0) + { + foreach (var cmodel in ClientSocketList) + { + cmodel.ClientSocket.Shutdown(SocketShutdown.Both); + //ClientSocketList.Remove(ClientSocketList[i]); + OnTcpServerOfflineClientEnterHead(cmodel); + ClientSocketList.Remove(cmodel); + break; + //Thread.Sleep(10); + } + } + else + { + return; + } + ShutdownClient(); + } + /// + /// 开始监听 + /// + public void StartSocketListening() + { + try + { + + //获取本机IP: + //string strip = //Dns.GetHostByName(Dns.GetHostName()).AddressList[0].ToString(); + + //ServerIp = strip; + ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + //绑定监听 + ServerSocket.Bind(new IPEndPoint(IPAddress.Any, ServerPort)); + //ServerSocket.Bind(new IPEndPoint(ServerIp=="."?IPAddress.Any:IPAddress.Parse(ServerIp), ServerPort)); + ServerSocket.Listen(10000); + //标记准备就绪,开始监听 + IsStartListening = true; + OnTcpServerStateInfoEnterHead(string.Format("服务端Ip:{0},端口:{1}已启动监听", ServerIp, ServerPort), SocketState.StartListening); + //启动心跳检测线程 + if (HeadCheck == null) + { + HeadCheck = new Thread(new ThreadStart(HeadCheckThread)); + HeadCheck.Start(); + } + while (IsStartListening) + { + //阻塞挂起直至有客户端连接 + Socket clientSocket = ServerSocket.Accept(); + ClientModel clietnModel = new ClientModel(); + try + { + //Thread.Sleep(10); + //添加客户端用户 + clietnModel = new ClientModel() { ClientSocket = clientSocket }; + ClientSocketList.Add(clietnModel); + string ip = ((IPEndPoint)clientSocket.RemoteEndPoint).Address.ToString(); + string port = ((IPEndPoint)clientSocket.RemoteEndPoint).Port.ToString(); + OnTcpServerStateInfoEnterHead("<" + ip + ":" + port + ">---上线", SocketState.ClientOnline); + OnTcpServerOnlineClientEnterHead(clietnModel); + OnTcpServerReturnClientCountEnterHead(ClientSocketList.Count); + ThreadPool.QueueUserWorkItem(new WaitCallback(ClientSocketCallBack), clientSocket); + } + catch (Exception ex) + { + clientSocket.Shutdown(SocketShutdown.Both); + OnTcpServerOfflineClientEnterHead(clietnModel); + ClientSocketList.Remove(clietnModel); + OnTcpServerReturnClientCountEnterHead(ClientSocketList.Count); + OnTcpServerErrorMsgEnterHead(ex.Message); + //DelegateHelper.TcpServerErrorMsg("网络通讯异常,异常原因:" + ex.Message); + } + } + + } + catch (Exception ex) + { + //其他错误原因 + OnTcpServerErrorMsgEnterHead(ex.Message); + } + } + /// + /// 线程池回调 + /// + /// + + public void ClientSocketCallBack(Object obj) + { + + Socket temp = (Socket)obj; + + + #region 承载socket的客户端 + string ip = ((IPEndPoint)temp.RemoteEndPoint).Address.ToString(); + string port = ((IPEndPoint)temp.RemoteEndPoint).Port.ToString(); + ClientModel ctemp = ResoultSocket(ip, int.Parse(port)); + byte[] receivebyte = new byte[1024]; + #endregion + while (IsStartListening) + { + Thread.Sleep(10); + //MemoryStream mStream = new MemoryStream(); + //mStream.Position = 0; + try + { + //可自定心跳包数据 + //temp.Send(System.Text.Encoding.Default.GetBytes("&conn&")); //心跳检测socket连接 + int bytelen = temp.Receive(receivebyte); + + + if (bytelen > 0) + { + byte[] bytes = new byte[bytelen]; + Array.Copy(receivebyte, 0, bytes, 0, bytelen); + //OnTcpServerReceviceByte(temp, bytes); + //接收客户端数据 + string clientRecevieStr = ASCIIEncoding.Default.GetString(receivebyte, 0, bytelen); + //验证websocket握手协议 + if (ctemp != null && ctemp.ClientStyle != ClientStyle.WebSocket) + { + //如果客户端不存在则退出检测 + WebSocketHandShake(ctemp, clientRecevieStr, bytes); + } + if (ctemp.ClientStyle == ClientStyle.WebSocket) + { + string webstr = AxTcpServer.AnalyticData(bytes, bytes.Length); + clientRecevieStr = webstr; + bytes = Encoding.Default.GetBytes(clientRecevieStr); + } + OnTcpServerRecevice(temp, clientRecevieStr, bytes); + OnGetLogEnterHead(ctemp, LogType.ReceviedData, DataTool.HexByteArrayToString(bytes)); + + //DelegateHelper.TcpServerReceive(temp, clientRecevieStr); + } + else if (bytelen == 0) + { + //接收到数据时数据长度一定是>0,若为0则表示客户端断线 + //string ip = ((IPEndPoint)temp.RemoteEndPoint).Address.ToString(); + //string port = ((IPEndPoint)temp.RemoteEndPoint).Port.ToString(); + //ClientModel ctemp = ResoultSocket(ip, int.Parse(port)); + if (ctemp != null) + { + ctemp.ClientSocket.Shutdown(SocketShutdown.Both); + OnTcpServerOfflineClientEnterHead(ctemp); + ClientSocketList.Remove(ctemp); + OnTcpServerStateInfoEnterHead("<" + ip + ":" + port + ">---下线", + SocketState.ClientOnOff); + OnTcpServerOfflineClientEnterHead(ctemp); + OnTcpServerReturnClientCountEnterHead(ClientSocketList.Count); + } + try + { + temp.Shutdown(SocketShutdown.Both); + } + catch + { + } + break; + } + } + catch + { + try + { + if (ctemp != null) + { + ctemp.ClientSocket.Shutdown(SocketShutdown.Both); + OnTcpServerOfflineClientEnterHead(ctemp); + ClientSocketList.Remove(ctemp); + OnTcpServerStateInfoEnterHead("<" + ip + ":" + port + ">---下线", + SocketState.ClientOnOff); + OnTcpServerOfflineClientEnterHead(ctemp); + OnTcpServerReturnClientCountEnterHead(ClientSocketList.Count); + } + } + catch + { + } + break; + } + } + } + + + #region websocket模块 + + public void WebSocketHandShake(ClientModel cModel, string msg, byte[] data) + { + #region 网络WebSocket协议握手 + string webkey = AxTcpServer.GetSecKey(data, data.Length); + if (!string.IsNullOrEmpty(webkey) && cModel.ClientStyle != ClientStyle.WebSocket) + { + byte[] bufferwoshou = AxTcpServer.PackHandShakeData(webkey); + if (bufferwoshou.Length > 0) + { + cModel.ClientStyle = ClientStyle.WebSocket; + cModel.ClientSocket.Send(bufferwoshou); + } + } + else + { + //if (cModel.ClientStyle == ClientStyle.WebSocket) + //{ + // string webstr = AxTcpServer.AnalyticData(data, data.Length); + // msg = webstr; + // data = Encoding.Default.GetBytes(msg); + //} + } + + #endregion + } + + /// + /// 解析数据 + /// + /// + /// + /// + public static string AnalyticData(byte[] recBytes, int recByteLength) + { + //byte[] bytes = new byte[recByteLength]; + //Array.Copy(recBytes, 0, bytes, 0, recByteLength); + //return Encoding.Default.GetString(bytes); + + if (recByteLength < 2) { return string.Empty; } + + bool fin = (recBytes[0] & 0x80) == 0x80; // 1bit,1表示最后一帧 + if (!fin) + { + return string.Empty;// 超过一帧暂不处理 + } + + bool mask_flag = (recBytes[1] & 0x80) == 0x80; // 是否包含掩码 + if (!mask_flag) + { + return string.Empty;// 不包含掩码的暂不处理 + } + + int payload_len = recBytes[1] & 0x7F; // 数据长度 + + byte[] masks = new byte[4]; + byte[] payload_data; + + if (payload_len == 126) + { + Array.Copy(recBytes, 4, masks, 0, 4); + payload_len = (UInt16)(recBytes[2] << 8 | recBytes[3]); + payload_data = new byte[payload_len]; + Array.Copy(recBytes, 8, payload_data, 0, payload_len); + + } + else if (payload_len == 127) + { + Array.Copy(recBytes, 10, masks, 0, 4); + byte[] uInt64Bytes = new byte[8]; + for (int i = 0; i < 8; i++) + { + uInt64Bytes[i] = recBytes[9 - i]; + } + UInt64 len = BitConverter.ToUInt64(uInt64Bytes, 0); + + payload_data = new byte[len]; + for (UInt64 i = 0; i < len; i++) + { + payload_data[i] = recBytes[i + 14]; + } + } + else + { + Array.Copy(recBytes, 2, masks, 0, 4); + payload_data = new byte[payload_len]; + Array.Copy(recBytes, 6, payload_data, 0, payload_len); + + } + + for (var i = 0; i < payload_len; i++) + { + payload_data[i] = (byte)(payload_data[i] ^ masks[i % 4]); + } + + return Encoding.UTF8.GetString(payload_data); + } + + /// + /// 向客户端发送信息 + /// + /// 客户端 + /// 发送的数据包 + public void SendToWebClient(ClientModel client, string sendData) + { + if (client == null) + { + return; + } + if (!client.ClientSocket.Connected) + { + return; + } + try + { + DataFrame dr = new DataFrame(sendData); + client.ClientSocket.Send(dr.GetBytes()); + + } + catch (Exception ex) + { + //logger.Log(ex.Message); + } + } + + /// + /// 打包服务器数据 + /// + /// 数据 + /// 数据包 + private static byte[] PackData(string message) + { + byte[] contentBytes = null; + byte[] temp = Encoding.UTF8.GetBytes(message); + + if (temp.Length < 126) + { + contentBytes = new byte[temp.Length + 2]; + contentBytes[0] = 0x81; + contentBytes[1] = (byte)temp.Length; + Array.Copy(temp, 0, contentBytes, 2, temp.Length); + } + else if (temp.Length < 0xFFFF) + { + contentBytes = new byte[temp.Length + 4]; + contentBytes[0] = 0x81; + contentBytes[1] = 126; + contentBytes[2] = (byte)(temp.Length & 0xFF); + contentBytes[3] = (byte)(temp.Length >> 8 & 0xFF); + Array.Copy(temp, 0, contentBytes, 4, temp.Length); + } + else + { + // 暂不处理超长内容 + } + + return contentBytes; + } + /// + /// 打包握手信息 + /// + /// Sec-WebSocket-Accept + /// 数据包 + public static byte[] PackHandShakeData(string secKeyAccept) + { + var responseBuilder = new StringBuilder(); + responseBuilder.Append("HTTP/1.1 101 Switching Protocols" + Environment.NewLine); + responseBuilder.Append("Upgrade: websocket" + Environment.NewLine); + responseBuilder.Append("Connection: Upgrade" + Environment.NewLine); + responseBuilder.Append("Sec-WebSocket-Accept: " + secKeyAccept + Environment.NewLine + Environment.NewLine); + //如果把上一行换成下面两行,才是thewebsocketprotocol-17协议,但居然握手不成功,目前仍没弄明白! + //responseBuilder.Append("Sec-WebSocket-Accept: " + secKeyAccept + Environment.NewLine); + //responseBuilder.Append("Sec-WebSocket-Protocol: chat" + Environment.NewLine); + + return Encoding.UTF8.GetBytes(responseBuilder.ToString()); + } + + /// + /// 生成Sec-WebSocket-Accept + /// + /// 客户端握手信息 + /// Sec-WebSocket-Accept + public static string GetSecKeyAccetp(byte[] handShakeBytes, int bytesLength) + { + string handShakeText = Encoding.UTF8.GetString(handShakeBytes, 0, bytesLength); + string key = string.Empty; + Regex r = new Regex(@"Sec\-WebSocket\-Key:(.*?)\r\n"); + Match m = r.Match(handShakeText); + if (m.Groups.Count != 0) + { + key = Regex.Replace(m.Value, @"Sec\-WebSocket\-Key:(.*?)\r\n", "$1").Trim(); + } + if (key == "") + { + return handShakeText; + } + byte[] encryptionString = SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11")); //这字符串是固定的.不能改 + string str = Convert.ToBase64String(encryptionString); + return str; + } + public static string GetSecKey(byte[] handShakeBytes, int bytesLength) + { + string handShakeText = Encoding.UTF8.GetString(handShakeBytes, 0, bytesLength); + string key = string.Empty; + Regex r = new Regex(@"Sec\-WebSocket\-Key:(.*?)\r\n"); + Match m = r.Match(handShakeText); + if (m.Groups.Count != 0) + { + key = Regex.Replace(m.Value, @"Sec\-WebSocket\-Key:(.*?)\r\n", "$1").Trim(); + } + if (key == "") + { + return string.Empty; + } + byte[] encryptionString = SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11")); //这字符串是固定的.不能改 + string str = Convert.ToBase64String(encryptionString); + return str; + } + #endregion + /// + /// 发送数据 + /// + /// + /// + /// + public void SendData(string ip, int port, string strData) + { + ClientModel cModel = ResoultSocket(ip, port); + try + { + + if (cModel != null) + cModel.ClientSocket.Send((System.Text.Encoding.Default.GetBytes(strData))); + + } + catch (SocketException ex) + { + + if (cModel != null) + cModel.IsOnline = false; + //cModel.ClientSocket.Shutdown(SocketShutdown.Both); + //ClientSocketList.Remove(cModel); + //OnTcpServerOfflineClientEnterHead(cModel); + + //OnTcpServerReturnClientCountEnterHead(ClientSocketList.Count); + OnTcpServerErrorMsgEnterHead(ex.Message); + } + } + /// + /// 向指定客户端发送数据 + /// + /// 客户端 + /// 字符串数据,ANSI编码 + public void SendData(ClientModel cModel, string strData) + { + try + { + if (cModel != null) + cModel.ClientSocket.Send((System.Text.Encoding.Default.GetBytes(strData))); + + } + catch (SocketException ex) + { + if (cModel != null) + cModel.IsOnline = false; + //if (cModel != null) + // cModel.ClientSocket.Shutdown(SocketShutdown.Both); + //ClientSocketList.Remove(cModel); + //OnTcpServerOfflineClientEnterHead(cModel); + //OnTcpServerReturnClientCountEnterHead(ClientSocketList.Count); + OnTcpServerErrorMsgEnterHead(ex.Message); + } + } + /// + /// 向指定客户端发送数据 + /// + /// 客户端 + /// 字节数组数据 + public void SendData(ClientModel cModel, byte[] data) + { + try + { + if (cModel != null) + { + cModel.ClientSocket.Send(data); + OnGetLogEnterHead(cModel, LogType.SendData, DataTool.HexByteArrayToString(data)); + } + + } + catch (SocketException ex) + { + if (cModel == null) + { + ClientSocketList.Remove(cModel); + return; + } + cModel.IsOnline = false; + cModel.ClientSocket.Shutdown(SocketShutdown.Both); + OnTcpServerOfflineClientEnterHead(cModel); + OnTcpServerErrorMsgEnterHead(ex.Message); + OnGetLogEnterHead(cModel, LogType.SendData, ex.Message); + ClientSocketList.Remove(cModel); + } + } + /// + /// 根据IP,端口查找Socket客户端 + /// + /// + /// + /// + public ClientModel ResoultSocket(string ip, int port) + { + ClientModel sk = null; + try + { + foreach (ClientModel cm in ClientSocketList) + { + if (((IPEndPoint)cm.ClientSocket.RemoteEndPoint).Address.ToString().Equals(ip) + && port == ((IPEndPoint)cm.ClientSocket.RemoteEndPoint).Port) + { + sk = cm; + break; + } + } + } + catch (Exception ex) + { + OnTcpServerErrorMsgEnterHead(ex.Message); + } + return sk; + } + public ClientModel ResoultSocket(string rfidNo) + { + ClientModel sk = null; + try + { + foreach (ClientModel cm in ClientSocketList) + { + if (cm.ClientRfidNo == rfidNo) + { + sk = cm; + break; + } + } + } + catch (Exception ex) + { + OnTcpServerErrorMsgEnterHead(ex.Message); + } + return sk; + } + #endregion + + #region 事件 + #region OnRecevice接收数据事件 + [Description("接收数据事件")] + [Category("TcpServer事件")] + public event TcpServerEventHandler OnRecevice; + protected virtual void OnTcpServerRecevice(Socket temp, string msg, byte[] data) + { + if (OnRecevice != null) + { + CommonMethod.EventInvoket(() => { OnRecevice(temp, msg, data); }); + } + } + //public delegate void ReceviceByteEventHandler(Socket temp, byte[] dataBytes); + //[Description("接收原始Byte数组数据事件")] + //[Category("TcpServer事件")] + //public event ReceviceByteEventHandler OnReceviceByte; + //protected virtual void OnTcpServerReceviceByte(Socket temp, byte[] dataBytes) + //{ + // if (OnReceviceByte != null) + // { + // CommonMethod.EventInvoket(() => { OnReceviceByte(temp, dataBytes); }); + // } + //} + #endregion + + #region OnErrorMsg返回错误消息事件 + [Description("错误消息")] + [Category("TcpServer事件")] + public event TcpServerEventHandler OnErrorMsg; + protected virtual void OnTcpServerErrorMsgEnterHead(string msg) + { + if (OnErrorMsg != null) + { + CommonMethod.EventInvoket(() => { OnErrorMsg(msg); }); + } + } + #endregion + + #region OnReturnClientCount用户上线下线时更新客户端在线数量事件 + [Description("用户上线下线时更新客户端在线数量事件")] + [Category("TcpServer事件")] + public event TcpServerEventHandler OnReturnClientCount; + /// + /// 用户上线下线时更新客户端在线数量事件 + /// + /// + protected virtual void OnTcpServerReturnClientCountEnterHead(int count) + { + if (OnReturnClientCount != null) + { + CommonMethod.EventInvoket(() => { OnReturnClientCount(count); }); + } + } + #endregion + + #region OnStateInfo监听状态改变时返回监听状态事件 + [Description("监听状态改变时返回监听状态事件")] + [Category("TcpServer事件")] + public event TcpServerEventHandler OnStateInfo; + protected virtual void OnTcpServerStateInfoEnterHead(string msg, SocketState state) + { + if (OnStateInfo != null) + { + CommonMethod.EventInvoket(() => { OnStateInfo(msg, state); }); + } + } + #endregion + + #region OnAddClient新客户端上线时返回客户端事件 + [Description("新客户端上线时返回客户端事件")] + [Category("TcpServer事件")] + public event TcpServerEventHandler OnOnlineClient; + protected virtual void OnTcpServerOnlineClientEnterHead(ClientModel temp) + { + if (OnOnlineClient != null) + { + CommonMethod.EventInvoket(() => { OnOnlineClient(temp); }); + } + } + #endregion + + #region OnOfflineClient客户端下线时返回客户端事件 + [Description("客户端下线时返回客户端事件")] + [Category("TcpServer事件")] + public event TcpServerEventHandler OnOfflineClient; + protected virtual void OnTcpServerOfflineClientEnterHead(ClientModel temp) + { + if (OnOfflineClient != null) + { + CommonMethod.EventInvoket(() => + { + OnOfflineClient(temp); + }); + } + } + #endregion + + #region OnLog服务端读写操作时返回日志消息 + [Description("服务端读写操作时返回日志消息")] + [Category("TcpServer事件")] + public event TcpServerEventHandler OnGetLog; + protected virtual void OnGetLogEnterHead(ClientModel temp, LogType logType, string logMsg) + { + if (OnGetLog != null) + { + CommonMethod.EventInvoket(() => + { + OnGetLog(temp, logType, logMsg); + }); + } + } + #endregion + + #endregion + } +} diff --git a/tongxin/NetWorkHelper/TCP/AxTcpWebClient.Designer.cs b/tongxin/NetWorkHelper/TCP/AxTcpWebClient.Designer.cs new file mode 100644 index 0000000..13a271f --- /dev/null +++ b/tongxin/NetWorkHelper/TCP/AxTcpWebClient.Designer.cs @@ -0,0 +1,36 @@ +namespace SocketHelper.TCP +{ + partial class AxTcpWebClient + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/tongxin/NetWorkHelper/TCP/AxTcpWebClient.cs b/tongxin/NetWorkHelper/TCP/AxTcpWebClient.cs new file mode 100644 index 0000000..42f2b08 --- /dev/null +++ b/tongxin/NetWorkHelper/TCP/AxTcpWebClient.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Text; + +namespace SocketHelper.TCP +{ + public partial class AxTcpWebClient : Component + { + public AxTcpWebClient() + { + InitializeComponent(); + } + + public AxTcpWebClient(IContainer container) + { + container.Add(this); + + InitializeComponent(); + } + } +} diff --git a/tongxin/NetWorkHelper/TCP/IBase.cs b/tongxin/NetWorkHelper/TCP/IBase.cs new file mode 100644 index 0000000..352208d --- /dev/null +++ b/tongxin/NetWorkHelper/TCP/IBase.cs @@ -0,0 +1,24 @@ +/******************************************************************** + * * + * * Copyright (C) 2013-2018 uiskin.cn + * * 作者: BinGoo QQ:315567586 + * * 请尊重作者劳动成果,请保留以上作者信息,禁止用于商业活动。 + * * + * * 创建时间:2014-08-05 + * * 说明:ITcp组件的基类 + * * +********************************************************************/ +namespace NetWorkHelper.TCP +{ + interface IServerBase + { + /// + /// 启动 + /// + void Start(); + /// + /// 停止 + /// + void Stop(); + } +} diff --git a/tongxin/NetWorkHelper/TCP/ITcpClient.Designer.cs b/tongxin/NetWorkHelper/TCP/ITcpClient.Designer.cs new file mode 100644 index 0000000..7fb78dc --- /dev/null +++ b/tongxin/NetWorkHelper/TCP/ITcpClient.Designer.cs @@ -0,0 +1,36 @@ +namespace NetWorkHelper.TCP +{ + partial class ITcpClient + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/tongxin/NetWorkHelper/TCP/ITcpClient.cs b/tongxin/NetWorkHelper/TCP/ITcpClient.cs new file mode 100644 index 0000000..1338fba --- /dev/null +++ b/tongxin/NetWorkHelper/TCP/ITcpClient.cs @@ -0,0 +1,624 @@ +using NetWorkHelper.ICommond; +using NetWorkHelper.IModels; +using System; +using System.ComponentModel; +using System.Net; +using System.Net.Sockets; +using System.Threading; + +namespace NetWorkHelper.TCP +{ + public partial class ITcpClient : Component + { + + + //#region 读取ini文件 + //[DllImport("kernel32")] + //private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); + + + ///// + ///// 读出INI文件 + ///// + ///// 项目名称(如 [TypeName] ) + ///// 键 + //public string IniReadValue(string Section, string Key) + //{ + // StringBuilder temp = new StringBuilder(500); + // int i = GetPrivateProfileString(Section, Key, "", temp, 500, System.AppDomain.CurrentDomain.BaseDirectory + "MESConfig.ini"); + + // return temp.ToString(); + //} + + static int connecttimeout = 4000; + static int receivetimeout = 2000; + //static int sleeptime; + static int timeoutsend = 3; + //public void ReadINI() + //{ + // //string dialog; + // //dialog = System.AppDomain.CurrentDomain.BaseDirectory + "MESConfig.ini"; + // //ControlINI mesconfig = new ControlINI(dialog); + + // //连接设置 + // connecttimeout = Convert.ToInt32(IniReadValue("MESConfig", "connectTimeout")); ; + // receivetimeout = Convert.ToInt32(IniReadValue("MESConfig", "receiveTimeout")); + // _reConnectTime = Convert.ToInt32(IniReadValue("MESConfig", "sleepTime")); + + // timeoutsend = Convert.ToInt32(IniReadValue("MESConfig", "timeoutSend"))+1; + + + + //} + //#endregion + + + + + #region 构造函数 + public ITcpClient() + { + //ReadINI(); + InitializeComponent(); + } + + public ITcpClient(IContainer container) + { + container.Add(this); + + InitializeComponent(); + } + #endregion + + #region 变量 + + public IClient Client = null; + private Thread _startThread = null; + private int _reConnectCount = 0;//重连计数 + private int _maxConnectCount => timeoutsend; + private ConncetType _conncetType = ConncetType.Conncet; + private bool _isReconnect = true;//是否开启断开重连 + private int _reConnectTime;//重连间隔时间 + private bool _isStart = false;// 是否启动 + private System.Timers.Timer _timer = new System.Timers.Timer(); // 连接后两秒未成功重连 + + //bool timeoutreconnected=true;//连接超时的重连 + //bool datareconnected = true;//接收不到心跳包的重连 + + #endregion + + #region 属性 + /// + /// 服务端IP + /// + private string _serverip = "127.0.0.1"; + [Description("服务端IP")] + [Category("TCP客户端")] + public string ServerIp + { + set { _serverip = value; } + get { return _serverip; } + } + /// + /// 服务端监听端口 + /// + private int _serverport = 5000; + [Description("服务端监听端口")] + [Category("TCP客户端")] + public int ServerPort + { + set { _serverport = value; } + get { return _serverport; } + } + + /// + /// 网络端点 + /// + private IPEndPoint _ipEndPoint = null; + [Description("网络端点,IP+PORT")] + [Category("TCP客户端")] + internal IPEndPoint IpEndPoint + { + get + { + try + { + IPAddress ipAddress = null; + ipAddress = string.IsNullOrEmpty(ServerIp) + ? IPAddress.Any + : IPAddress.Parse(CommonMethod.HostnameToIp(ServerIp)); + + _ipEndPoint = new IPEndPoint(ipAddress, ServerPort); + } + catch + { + } + return _ipEndPoint; + } + } + + /// + /// 是否重连 + /// + [Description("是否重连")] + [Category("TCP客户端")] + public bool IsReconnection + { + set { _isReconnect = value; } + get { return _isReconnect; } + } + + /// + /// 设置断开重连时间间隔单位(毫秒)(默认3000毫秒) + /// + [Description("设置断开重连时间间隔单位(毫秒)(默认3000毫秒)")] + [Category("TCP客户端")] + public int ReConnectionTime + { + get { return _reConnectTime; } + set { _reConnectTime = value; } + } + [Description("设置断开重连时间间隔单位(毫秒)(默认3000毫秒)")] + [Category("TCP客户端"), Browsable(false)] + public bool IsStart + { + get { return _isStart; } + set { _isStart = value; } + } + #endregion + + #region 启动停止方法 + + private readonly object _threadLock = new object(); + public void StartConnect() + { + if (IsStart) + return; + lock (_threadLock) + { + if (_startThread == null || !_startThread.IsAlive) + { + _startThread = new Thread(StartThread); + _startThread.IsBackground = true; + _startThread.Start(); + } + } + } + + /// + /// 启动客户端基础的一个线程 + /// + private void StartThread() + { + if (_conncetType == ConncetType.ReConncet && IsReconnection && !IsStart) //如果是重连的延迟N秒 + { + Thread.Sleep(ReConnectionTime); + + if (IsReconnection) + { + TcpClientStateInfo(string.Format("正在重连..."), SocketState.Reconnection); + } + try + { + + _timer.Interval = connecttimeout; + _timer.Elapsed += Timer_Elapsed; + _timer.AutoReset = false; + _timer.Start(); + + + Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + socket.ReceiveTimeout = receivetimeout; + socket.SendTimeout = 1000; + socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, true); + socket.BeginConnect(IpEndPoint, new AsyncCallback(AcceptCallback), socket); + //timeoutreconnected = true;//连接超时的重连 + //datareconnected = true;//接收不到心跳包的重连 + + } + catch (Exception ex) + { + _timer.Stop(); + TcpClientErrorMsg(string.Format("连接服务器失败,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + if (IsReconnection) + { + Reconnect(); + } + } + } + else if (!IsStart) + { + if (IsReconnection) + { + TcpClientStateInfo("正在连接服务器... ...", SocketState.Connecting); + try + { + + _timer.Interval = connecttimeout; + _timer.Elapsed += Timer_Elapsed; + _timer.AutoReset = false; + _timer.Start(); + + + Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + socket.ReceiveTimeout = receivetimeout; + socket.SendTimeout = 1000; + socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, true); + socket.BeginConnect(IpEndPoint, new AsyncCallback(AcceptCallback), socket); + //timeoutreconnected = true;//连接超时的重连 + //datareconnected = true;//接收不到心跳包的重连 + + } + catch (Exception ex) + { + _timer.Stop(); + TcpClientErrorMsg(string.Format("连接服务器失败,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + if (IsReconnection) + { + Reconnect(); + } + } + } + } + + + } + + + //连接超时则重新连接 + private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + if (IsReconnection) + { + //datareconnected = false;//接收不到心跳包的重连 + TcpClientErrorMsg(string.Format("连接服务器失败")); + + //if (Client != null) + //{ + // ShutdownClient(Client); + // Client.WorkSocket.Close(); + //} + Reconnect(); + + //reconnected = false; + } + } + + + + /// + /// 当连接服务器之后的回调函数 + /// + /// TcpClient + private void AcceptCallback(IAsyncResult ar) + { + _timer.Stop(); + + try + { + IsStart = true; + + Socket socket = (Socket)ar.AsyncState; + socket.EndConnect(ar); + + Client = new IClient(socket); + Client.WorkSocket.BeginReceive(Client.BufferInfo.ReceivedBuffer, 0, Client.BufferInfo.ReceivedBuffer.Length, 0, new AsyncCallback(ReadCallback), Client); + + _conncetType = ConncetType.Conncet; + TcpClientStateInfo(string.Format("已连接服务器"), SocketState.Connected); + _reConnectCount = 0; + //timeoutreconnected = false;//连接超时的重连 + //datareconnected = false;//接收不到心跳包的重连 + + + } + catch (SocketException ex) + { + IsStart = false; + string msg = ex.Message; + if (ex.NativeErrorCode.Equals(10060)) + { + //无法连接目标主机 + msg = string.Format("{0} 无法连接: error code {1}!", "", ex.NativeErrorCode); + } + else if (ex.NativeErrorCode.Equals(10061)) + { + msg = string.Format("{0} 主动拒绝正在重连: error code {1}!", "", ex.NativeErrorCode); + } + else if (ex.NativeErrorCode.Equals(10053)) + { + //读写时主机断开 + msg = string.Format("{0} 主动断开连接: error code {1}! ", "", ex.NativeErrorCode); + } + else + { + //其他错误 + msg = string.Format("Disconnected: error code {0}!", ex.NativeErrorCode); + } + + if (IsReconnection) + { + TcpClientErrorMsg(string.Format("连接服务器失败,错误原因:{0}", msg)); + + Reconnect(); + } + } + catch (Exception ex) + { + } + } + #endregion + + #region 登录篇 + /// + /// 重连模块 + /// + private void Reconnect() + { + if (Client != null) + { + ShutdownClient(Client); + Client?.WorkSocket?.Close(); + Client = null; + } + + if (_conncetType == ConncetType.Conncet) + { + TcpClientStateInfo(string.Format("已断开服务器{0}", IsReconnection ? ",准备重连" : ""), SocketState.Disconnect); + } + + if (!IsReconnection) + { + return; + } + + _reConnectCount++;//每重连一次重连的次数加1 + + + if (_conncetType == ConncetType.Conncet) + { + _conncetType = ConncetType.ReConncet; + + //CommonMethod.EventInvoket(() => { ReconnectionStart(); }); + } + + _isStart = false; + + if (_startThread != null) + { + try + { + // 检查线程状态,避免重复启动 + if (_startThread.IsAlive) + { + // 给线程一个机会正常结束 + if (!_startThread.Join(500)) // 等待500毫秒 + { + try + { + _startThread.Abort(); // 强制终止 + } + catch (ThreadStateException) + { + // 线程可能已经终止,忽略此异常 + } + } + } + } + catch (Exception ex) + { + // 记录异常但不阻止重连 + Console.WriteLine($"清理线程时异常: {ex.Message}"); + } + finally + { + _startThread = null; // 确保设置为null + } + } + + if (_reConnectCount < _maxConnectCount && IsReconnection) + { + StartConnect(); + } + else + { + _timer.Stop(); + StopConnect(); + this.IsReconnection = false; + _reConnectCount = 0; + TcpClientStateInfo(string.Format("超过最大重连数,已断开服务器连接"), SocketState.Disconnect); + } + + } + #endregion + + #region 发送数据 + public void SendData(byte[] data) + { + try + { + if (data == null || data.Length == 0) + { + return; + } + + if (Client != null && Client.WorkSocket != null && Client.WorkSocket.Connected) + { + //异步发送数据 + //cModel.ClientSocket.Send(data); + Client.WorkSocket.BeginSend(data, 0, data.Length, 0, new AsyncCallback(SendCallback), Client); + //timeoutreconnected = false;//连接超时的重连 + //datareconnected = true;//接收不到心跳包的重连 + } + } + catch (SocketException ex) + { + TcpClientErrorMsg(string.Format("向服务端发送数据时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + } + } + + public bool IsConnected + { + get + { + try + { + return Client != null && + Client.WorkSocket != null && + Client.WorkSocket.Connected; + } + catch + { + return false; + } + } + } + + /// + /// 发送完数据之后的回调函数 + /// + /// Clicent + private void SendCallback(IAsyncResult ar) + { + IClient iClient = (IClient)ar.AsyncState; + if (iClient == null) + return; + Socket handler = iClient.WorkSocket; + try + { + int bytesSent = handler.EndSend(ar); + } + catch (Exception ex) + { + TcpClientErrorMsg(string.Format("发送数据后回调时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + } + } + #endregion + + #region 接收数据 + /// + /// 当接收到数据之后的回调函数 + /// + /// + private void ReadCallback(IAsyncResult ar) + { + if (Client == null || !_isStart) + return; + Socket handler = Client.WorkSocket; + try + { + int bytesRead = handler.EndReceive(ar); + if (bytesRead > 0 && bytesRead <= Client.BufferInfo.ReceivedBuffer.Length) + { + byte[] bytes = new byte[bytesRead]; + Array.Copy(Client.BufferInfo.ReceivedBuffer, 0, bytes, 0, bytesRead); + TcpClientRecevice(bytes); + handler.BeginReceive(Client.BufferInfo.ReceivedBuffer, 0, Client.BufferInfo.ReceivedBuffer.Length, + 0, new AsyncCallback(ReadCallback), Client); + + } + else + { + if (IsReconnection) + { + Reconnect(); + } + } + } + catch (Exception ex) + { + //if (datareconnected) + //{ + // timeoutreconnected = false;//连接超时的重连 + ////IsStart = false; + StopConnect(); + + TcpClientErrorMsg(string.Format("接收数据失败,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + + + Reconnect(); + + //} + + } + } + #endregion + + #region 断开篇 + /// + /// 关闭相连的scoket以及关联的StateObject,释放所有的资源 + /// + public void StopConnect() + { + IsStart = false; + if (Client != null) + { + var workSocket = Client.WorkSocket; // 提前保存引用 + ShutdownClient(Client); + workSocket?.Close(); + //if (Client.WorkSocket != null) + //{ + // Client.WorkSocket.Close(); + // //Client.WorkSocket?.Dispose(); + //} + + } + _conncetType = ConncetType.Conncet; + _reConnectCount = 0;//前面三个初始化 + } + public void ShutdownClient(IClient iClient) + { + try + { + iClient.WorkSocket.Shutdown(SocketShutdown.Both); + } + catch + { + } + } + #endregion + + #region 事件 + #region OnRecevice接收数据事件 + [Description("接收数据事件")] + [Category("TcpClient事件")] + public event EventHandler OnRecevice; + protected virtual void TcpClientRecevice(byte[] data) + { + if (OnRecevice != null) + CommonMethod.EventInvoket(() => { OnRecevice(this, new TcpClientReceviceEventArgs(data)); }); + + } + #endregion + + #region OnErrorMsg返回错误消息事件 + [Description("返回错误消息事件")] + [Category("TcpClient事件")] + public event EventHandler OnErrorMsg; + protected virtual void TcpClientErrorMsg(string msg) + { + if (OnErrorMsg != null) + CommonMethod.EventInvoket(() => { OnErrorMsg(this, new TcpClientErrorEventArgs(msg)); }); + } + #endregion + + #region OnStateInfo连接状态改变时返回连接状态事件 + [Description("连接状态改变时返回连接状态事件")] + [Category("TcpClient事件")] + public event EventHandler OnStateInfo; + protected virtual void TcpClientStateInfo(string msg, SocketState state) + { + if (OnStateInfo != null) + CommonMethod.EventInvoket(() => { OnStateInfo(this, new TcpClientStateEventArgs(msg, state)); }); + } + #endregion + #endregion + } + + public enum ConncetType + { + Conncet, + ReConncet, + DisConncet + } +} diff --git a/tongxin/NetWorkHelper/TCP/ITcpServer.Designer.cs b/tongxin/NetWorkHelper/TCP/ITcpServer.Designer.cs new file mode 100644 index 0000000..1732f01 --- /dev/null +++ b/tongxin/NetWorkHelper/TCP/ITcpServer.Designer.cs @@ -0,0 +1,36 @@ +namespace NetWorkHelper.TCP +{ + partial class ITcpServer + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/tongxin/NetWorkHelper/TCP/ITcpServer.cs b/tongxin/NetWorkHelper/TCP/ITcpServer.cs new file mode 100644 index 0000000..52baf5c --- /dev/null +++ b/tongxin/NetWorkHelper/TCP/ITcpServer.cs @@ -0,0 +1,1217 @@ +/******************************************************************** + * * + * * Copyright (C) 2013-2018 uiskin.cn + * * 作者: BinGoo QQ:315567586 + * * 请尊重作者劳动成果,请保留以上作者信息,禁止用于商业活动。 + * * + * * 创建时间:2014-08-05 + * * 说明:ITcpServer服务端组件 + * * +********************************************************************/ + +using NetWorkHelper.Helper; +using NetWorkHelper.ICommond; +using NetWorkHelper.IModels; +using NetWorkHelper.ITool; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Net; +using System.Net.Sockets; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; + +namespace NetWorkHelper.TCP +{ + public partial class ITcpServer : Component, IServerBase + { + #region 变量 + + // 监听Socket + private Socket _serverSocket = null; + + // 心跳检测线程 + private Thread _tHeartCheck = null; + + //监听IP,为空时监听本机所有IP + private string _serverIp = ""; + + //监听端口 + private int _serverPort = 5000; + + //网络端点 + private IPEndPoint _ipEndPoint = null; + + //是否开启心跳检测 + private bool _isHeartCheck = true; + + //心跳检测间隔 + private int _checkTime = 3000; + + //是否已启动监听 + private bool _isStartListening = false; + + //客户端列表 + private List _clientList; + + #endregion 变量 + + #region 属性 + + /// + /// 无IP地址时默认监听本机所有IP + /// + [Description("无IP地址时默认监听本机所有IP")] + [Category("TCP服务端")] + public string ServerIp + { + get { return _serverIp; } + set { _serverIp = value; } + } + + /// + /// 本机监听端口 + /// + [Description("本机监听端口")] + [Category("TCP服务端")] + public int ServerPort + { + get { return _serverPort; } + set { _serverPort = value; } + } + + /// + /// 网络端点,IP+PORT + /// + [Description("网络端点,IP+PORT")] + [Category("TCP服务端"), Browsable(false)] + internal IPEndPoint IpEndPoint + { + get + { + try + { + IPAddress ipAddress = null; + if (ServerIp == "") + ipAddress = IPAddress.Any; + else + ipAddress = IPAddress.Parse(CommonMethod.HostnameToIp(ServerIp)); + _ipEndPoint = new IPEndPoint(ipAddress, ServerPort); + } + catch + { + } + return _ipEndPoint; + } + } + + /// + /// 是否开启心跳检测 + /// + [Description("是否开启心跳检测")] + [Category("TCP服务端")] + public bool IsHeartCheck + { + get { return _isHeartCheck; } + set { _isHeartCheck = value; } + } + + /// + /// 心跳检测时间,单位:毫秒 + /// + [Description("心跳检测时间,单位:毫秒")] + [Category("TCP服务端")] + public int CheckTime + { + get { return _checkTime; } + set { _checkTime = value; } + } + + /// + /// 是否已启动监听 + /// + [Description("是否已启动监听")] + [Category("TCP服务端"), Browsable(false)] + public bool IsStartListening + { + get { return _isStartListening; } + private set { _isStartListening = value; } + } + + /// + /// 客户端列表 + /// + [Description("客户端列表")] + [Category("TCP服务端"), Browsable(false)] + public List ClientSocketList + { + get + { + if (_clientList == null) + { + _clientList = new List(); + } + return _clientList; + } + } + + #endregion 属性 + + #region 构造函数 + + public ITcpServer() + { + InitializeComponent(); + } + + public ITcpServer(IContainer container) + { + container.Add(this); + + InitializeComponent(); + } + + #endregion 构造函数 + + #region 接口实现方法 + + /// + /// 开启监听 + /// + public void Start() + { + if (IsStartListening) + return; + StartListen(); + } + + /// + /// 启动服务器,没出现异常,则启动成功 + /// + private void StartListen() + { + IsStartListening = true; + try + { + _serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + _serverSocket.Bind(IpEndPoint); + _serverSocket.Listen(10000); + + TcpServerStateInfo(null, string.Format("服务端Ip:{0},端口:{1}已启动监听", ServerIp, ServerPort), SocketState.StartListening); + TcpServerGetLog(null, LogType.Server, string.Format("服务端Ip:{0},端口:{1}已启动监听", string.IsNullOrEmpty(ServerIp) ? "本机所有IP" : ServerIp, ServerPort)); + _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), _serverSocket); + + if (_tHeartCheck == null) + { + _tHeartCheck = new Thread(new ThreadStart(HeartCheckThread)); + _tHeartCheck.IsBackground = true; + _tHeartCheck.Start(); + } + + IsStartListening = true; + } + catch (Exception ex) + { + IsStartListening = false; + TcpServerStateInfo(null, string.Format("服务端Ip:{0},端口:{1}启动监听失败", ServerIp, ServerPort), + SocketState.StartListeningError); + TcpServerGetLog(null, LogType.Server, ex.Message); + } + } + + /// + /// 停止监听,释放所有资源 + /// + public void Stop() + { + try + { + IsStartListening = false; + if (_serverSocket != null) + { + _serverSocket.Close(); + } + _serverSocket = null; + + if (_tHeartCheck != null) + { + _tHeartCheck.Interrupt(); + _tHeartCheck.Abort(); + //_tHeartCheck.Join(); + } + _tHeartCheck = null; + CloseClient(); + ClientSocketList.Clear(); + TcpServerReturnClientCount(ClientSocketList.Count); + TcpServerStateInfo(null, string.Format("服务端已停止监听"), SocketState.StopListening); + TcpServerGetLog(null, LogType.Server, "服务端已停止监听"); + } + catch (Exception ex) + { + TcpServerErrorMsg(string.Format("停止监听时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + } + } + + #endregion 接口实现方法 + + #region 心跳检测方法模块 + + /// + /// 心跳检测 + /// + private void HeartCheckThread() + { + try + { + while (IsStartListening) + { + try + { + Thread.Sleep(CheckTime); + + if (!IsHeartCheck) + { + //如果没有开启心跳检测或者没有启动监听则跳过检测 + continue; + } + + int i = 0; + while (i < ClientSocketList.Count) + { + try + { + Thread.Sleep(1); + if (!IsStartListening) + { + break; + } + byte[] sendHeartbeatData = new byte[0]; + if (i > ClientSocketList.Count - 1) + { + break; + } + switch (ClientSocketList[i].ClientInfo.HeartCheckType) + { + case HeartCheckType.EncodingString: + if (!string.IsNullOrEmpty(ClientSocketList[i].ClientInfo.Heartbeat)) + { + sendHeartbeatData = + Encoding.Default.GetBytes(ClientSocketList[i].ClientInfo.Heartbeat); + } + break; + + case HeartCheckType.HexString: + sendHeartbeatData = + ConvertStringManager.StringToHexByteArray( + ClientSocketList[i].ClientInfo.Heartbeat); + break; + + case HeartCheckType.Byte: + sendHeartbeatData = ClientSocketList[i].ClientInfo.HeartbeatByte; + break; + + default: + break; + } + + if (sendHeartbeatData.Length > 0) + { + if (i > ClientSocketList.Count - 1) + { + break; + } + if (ClientSocketList[i].ClientStyle == ClientStyle.WebSocket) + { + SendToWebClient(ClientSocketList[i], + Encoding.Default.GetString(sendHeartbeatData)); + } + else + { + SendData(ClientSocketList[i], sendHeartbeatData); + } + } + + i++; + } + catch (Exception ex) + { + TcpServerErrorMsg(string.Format("心跳检测时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + try + { + if (ClientSocketList[i].WorkSocket != null) + { + TcpServerOfflineClient(ClientSocketList[i]); + ClientSocketList.Remove(ClientSocketList[i]); + TcpServerReturnClientCount(ClientSocketList.Count); + } + } + catch (Exception e) + { + TcpServerErrorMsg(string.Format("处理心跳检测异常时发生错误,错误原因:{0},行号{1}", ex.Message, e.StackTrace)); + } + } + } + } + catch (Exception ex) + { + TcpServerErrorMsg(string.Format("心跳检测异常处理时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + } + } + } + catch + { + } + } + + /// + /// 手动检测 + /// + public void HandCheck() + { + int i = 0; + while (i < ClientSocketList.Count) + { + Thread.Sleep(1); + + if (ClientSocketList[i] == null) + { + TcpServerOfflineClient(ClientSocketList[i]); + ClientSocketList.RemoveAt(i); + TcpServerReturnClientCount(ClientSocketList.Count); + continue; + } + string sendLoginMsg = string.IsNullOrEmpty(ClientSocketList[i].ClientInfo.Heartbeat) ? "客户端\r\n" : ClientSocketList[i].ClientInfo.Heartbeat; + try + { + SendData(ClientSocketList[i], Encoding.Default.GetBytes(sendLoginMsg)); + i++; + } + catch (Exception ex) + { + TcpServerErrorMsg(string.Format("手动检测时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + try + { + if (ClientSocketList[i].WorkSocket != null) + { + TcpServerOfflineClient(ClientSocketList[i]); + ClientSocketList.Remove(ClientSocketList[i]); + TcpServerReturnClientCount(ClientSocketList.Count); + } + continue; + } + catch (Exception e) + { + TcpServerErrorMsg(string.Format("手动检测异常处理时发生错误,错误原因:{0}", e.Message)); + } + } + } + } + + #endregion 心跳检测方法模块 + + #region Socket相关方法 + + /// + /// 异步监听当有客户端连接后的回调函数 + /// + /// + private void AcceptCallback(IAsyncResult iar) + { + IClient iClient = null; + try + { + if (_serverSocket != null) + _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), _serverSocket); + } + catch (Exception ex) + { + TcpServerErrorMsg(string.Format("监听客户端连接状态时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + Stop(); + } + try + { + if (_serverSocket != null) + { + Socket workSocket = _serverSocket.EndAccept(iar); + iClient = new IClient(workSocket); + ClientSocketList.Add(iClient); + TcpServerStateInfo(iClient, string.Format("<{0}:{1}>---上线", iClient.Ip, iClient.Port), SocketState.ClientOnline); + + TcpServerGetLog(iClient, LogType.Client, "客户端上线"); //记录 + TcpServerOnlineClient(iClient); + TcpServerReturnClientCount(ClientSocketList.Count); + iClient.WorkSocket.BeginReceive(iClient.BufferInfo.ReceivedBuffer, 0, iClient.BufferInfo.ReceivedBuffer.Length, 0, new AsyncCallback(ClientReadCallback), iClient); + } + } + catch (Exception ex) + { + ShutdownClient(iClient); + TcpServerOfflineClient(iClient); + ClientSocketList.Remove(iClient); + TcpServerReturnClientCount(ClientSocketList.Count); + TcpServerErrorMsg(string.Format("监听客户端时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + } + } + + /// + /// 异步接收数据 + /// + /// + private void ClientReadCallback(IAsyncResult ar) + { + IClient iClient = (IClient)ar.AsyncState; + try + { + int bytesRead = iClient.WorkSocket.EndReceive(ar); + if (bytesRead > 0) + { + //byte[] haveDate = ReceiveDateOne.DateOneManage(iClient, bytesRead);//接收完成之后对数组进行重置 + byte[] bytes = new byte[bytesRead]; + Array.Copy(iClient.BufferInfo.ReceivedBuffer, 0, bytes, 0, bytesRead); + string clientRecevieStr = ""; + + #region WebSocket验证 + + //验证websocket握手协议 + if (iClient != null && iClient.ClientStyle != ClientStyle.WebSocket) + { + clientRecevieStr = ASCIIEncoding.Default.GetString(iClient.BufferInfo.ReceivedBuffer, 0, bytesRead); + //如果客户端不存在则退出检测 + WebSocketHandShake(iClient, clientRecevieStr, bytes); + } + if (iClient.ClientStyle == ClientStyle.WebSocket) + { + string webstr = AnalyticData(bytes, bytes.Length); + clientRecevieStr = webstr; + bytes = Encoding.Default.GetBytes(clientRecevieStr); + } + + #endregion WebSocket验证 + + TcpServerRecevice(iClient, bytes); + TcpServerGetLog(iClient, LogType.ReceviedData, ConvertStringManager.HexByteArrayToString(bytes)); + iClient.WorkSocket.BeginReceive(iClient.BufferInfo.ReceivedBuffer, 0, + iClient.BufferInfo.ReceivedBuffer.Length, 0, + new AsyncCallback(ClientReadCallback), iClient); + } + else if (bytesRead == 0) + { + //接收数据长度为0时,标示客户单下线 + if (iClient != null) + { + ShutdownClient(iClient); + TcpServerStateInfo(iClient, string.Format("<{0}:{1}>---下线", iClient.Ip, iClient.Port), SocketState.ClientOnOff); + RemoveClient(iClient, "客户端下线"); + TcpServerOfflineClient(iClient); + ClientSocketList.Remove(iClient); + TcpServerReturnClientCount(ClientSocketList.Count); + } + } + } + catch (Exception ex) + { + TcpServerErrorMsg(string.Format("接收客户端数据时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + int i = ex.Message.IndexOf("远程主机强迫关闭了一个现有的连接"); + if (iClient != null && i != -1) + { + RemoveClient(iClient, ex.Message); + } + iClient = null; + } + } + + #endregion Socket相关方法 + + #region websocket模块 + + public void WebSocketHandShake(IClient iClient, string msg, byte[] data) + { + #region 网络WebSocket协议握手 + + string webkey = GetSecKey(data, data.Length); + if (!string.IsNullOrEmpty(webkey) && iClient.ClientStyle != ClientStyle.WebSocket) + { + byte[] bufferwoshou = PackHandShakeData(webkey); + if (bufferwoshou.Length > 0) + { + iClient.ClientStyle = ClientStyle.WebSocket; + iClient.WorkSocket.Send(bufferwoshou); + } + } + else + { + } + + #endregion 网络WebSocket协议握手 + } + + /// + /// 解析数据 + /// + /// + /// + /// + public string AnalyticData(byte[] recBytes, int recByteLength) + { + //byte[] bytes = new byte[recByteLength]; + //Array.Copy(recBytes, 0, bytes, 0, recByteLength); + //return Encoding.Default.GetString(bytes); + + if (recByteLength < 2) { return string.Empty; } + + bool fin = (recBytes[0] & 0x80) == 0x80; // 1bit,1表示最后一帧 + if (!fin) + { + return string.Empty;// 超过一帧暂不处理 + } + + bool mask_flag = (recBytes[1] & 0x80) == 0x80; // 是否包含掩码 + if (!mask_flag) + { + return string.Empty;// 不包含掩码的暂不处理 + } + + int payload_len = recBytes[1] & 0x7F; // 数据长度 + + byte[] masks = new byte[4]; + byte[] payload_data; + + if (payload_len == 126) + { + Array.Copy(recBytes, 4, masks, 0, 4); + payload_len = (UInt16)(recBytes[2] << 8 | recBytes[3]); + payload_data = new byte[payload_len]; + Array.Copy(recBytes, 8, payload_data, 0, payload_len); + } + else if (payload_len == 127) + { + Array.Copy(recBytes, 10, masks, 0, 4); + byte[] uInt64Bytes = new byte[8]; + for (int i = 0; i < 8; i++) + { + uInt64Bytes[i] = recBytes[9 - i]; + } + UInt64 len = BitConverter.ToUInt64(uInt64Bytes, 0); + + payload_data = new byte[len]; + for (UInt64 i = 0; i < len; i++) + { + payload_data[i] = recBytes[i + 14]; + } + } + else + { + Array.Copy(recBytes, 2, masks, 0, 4); + payload_data = new byte[payload_len]; + Array.Copy(recBytes, 6, payload_data, 0, payload_len); + } + + for (var i = 0; i < payload_len; i++) + { + payload_data[i] = (byte)(payload_data[i] ^ masks[i % 4]); + } + + return Encoding.UTF8.GetString(payload_data); + } + + /// + /// 向客户端发送信息 + /// + /// 客户端 + /// 发送的数据包 + public void SendToWebClient(IClient iClient, string sendData) + { + if (iClient == null) + { + return; + } + if (!iClient.WorkSocket.Connected) + { + return; + } + try + { + DataFrame dr = new DataFrame(sendData); + iClient.WorkSocket.Send(dr.GetBytes()); + } + catch (Exception ex) + { + //logger.Log(ex.Message); + } + } + + /// + /// 打包服务器数据 + /// + /// 数据 + /// 数据包 + private byte[] PackData(string message) + { + byte[] contentBytes = null; + byte[] temp = Encoding.UTF8.GetBytes(message); + + if (temp.Length < 126) + { + contentBytes = new byte[temp.Length + 2]; + contentBytes[0] = 0x81; + contentBytes[1] = (byte)temp.Length; + Array.Copy(temp, 0, contentBytes, 2, temp.Length); + } + else if (temp.Length < 0xFFFF) + { + contentBytes = new byte[temp.Length + 4]; + contentBytes[0] = 0x81; + contentBytes[1] = 126; + contentBytes[2] = (byte)(temp.Length & 0xFF); + contentBytes[3] = (byte)(temp.Length >> 8 & 0xFF); + Array.Copy(temp, 0, contentBytes, 4, temp.Length); + } + else + { + // 暂不处理超长内容 + } + + return contentBytes; + } + + /// + /// 打包握手信息 + /// + /// Sec-WebSocket-Accept + /// 数据包 + public byte[] PackHandShakeData(string secKeyAccept) + { + var responseBuilder = new StringBuilder(); + responseBuilder.Append("HTTP/1.1 101 Switching Protocols" + Environment.NewLine); + responseBuilder.Append("Upgrade: websocket" + Environment.NewLine); + responseBuilder.Append("Connection: Upgrade" + Environment.NewLine); + responseBuilder.Append("Sec-WebSocket-Accept: " + secKeyAccept + Environment.NewLine + Environment.NewLine); + //如果把上一行换成下面两行,才是thewebsocketprotocol-17协议,但居然握手不成功,目前仍没弄明白! + //responseBuilder.Append("Sec-WebSocket-Accept: " + secKeyAccept + Environment.NewLine); + //responseBuilder.Append("Sec-WebSocket-Protocol: chat" + Environment.NewLine); + + return Encoding.UTF8.GetBytes(responseBuilder.ToString()); + } + + /// + /// 生成Sec-WebSocket-Accept + /// + /// 客户端握手信息 + /// Sec-WebSocket-Accept + public string GetSecKeyAccetp(byte[] handShakeBytes, int bytesLength) + { + string handShakeText = Encoding.UTF8.GetString(handShakeBytes, 0, bytesLength); + string key = string.Empty; + Regex r = new Regex(@"Sec\-WebSocket\-Key:(.*?)\r\n"); + Match m = r.Match(handShakeText); + + if (m.Groups.Count != 0) + { + key = Regex.Replace(m.Value, @"Sec\-WebSocket\-Key:(.*?)\r\n", "$1").Trim(); + } + + if (key == "") + { + return handShakeText; + } + + byte[] encryptionString = SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11")); //这字符串是固定的.不能改 + string str = Convert.ToBase64String(encryptionString); + + return str; + } + + /// + /// + /// + /// + /// + /// + public string GetSecKey(byte[] handShakeBytes, int bytesLength) + { + string handShakeText = Encoding.UTF8.GetString(handShakeBytes, 0, bytesLength); + string key = string.Empty; + Regex r = new Regex(@"Sec\-WebSocket\-Key:(.*?)\r\n"); + Match m = r.Match(handShakeText); + + if (m.Groups.Count != 0) + { + key = Regex.Replace(m.Value, @"Sec\-WebSocket\-Key:(.*?)\r\n", "$1").Trim(); + } + + if (key == "") + { + return string.Empty; + } + + byte[] encryptionString = SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11")); //这字符串是固定的.不能改 + string str = Convert.ToBase64String(encryptionString); + return str; + } + + #endregion websocket模块 + + #region 组件方法 + + internal void CloseClient() + { + foreach (IClient iClient in ClientSocketList) + { + RemoveClient(iClient, "服务器主动关闭客户端"); + } + } + + /// + /// 关闭相连的scoket以及关联的TcpState,释放所有的资源 + /// + /// TcpState + /// 原因 + internal void RemoveClient(IClient iClient, string str) + { + if (iClient == null) + { + return; + } + + try + { + ShutdownClient(iClient); + iClient.WorkSocket.Close(); + TcpServerOfflineClient(iClient); + TcpServerGetLog(iClient, LogType.Client, str); //记录 + } + catch (Exception ex) + { + TcpServerErrorMsg(string.Format("释放客户端资源时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + } + } + + /// + /// 强制断开与某个客户端的连接 + /// + /// + public void ShutdownClient(IClient iClient) + { + try + { + iClient.WorkSocket.Shutdown(SocketShutdown.Both); + } + catch + { + } + } + + #endregion 组件方法 + + #region 发送数据 + + /// + /// 向指定客户端发送字符串数据 + /// + /// + /// + /// + public void SendData(IClient iClient, string msg, bool isHexString = false) + { + byte[] data; + if (isHexString) + { + data = ConvertStringManager.StringToHexByteArray(msg); + } + else + { + data = Encoding.Default.GetBytes(msg); + } + + SendData(iClient, data); + } + + /// + /// 向指定IP和端口客户端发送字符串数据 + /// + /// + /// + /// + /// + public void SendData(string ip, int port, string msg, bool isHexString = false) + { + IClient iClient = FindIClient(ip, port); + if (iClient == null) + { + return; + } + + byte[] data; + if (isHexString) + { + data = ConvertStringManager.StringToHexByteArray(msg); + } + else + { + data = Encoding.Default.GetBytes(msg); + } + + SendData(iClient, data); + } + + /// + /// 向指定IP和端口客户端发送数据 + /// + /// + /// + /// + public void SendData(string ip, int port, byte[] data) + { + IClient iClient = FindIClient(ip, port); + if (iClient == null) + { + return; + } + + SendData(iClient, data); + } + + /// + /// 向指定客户端发送数据(基础) + /// + /// 客户端 + /// 字节数组数据 + public void SendData(IClient iClient, byte[] data) + { + try + { + if (iClient != null) + { + if (!iClient.WorkSocket.Connected) + { + DisposeClient(iClient); + return; + } + + //异步发送数据 + //cModel.ClientSocket.Send(data); + iClient.WorkSocket.BeginSend(data, 0, data.Length, 0, new AsyncCallback(SendCallback), iClient); + iClient.BufferInfo.SendBuffer = data; + TcpServerGetLog(iClient, LogType.SendData, ConvertStringManager.HexByteArrayToString(data)); + } + } + catch (SocketException ex) + { + DisposeClient(iClient); + } + } + + public void DisposeClient(IClient iClient) + { + try + { + if (iClient == null) + { + ClientSocketList.Remove(iClient); + TcpServerReturnClientCount(ClientSocketList.Count); + return; + } + + ShutdownClient(iClient); + TcpServerOfflineClient(iClient); + TcpServerErrorMsg(string.Format("强制关闭远程客户端时发生错误")); + TcpServerGetLog(iClient, LogType.SendData, "强制关闭远程客户端时发生错误"); + ClientSocketList.Remove(iClient); + TcpServerReturnClientCount(ClientSocketList.Count); + } + catch + { + } + } + + /// + /// 发送完数据之后的回调函数 + /// + /// Clicent + private void SendCallback(IAsyncResult ar) + { + IClient iClient = (IClient)ar.AsyncState; + try + { + if (iClient == null) + { + return; + } + + Socket handler = iClient.WorkSocket; + + int bytesSent = handler.EndSend(ar); + TcpServerSendDateSuccess(iClient, bytesSent); + TcpServerGetLog(iClient, LogType.SendDataResult, string.Format("发送成功,字节数:{0}", bytesSent)); + } + catch (Exception ex) + { + TcpServerErrorMsg(string.Format("发送数据后回调时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + TcpServerGetLog(iClient, LogType.SendDataResult, string.Format("发送失败,失败原因:{0},行号{1}", ex.Message, ex.StackTrace)); + } + } + + #endregion 发送数据 + + #region 查找客户端方法 + + /// + /// 根据IP,端口查找Socket客户端 + /// + /// + /// + /// + public IClient FindIClient(string ip, int port) + { + try + { + foreach (IClient iClient in ClientSocketList) + { + if (iClient.Ip.Equals(ip) + && iClient.Port.Equals(port)) + { + return iClient; + } + } + return null; + } + catch (Exception ex) + { + return null; + } + } + + /// + /// 根据IP,端口查找Socket客户端 + /// + /// + /// + public IClient FindIClient(string ip) + { + try + { + foreach (IClient iClient in ClientSocketList) + { + if (iClient.Ip.Equals(ip)) + { + return iClient; + } + } + return null; + } + catch (Exception ex) + { + return null; + } + } + + #endregion 查找客户端方法 + + #region 注册事件 + + #region OnRecevice接收数据事件 + + /// + /// 接收数据事件 + /// + [Description("接收数据事件")] + [Category("TcpServer事件")] + public event EventHandler OnRecevice; + + /// + /// 接收数据事件 + /// + /// + /// + protected virtual void TcpServerRecevice(IClient iClient, byte[] data) + { + if (OnRecevice != null) + { + CommonMethod.EventInvoket(() => + { + try + { + OnRecevice(this, new TcpServerReceviceaEventArgs(iClient, data)); + } + catch (Exception ex) + { + TcpServerErrorMsg(string.Format("接收客户端数据时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + } + }); + } + } + + #endregion OnRecevice接收数据事件 + + #region OnErrorMsg返回错误消息事件 + + /// + /// 错误消息 + /// + [Description("错误消息")] + [Category("TcpServer事件")] + public event EventHandler OnErrorMsg; + + /// + /// 错误消息 + /// + /// + protected virtual void TcpServerErrorMsg(string msg) + { + if (OnErrorMsg != null) + { + CommonMethod.EventInvoket(() => { OnErrorMsg(this, new TcpServerErrorEventArgs(msg)); }); + } + } + + #endregion OnErrorMsg返回错误消息事件 + + #region OnReturnClientCount用户上线下线时更新客户端在线数量事件 + + /// + /// 用户上线下线时更新客户端在线数量事件 + /// + [Description("用户上线下线时更新客户端在线数量事件")] + [Category("TcpServer事件")] + public event EventHandler OnReturnClientCount; + + /// + /// 用户上线下线时更新客户端在线数量事件 + /// + /// + protected virtual void TcpServerReturnClientCount(int count) + { + if (OnReturnClientCount != null) + { + CommonMethod.EventInvoket(() => { OnReturnClientCount(this, new TcpServerReturnClientCountEventArgs(count)); }); + } + } + + #endregion OnReturnClientCount用户上线下线时更新客户端在线数量事件 + + #region OnStateInfo监听状态改变时返回监听状态事件 + + /// + /// 监听状态改变时返回监听状态事件 + /// + [Description("监听状态改变时返回监听状态事件")] + [Category("TcpServer事件")] + public event EventHandler OnStateInfo; + + /// + /// 监听状态改变时返回监听状态事件 + /// + /// + /// + /// + protected virtual void TcpServerStateInfo(IClient iClient, string msg, SocketState state) + { + if (OnStateInfo != null) + { + CommonMethod.EventInvoket(() => { OnStateInfo(this, new TcpServerStateEventArgs(iClient, msg, state)); }); + } + } + + #endregion OnStateInfo监听状态改变时返回监听状态事件 + + #region OnAddClient新客户端上线时返回客户端事件 + + /// + /// 新客户端上线时返回客户端事件 + /// + [Description("新客户端上线时返回客户端事件")] + [Category("TcpServer事件")] + public event EventHandler OnOnlineClient; + + /// + /// 新客户端上线时返回客户端事件 + /// + /// + protected virtual void TcpServerOnlineClient(IClient iclient) + { + if (OnOnlineClient != null) + { + CommonMethod.EventInvoket(() => { OnOnlineClient(this, new TcpServerClientEventArgs(iclient)); }); + } + } + + #endregion OnAddClient新客户端上线时返回客户端事件 + + #region OnOfflineClient客户端下线时返回客户端事件 + + /// + /// 客户端下线时返回客户端事件 + /// + [Description("客户端下线时返回客户端事件")] + [Category("TcpServer事件")] + public event EventHandler OnOfflineClient; + + /// + /// 客户端下线时返回客户端事件 + /// + /// + protected virtual void TcpServerOfflineClient(IClient iclient) + { + if (OnOfflineClient != null) + { + ClientSocketList.Remove(iclient); + CommonMethod.EventInvoket(() => { OnOfflineClient(this, new TcpServerClientEventArgs(iclient)); }); + } + } + + #endregion OnOfflineClient客户端下线时返回客户端事件 + + #region OnGetLog服务端读写操作时返回日志消息 + + /// + /// 服务端读写操作时返回日志消息 + /// + [Description("服务端读写操作时返回日志消息")] + [Category("TcpServer事件")] + public event EventHandler OnGetLog; + + /// + /// 服务端读写操作时返回日志消息 + /// + /// + /// + /// + protected virtual void TcpServerGetLog(IClient temp, LogType logType, string logMsg) + { + if (OnGetLog != null) + { + CommonMethod.EventInvoket(() => { OnGetLog(this, new TcpServerLogEventArgs(temp, logType, logMsg)); }); + } + } + + #endregion OnGetLog服务端读写操作时返回日志消息 + + #region OnSendDateSuccess发送消息成功时返回成功消息事件 + + /// + /// 发送消息成功时返回成功消息事件 + /// + [Description("发送消息成功时返回成功消息事件")] + [Category("TcpServer事件")] + public event EventHandler OnSendDateSuccess; + + /// + /// 发送消息成功时返回成功消息事件 + /// + /// + /// + protected virtual void TcpServerSendDateSuccess(IClient temp, int byteLen) + { + if (OnSendDateSuccess != null) + { + CommonMethod.EventInvoket(() => { OnSendDateSuccess(this, new TcpServerSendReturnEventArgs(temp, byteLen)); }); + } + } + + #endregion OnSendDateSuccess发送消息成功时返回成功消息事件 + + #endregion 注册事件 + } +} \ No newline at end of file diff --git a/tongxin/NetWorkHelper/TClass/ClientType.cs b/tongxin/NetWorkHelper/TClass/ClientType.cs new file mode 100644 index 0000000..e893f78 --- /dev/null +++ b/tongxin/NetWorkHelper/TClass/ClientType.cs @@ -0,0 +1,151 @@ +/******************************************************************** + * * + * * Copyright (C) 2013-? Corporation All rights reserved. + * * 作者: BinGoo QQ:315567586 + * * 请尊重作者劳动成果,请保留以上作者信息,禁止用于商业活动。 + * * + * * 创建时间:2014-08-05 + * * 说明:客户端类型管理 + * * +********************************************************************/ + +using System.ComponentModel; + +namespace NetWorkHelper.TClass +{ + public enum ClientType + { + /// + /// 小车客户端 + /// + [Description("小车客户端")] + CarType = 0, + /// + /// 轨道列车客户端 + /// 包括(火车、地铁、高铁、动车) + /// + [Description("轨道列车客户端")] + TrainType = 1, + /// + /// 轨道监控PC客户端 + /// + [Description("轨道监控PC客户端")] + TrainPcType = 2, + /// + /// Led客户端 + /// + [Description("信号机客户端")] + LedType = 3, + /// + /// 监控调度客户端 + /// + [Description("监控调度客户端")] + GpsClientType = 4, + /// + /// 信号机PC客户端 + /// + [Description("信号机PC客户端")] + PcUtcClientType = 5, + /// + ///公交服务客户端 + /// + [Description("公交服务客户端")] + BusServerType = 6, + /// + /// 沙盘建筑背景灯控制客户端 + /// + [Description("建筑灯客户端")] + PcLampClient = 7, + /// + /// 沙盘建筑背景灯客户端 + /// + [Description("建筑灯PC客户端")] + LampClient = 8, + /// + /// 升降杆客户端 + /// + [Description("升降杆客户端")] + MotorClient = 9, + /// + /// 无标记 + /// + [Description("未知")] + None = 10, + /// + /// 华软客户端 + /// + [Description("华软客户端")] + HuaRuan = 11, + /// + /// 电子警察客户端 + /// + [Description("电子警察客户端")] + ElectronicPoliceClient = 12, + /// + /// 硬件地磁客户端 + /// + [Description("硬件地磁客户端")] + Geomagnetic = 13, + /// + /// 网页地磁客户端 + /// + [Description("网页地磁客户端")] + WebGeomagnetic = 14, + /// + /// andorid手机地磁客户端 + /// + [Description(" Andorid手机地磁客户端")] + AndroidGeomagnetic = 15, + /// + ///PC版地磁客户端 + /// + [Description("地磁PC客户端")] + PcGeomagnetic = 16, + /// + ///车辆监控客户端 + /// + [Description("车辆监控客户端")] + CarMonitor = 17, + /// + ///公交站闸机客户端 + /// + [Description("公交站闸机客户端")] + RfidDoor = 18, + /// + ///上海电气客户端 + /// + [Description("上海电气客户端")] + ShangHaiDianQi = 19, + /// + /// 电子警察闪关灯客户端 + /// + [Description("电子警察闪关灯客户端")] + ElectronicPoliceFlashLamp = 20, + /// + /// 停车场收费客户端 + /// + [Description("停车场收费客户端")] + ParkingChargeClient = 21, + /// + /// 新版调度监控客户端 + /// + [Description("新版调度监控客户端")] + DispatchClient = 22, + /// + /// 立体车库PC控制端 + /// + [Description("立体车库PC控制端")] + PcStereoGarage = 23, + /// + /// 立体车库硬件 + /// + [Description("立体车库硬件")] + StereoGarage = 24, + + /// + /// 模拟驾驶客户端 + /// + [Description("模拟驾驶客户端")] + VideoDrive = 25 + } +} diff --git a/tongxin/NetWorkHelper/TClass/ControlTag.cs b/tongxin/NetWorkHelper/TClass/ControlTag.cs new file mode 100644 index 0000000..764acae --- /dev/null +++ b/tongxin/NetWorkHelper/TClass/ControlTag.cs @@ -0,0 +1,39 @@ +using System.Net; + +namespace NetWorkHelper +{ + internal class ControlTag + { + private string _md5; + private string _fileName; + private IPEndPoint _remoteIP; + + public ControlTag( + string md5, + string fileName, + IPEndPoint remoteIP) + { + _md5 = md5; + _fileName = fileName; + _remoteIP = remoteIP; + } + + public string MD5 + { + get { return _md5; } + set { _md5 = value; } + } + + public string FileName + { + get { return _fileName; } + set { _fileName = value; } + } + + public IPEndPoint RemoteIP + { + get { return _remoteIP; } + set { _remoteIP = value; } + } + } +} diff --git a/tongxin/NetWorkHelper/TClass/EnumClass.cs b/tongxin/NetWorkHelper/TClass/EnumClass.cs new file mode 100644 index 0000000..0a006d0 --- /dev/null +++ b/tongxin/NetWorkHelper/TClass/EnumClass.cs @@ -0,0 +1,183 @@ +/******************************************************************** + * * + * * Copyright (C) 2013-? Corporation All rights reserved. + * * 作者: BinGoo QQ:315567586 + * * 请尊重作者劳动成果,请保留以上作者信息,禁止用于商业活动。 + * * + * * 创建时间:2014-08-05 + * * 说明: + * * +********************************************************************/ +using System.ComponentModel; + +namespace NetWorkHelper +{ + /// + /// Socket状态枚举 + /// + public enum SocketState + { + /// + /// 正在连接服务端 + /// + Connecting = 0, + + /// + /// 已连接服务端 + /// + Connected = 1, + + /// + /// 重新连接服务端 + /// + Reconnection = 2, + + /// + /// 断开服务端连接 + /// + Disconnect = 3, + + /// + /// 正在监听 + /// + StartListening = 4, + /// + /// 启动监听异常 + /// + StartListeningError = 5, + /// + /// 停止监听 + /// + StopListening = 6, + + /// + /// 客户端上线 + /// + ClientOnline = 7, + + /// + /// 客户端下线 + /// + ClientOnOff = 8 + } + /// + /// 错误类型 + /// + public enum SocketError + { + + } + + /// + /// 发送接收命令枚举 + /// + public enum Command + { + + /// + /// 发送请求接收文件 + /// + RequestSendFile = 0x000001, + /// + /// 响应发送请求接收文件 + /// + ResponeSendFile = 0x100001, + + /// + /// 请求发送文件包 + /// + RequestSendFilePack = 0x000002, + /// + /// 响应发送文件包 + /// + ResponeSendFilePack = 0x100002, + + /// + /// 请求取消发送文件包 + /// + RequestCancelSendFile = 0x000003, + /// + /// 响应取消发送文件包 + /// + ResponeCancelSendFile = 0x100003, + + /// + /// 请求取消接收发送文件 + /// + RequestCancelReceiveFile = 0x000004, + /// + /// 响应取消接收发送文件 + /// + ResponeCancelReceiveFile = 0x100004, + /// + /// 请求发送文本消息 + /// + RequestSendTextMSg = 0x000010, + } + /// + /// 消息类型 + /// + public enum MsgType + { + /// + /// 文本消息 + /// + TxtMsg = 0, + /// + /// 抖动窗体 + /// + Shake = 1, + /// + /// 表情 + /// + Face = 2, + /// + /// 图片 + /// + Pic = 3 + } + public enum ClientStyle + { + WebSocket, + PcSocket + } + public enum LogType + { + /// + /// 系统 + /// + [Description("系统日志")] + System, + + /// + /// 服务端 + /// + [Description("服务端类型日志")] + Server, + + /// + /// 客户端 + /// + [Description("客户端类型日志")] + Client, + + /// + /// 发送数据 + /// + [Description("发送数据类型日志")] + SendData, + + /// + /// 接收数据 + /// + [Description("接收数据类型日志")] + ReceviedData, + + /// + /// 发送数据返回结果 + /// + [Description("发送数据返回结果类型日志")] + SendDataResult + } + +} diff --git a/tongxin/NetWorkHelper/UDP/AxUdpClient.Designer.cs b/tongxin/NetWorkHelper/UDP/AxUdpClient.Designer.cs new file mode 100644 index 0000000..70e69b1 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/AxUdpClient.Designer.cs @@ -0,0 +1,47 @@ +namespace NetWorkHelper +{ + partial class AxUdpClient + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.fileTansfersContainer = new NetWorkHelper.FileTansfersContainer(); + // + // fileTansfersContainer + // + this.fileTansfersContainer.AutoScroll = true; + this.fileTansfersContainer.Location = new System.Drawing.Point(0, 0); + this.fileTansfersContainer.Name = "fileTansfersContainer"; + this.fileTansfersContainer.Size = new System.Drawing.Size(200, 100); + this.fileTansfersContainer.TabIndex = 0; + + } + + #endregion + + private FileTansfersContainer fileTansfersContainer; + } +} diff --git a/tongxin/NetWorkHelper/UDP/AxUdpClient.cs b/tongxin/NetWorkHelper/UDP/AxUdpClient.cs new file mode 100644 index 0000000..a73f710 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/AxUdpClient.cs @@ -0,0 +1,959 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Net; +using System.Text; +using System.Windows.Forms; + +namespace NetWorkHelper +{ + public partial class AxUdpClient : Component + { + #region 构造函数 + public AxUdpClient() + { + InitializeComponent(); + } + + public AxUdpClient(IContainer container) + { + container.Add(this); + + InitializeComponent(); + } + #endregion + + #region 变量 + private UdpLibrary _udpLibrary; + + /// + /// 文件发送列表管理器 + /// + private Dictionary _sendFileManagerList; + + /// + /// 文件接收列表管理器 + /// + private Dictionary _receiveFileManagerList; + private object _sendsyncLock = new object(); + private object _receivesyncLock = new object(); + #endregion + + #region 属性 + + /// + /// 传输协议是否启用AxUDPClient内部封装协议 + /// + [Description("传输协议是否启用AxUDPClient内部封装协议")] + [Category("UDP客户端属性")] + public bool IsAxAgreement { get; set; } = true; + + /// + /// UDP客户端基类 + /// + [Description("UDP客户端基类")] + [Category("UDP客户端属性")] + public UdpLibrary UdpLibrary + { + get + { + if (_udpLibrary == null) + { + _udpLibrary = new UdpLibrary(LocalPort); + _udpLibrary.ReceiveData += new ReceiveDataEventHandler(UdpLibraryReceiveData); + } + return _udpLibrary; + } + } + + /// + /// 文件发送列表管理器 + /// + [Description("文件发送列表管理器")] + [Category("UDP客户端属性")] + public Dictionary SendFileManagerList + { + get + { + if (_sendFileManagerList == null) + { + _sendFileManagerList = new Dictionary(10); + } + return _sendFileManagerList; + } + } + + /// + /// 文件接收列表管理器 + /// + [Description("文件接收列表管理器")] + [Category("UDP客户端属性")] + public Dictionary ReceiveFileManagerList + { + get + { + if (_receiveFileManagerList == null) + { + _receiveFileManagerList = new Dictionary(10); + } + return _receiveFileManagerList; + } + } + + /// + /// 远程监听IP + /// + [Description("远程监听IP")] + [Category("UDP客户端属性")] + public string RemoteIp { get; set; } = "127.0.0.1"; + + /// + /// 远程监听端口 + /// + [Description("远程监听端口")] + [Category("UDP客户端属性")] + public int RemotePort { get; set; } = 8900; + + /// + /// 本地监听IP + /// + [Description("本地监听IP")] + [Category("UDP客户端属性")] + public int LocalPort { get; set; } = 8899; + + /// + /// 远程主机网络端点 + /// + [Description("远程主机网络端点")] + [Category("UDP客户端属性")] + public IPEndPoint RemoteEp + { + get { return new IPEndPoint(IPAddress.Parse(RemoteIp), RemotePort); } + } + + public FileTansfersContainer FileTansfersControl + { + get + { + if (fileTansfersContainer == null) + { + fileTansfersContainer = new FileTansfersContainer(); + } + return fileTansfersContainer; + } + set + { + if (value == null) + fileTansfersContainer = new FileTansfersContainer(); + else + { + fileTansfersContainer = value; + } + + } + } + #endregion + + #region 方法 + /// + /// 启动监听 + /// + public void Start() + { + UdpLibrary.Start(); + } + /// + /// 关闭监听 + /// + public void Stop() + { + UdpLibrary.Stop(); + } + /// + /// 继承Udp基类接收数据方法 + /// + /// + /// + private void UdpLibraryReceiveData(object sender, ReceiveDataEventArgs e) + { + //若不适用内部封装协议则只激活接受原始数据事件 + if (!IsAxAgreement) + { + OnReceiveByte(e); + return; + } + MsgCell cell = new MsgCell(); + cell.FromBuffer(e.Buffer); + switch (cell.MessageId) + { + case (int)Command.RequestSendTextMSg: + OnReceiveTextMsg((MsgTypeCell)cell.Data); + break; + case (int)Command.ResponeSendFile: + OnResponeSendFile((ResponeTraFransfersFile)cell.Data); + break; + case (int)Command.ResponeSendFilePack: + OnResponeSendFilePack((ResponeTraFransfersFile)cell.Data); + break; + case (int)Command.RequestCancelReceiveFile: + OnRequestCancelReceiveFile(cell.Data.ToString()); + break; + case (int)Command.RequestSendFile: + OnStartRecieve((TraFransfersFileStart)cell.Data, e.RemoteIP); + break; + case (int)Command.RequestSendFilePack: + OnRecieveBuffer((TraFransfersFile)cell.Data, e.RemoteIP); + break; + case (int)Command.RequestCancelSendFile: + OnRequestCancelSendFile(cell.Data.ToString(), e.RemoteIP); + break; + } + } + + /// + /// 返回是否允许发送,在发送列表中的文件不能重复发送(避免文件被占用导致错误) + /// + /// + /// + public bool CanSend(SendFileManager sendFileManager) + { + return !SendFileManagerList.ContainsKey(sendFileManager.MD5); + } + /// + /// 发送文件 + /// + /// 文件路径(包含完整的文件名) + public void SendFile(string fileName) + { + SendFileManager sendFileManager = new SendFileManager(fileName); + Image img = Icon.ExtractAssociatedIcon(fileName).ToBitmap(); + SendFile(sendFileManager, img); + } + /// + /// 发送文件 + /// + /// 需要发送的文件类 + /// 文件ICO图标 + public void SendFile(SendFileManager sendFileManager, Image image) + { + if (SendFileManagerList.ContainsKey(sendFileManager.MD5)) + { + throw new Exception(string.Format("文件 {0} 正在发送,不能发送重复的文件。", sendFileManager.FileName)); + } + else + { + SendFileManagerList.Add(sendFileManager.MD5, sendFileManager); + sendFileManager.ReadFileBuffer += new ReadFileBufferEventHandler(SendFileManageReadFileBuffer); + TraFransfersFileStart ts = new TraFransfersFileStart(sendFileManager.MD5, sendFileManager.Name, image, sendFileManager.Length, sendFileManager.PartCount, sendFileManager.PartSize); + //添加 + AddSendItems(sendFileManager, image); + Send((int)Command.RequestSendFile, ts); + } + } + + /// + /// 取消发送 + /// + /// MD5校验文件 + public void CancelSend(string md5) + { + SendFileManager sendFileManager; + if (SendFileManagerList.TryGetValue(md5, out sendFileManager)) + { + Send((int)Command.RequestCancelSendFile, md5); + lock (_sendsyncLock) + { + SendFileManagerList.Remove(md5); + sendFileManager.Dispose(); + sendFileManager = null; + } + } + } + /// + /// 读取文件并发送文件 + /// + /// + /// + private void SendFileManageReadFileBuffer( + object sender, ReadFileBufferEventArgs e) + { + SendFileManager sendFileManager = sender as SendFileManager; + TraFransfersFile ts = new TraFransfersFile(sendFileManager.MD5, e.Index, e.Buffer); + Send((int)Command.RequestSendFilePack, ts); + } + /// + /// 发送信息 + /// + /// 消息标识 + /// 序列化数据 + public void Send(int messageId, object data) + { + Send(messageId, data, RemoteEp); + } + + public void SendText(string strmsg) + { + byte[] dataBytes = Encoding.Default.GetBytes(strmsg); + MsgTypeCell msgTypeCell = new MsgTypeCell(MsgType.TxtMsg, dataBytes); + MsgCell cell = new MsgCell(0x000010, msgTypeCell); + UdpLibrary.Send(cell, RemoteEp); + } + + public void SendImage(Image img) + { + MsgTypeCell msgTypeCell = new MsgTypeCell(MsgType.Pic, ImageHelper.ImageToBytes(img)); + MsgCell cell = new MsgCell(0x000010, msgTypeCell); + UdpLibrary.Send(cell, RemoteEp); + } + + /// + /// 发送信息 + /// + /// 消息标识 + /// 序列化数据 + /// 远程主机IP + public void Send(int messageId, object data, IPEndPoint remoteIp) + { + MsgCell cell = new MsgCell(messageId, data); + UdpLibrary.Send(cell, remoteIp); + } + /// + /// 发送信息 + /// + /// 数据 + /// 远程主机IP + public void Send(byte[] data) + { + UdpLibrary.Send(data, RemoteEp); + } + /// + /// 响应发送文件方法 + /// + /// + private void OnResponeSendFile(ResponeTraFransfersFile data) + { + SendFileManager sendFileManager; + if (!SendFileManagerList.TryGetValue(data.MD5, out sendFileManager)) + { + return; + } + if (data.Size > 0) + { + OnFileSendBuffer(new FileSendBufferEventArgs(sendFileManager, data.Size)); + } + if (data.Index == 0) + { + if (sendFileManager != null) + { + OnFileSendAccept(new FileSendEventArgs(sendFileManager)); + sendFileManager.Read(data.Index); + } + } + else + { + if (data.Index == -1) + { + OnFileSendRefuse(new FileSendEventArgs(sendFileManager)); + } + SendFileManagerList.Remove(data.MD5); + sendFileManager.Dispose(); + } + } + /// + /// 响应发送文件包方法 + /// + /// + private void OnResponeSendFilePack(ResponeTraFransfersFile data) + { + SendFileManager sendFileManager; + if (!SendFileManagerList.TryGetValue(data.MD5, out sendFileManager)) + { + return; + } + if (data.Size > 0) + { + OnFileSendBuffer(new FileSendBufferEventArgs(sendFileManager, data.Size)); + } + if (data.Index >= 0) + { + if (sendFileManager != null) + { + sendFileManager.Read(data.Index); + } + } + else + { + if (data.Index == -1) + { + OnFileSendRefuse(new FileSendEventArgs(sendFileManager)); + } + else if (data.Index == -2) + { + OnFileSendComplete(new FileSendEventArgs(sendFileManager)); + } + SendFileManagerList.Remove(data.MD5); + sendFileManager.Dispose(); + } + } + /// + /// 请求取消接收文件方法 + /// + /// + private void OnRequestCancelReceiveFile(string md5) + { + SendFileManager sendFileManager; + if (SendFileManagerList.TryGetValue(md5, out sendFileManager)) + { + OnFileSendCancel(new FileSendEventArgs(sendFileManager)); + lock (_sendsyncLock) + { + SendFileManagerList.Remove(md5); + sendFileManager.Dispose(); + sendFileManager = null; + } + } + + Send((int)Command.ResponeCancelReceiveFile, "OK"); + } + + #region 接收方法 + /// + /// 允许接收 + /// + /// + public void AcceptReceive(RequestSendFileEventArgs e) + { + TraFransfersFileStart traFransfersFileStart = e.TraFransfersFileStart; + IPEndPoint remoteIP = e.RemoteIP; + ResponeTraFransfersFile responeTraFransfersFile; + if (e.Cancel) + { + responeTraFransfersFile = new ResponeTraFransfersFile(traFransfersFileStart.MD5, 0, -1); + Send((int)Command.ResponeSendFile, responeTraFransfersFile, remoteIP); + } + else + { + ReceiveFileManager receiveFileManager; + if (!ReceiveFileManagerList.TryGetValue(traFransfersFileStart.MD5, out receiveFileManager)) + { + receiveFileManager = new ReceiveFileManager(traFransfersFileStart.MD5, e.Path, traFransfersFileStart.FileName, traFransfersFileStart.PartCount, traFransfersFileStart.PartSize, traFransfersFileStart.Length, remoteIP); + receiveFileManager.ReceiveFileComplete += new FileReceiveCompleteEventHandler(ReceiveFileManagerReceiveFileComplete); + receiveFileManager.ReceiveFileTimeout += new EventHandler(ReceiveFileManagerReceiveFileTimeout); + ReceiveFileManagerList.Add(traFransfersFileStart.MD5, receiveFileManager); + receiveFileManager.Start(); + } + responeTraFransfersFile = new ResponeTraFransfersFile(traFransfersFileStart.MD5, 0, 0); + Send((int)Command.ResponeSendFile, responeTraFransfersFile, remoteIP); + } + } + /// + /// 取消接收 + /// + /// + /// + public void CancelReceive(string md5, IPEndPoint remoteIP) + { + ReceiveFileManager receiveFileManager; + if (ReceiveFileManagerList.TryGetValue(md5, out receiveFileManager)) + { + Send((int)Command.RequestCancelReceiveFile, md5, remoteIP); + lock (_receivesyncLock) + { + ReceiveFileManagerList.Remove(md5); + receiveFileManager.Dispose(); + receiveFileManager = null; + } + } + } + /// + /// 完成接收文件 + /// + /// + /// + private void ReceiveFileManagerReceiveFileComplete( + object sender, FileReceiveCompleteEventArgs e) + { + ReceiveFileManager receiveFileManager = + sender as ReceiveFileManager; + OnFileReceiveComplete(new FileReceiveEventArgs(receiveFileManager)); + ReceiveFileManagerList.Remove(receiveFileManager.MD5); + } + + private void ReceiveFileManagerReceiveFileTimeout( + object sender, EventArgs e) + { + ReceiveFileManager receiveFileManager = + sender as ReceiveFileManager; + ResponeTraFransfersFile responeTraFransfersFile = + new ResponeTraFransfersFile( + receiveFileManager.MD5, + 0, + receiveFileManager.GetNextReceiveIndex()); + Send( + (int)Command.ResponeSendFilePack, + responeTraFransfersFile, + receiveFileManager.RemoteIP); + } + #endregion + + #endregion + + #region 事件 + + #region 发送文件事件 + + #region 文件发送被取消事件(当发送文件正在被接收中时对方取消接收) + [Description("文件发送被取消事件\r\n(当发送文件正在被接收中时对方取消接收)")] + public event FileSendEventHandler FileSendCancel; + /// + /// 文件发送时被取消时触发事件 + /// + /// + protected virtual void OnFileSendCancel(FileSendEventArgs e) + { + FileTransfersItem item = e.SendFileManager.Tag as FileTransfersItem; + if (item != null) + { + Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate () + { + fileTansfersContainer.RemoveItem(item); + item.Dispose(); + })); + } + + FileSendCancel?.Invoke(this, e); + } + #endregion + + #region 发送文件被允许接收时触发事件 + [Description("发送文件被允许接收时触发事件")] + public event FileSendEventHandler FileSendAccept; + /// + /// 文件被接收时触发事件 + /// + /// + protected virtual void OnFileSendAccept(FileSendEventArgs e) + { + FileTransfersItem item = e.SendFileManager.Tag as FileTransfersItem; + if (item != null) + { + Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate () + { + item.Start(); + })); + } + + FileSendAccept?.Invoke(this, e); + } + #endregion + + #region 文件正在发送时触发事件 + [Description("文件正在发送时触发事件")] + public event FileSendBufferEventHandler FileSendBuffer; + /// + /// 文件正在发送时触发事件 + /// + /// + protected virtual void OnFileSendBuffer(FileSendBufferEventArgs e) + { + FileTransfersItem item = e.SendFileManager.Tag as FileTransfersItem; + if (item != null) + { + Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate () + { + item.TotalTransfersSize += e.Size; + })); + } + FileSendBuffer?.Invoke(this, e); + } + #endregion + + #region 发送文件被拒绝接收时触发事件 + [Description("发送文件被拒绝接收时触发事件")] + public event FileSendEventHandler FileSendRefuse; + /// + /// 发送文件被拒绝接收时触发事件 + /// Refuse to receive file + /// + protected virtual void OnFileSendRefuse(FileSendEventArgs e) + { + FileTransfersItem item = e.SendFileManager.Tag as FileTransfersItem; + if (item != null) + { + Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate () + { + fileTansfersContainer.RemoveItem(item); + item.Dispose(); + })); + } + + FileSendRefuse?.Invoke(this, e); + } + #endregion + + #region 文件发送完成时触发事件 + [Description("文件发送完成时触发事件")] + public event FileSendEventHandler FileSendComplete; + /// + /// 文件发送完成时触发事件 + /// + /// + protected virtual void OnFileSendComplete(FileSendEventArgs e) + { + FileTransfersItem item = e.SendFileManager.Tag as FileTransfersItem; + if (item != null) + { + Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate () + { + fileTansfersContainer.RemoveItem(item); + item.Dispose(); + })); + } + + FileSendComplete?.Invoke(this, e); + } + #endregion + + #region 取消发送文件事件方法 + /// + /// 取消发送文件事件方法 + /// + /// + /// + private void OnRequestCancelSendFile(string md5, IPEndPoint remoteIP) + { + ReceiveFileManager receiveFileManager; + if (ReceiveFileManagerList.TryGetValue(md5, out receiveFileManager)) + { + OnFileReceiveCancel(new FileReceiveEventArgs(receiveFileManager)); + lock (_receivesyncLock) + { + ReceiveFileManagerList.Remove(md5); + receiveFileManager.Dispose(); + receiveFileManager = null; + } + } + else + { + FileReceiveEventArgs fe = new FileReceiveEventArgs(); + fe.Tag = md5; + OnFileReceiveCancel(fe); + } + Send( + (int)Command.ResponeCancelSendFile, "OK", remoteIP); + } + #endregion + #endregion + + #region 接收文件事件 + + + + #region 接收文本数据事件 + public delegate void ReceiveTextMsgEventHandler(MsgTypeCell msgTypeCell); + [Description("接收文本数据事件")] + public event ReceiveTextMsgEventHandler ReceiveTextMsg; + /// + /// 文件被接收时触发事件 + /// + /// + protected virtual void OnReceiveTextMsg(MsgTypeCell msgTypeCell) + { + ReceiveTextMsg?.Invoke(msgTypeCell); + } + #endregion + + #region 请求接收文件响应时触发事件 + [Description("请求接收文件响应时触发事件")] + public event RequestSendFileEventHandler FileRecieveRequest; + /// + /// 请求接收文件响应时触发事件 + /// + /// + protected virtual void OnFileRecieveRequest(RequestSendFileEventArgs e) + { + AddReadyReceiveItem(e); + FileRecieveRequest?.Invoke(this, e); + } + #endregion + + #region 文件被读取时(正在读取)触发事件 + [Description("文件被读取时(正在读取)触发事件")] + public event FileReceiveBufferEventHandler FileReceiveBuffer; + /// + /// 文件被读取时(正在读取)触发事件 + /// + /// + protected virtual void OnFileReceiveBuffer(FileReceiveBufferEventArgs e) + { + FileTransfersItem item = fileTansfersContainer.Search(e.ReceiveFileManager.MD5); + if (item != null) + { + Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate () + { + item.TotalTransfersSize += e.Size; + })); + } + + FileReceiveBuffer?.Invoke(this, e); + } + #endregion + + #region 文件接收完成时触发事件 + [Description("文件接收完成时触发事件")] + public event FileReceiveEventHandler FileReceiveComplete; + /// + /// 文件接收完成时触发事件 + /// + /// + protected virtual void OnFileReceiveComplete(FileReceiveEventArgs e) + { + Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate () + { + fileTansfersContainer.RemoveItem(e.ReceiveFileManager.MD5); + })); + FileReceiveComplete?.Invoke(this, e); + } + #endregion + + #region 文件接收时被取消发送触发事件 + [Description("接收文件被取消时触发事件\r\n(当正在接收对方文件时对方取消发送)")] + public event FileReceiveEventHandler FileReceiveCancel; + /// + /// 文件接收时被取消发送触发事件 + /// + /// + protected virtual void OnFileReceiveCancel(FileReceiveEventArgs e) + { + string md5 = string.Empty; + if (e.ReceiveFileManager != null) + { + md5 = e.ReceiveFileManager.MD5; + } + else + { + md5 = e.Tag.ToString(); + } + + FileTransfersItem item = fileTansfersContainer.Search(md5); + + Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate () + { + fileTansfersContainer.RemoveItem(item); + })); + FileReceiveCancel?.Invoke(this, e); + } + #endregion + + #region 接收文件事件方法 + /// + /// 接收文件事件方法 + /// + /// + /// + private void OnRecieveBuffer(TraFransfersFile traFransfersFile, IPEndPoint remoteEp) + { + ReceiveFileManager receiveFileManager; + + if (!ReceiveFileManagerList.TryGetValue(traFransfersFile.MD5, out receiveFileManager)) + { + return; + } + if (receiveFileManager != null) + { + ResponeTraFransfersFile responeTraFransfersFile; + int size = receiveFileManager.ReceiveBuffer(traFransfersFile.Index, traFransfersFile.Buffer); + + if (receiveFileManager.Completed) + { + responeTraFransfersFile = new ResponeTraFransfersFile(traFransfersFile.MD5, size, -2); + Send((int)Command.ResponeSendFilePack, responeTraFransfersFile, remoteEp); + } + else + { + responeTraFransfersFile = new ResponeTraFransfersFile(traFransfersFile.MD5, size, receiveFileManager.GetNextReceiveIndex()); + Send((int)Command.ResponeSendFilePack, responeTraFransfersFile, remoteEp); + } + OnFileReceiveBuffer(new FileReceiveBufferEventArgs(receiveFileManager, traFransfersFile.Buffer.Length)); + } + } + #endregion + + #region 开始接收文件事件方法(尚未开始接收文件) + /// + /// 开始接收文件事件方法(尚未开始接收文件) + /// + /// + /// + private void OnStartRecieve(TraFransfersFileStart traFransfersFileStart, IPEndPoint remoteEp) + { + OnFileRecieveRequest(new RequestSendFileEventArgs(traFransfersFileStart, remoteEp)); + } + #endregion + + + #endregion + + #region 接受原始数据事件 + public delegate void ReceiveByteEventHandler(ReceiveDataEventArgs e); + [Description("接收文本数据事件")] + public event ReceiveByteEventHandler ReceiveByte; + /// + /// 文件被接收时触发事件 + /// + /// + protected virtual void OnReceiveByte(ReceiveDataEventArgs e) + { + ReceiveByte?.Invoke(e); + } + #endregion + #endregion + + #region FileTransfersItem子项 + + #region Items变量 + private Color _baseColor = Color.FromArgb(255, 192, 128); + private Color _borderColor = Color.FromArgb(224, 224, 224); + private Color _progressBarBarColor = Color.SteelBlue; + private Color _progressBarBorderColor = Color.LightGray; + private Color _progressBarTextColor = Color.White; + #endregion + + #region 接收文件子项控件 + + /// + /// 添加准备接收文件Item + /// + /// + public void AddReadyReceiveItem(RequestSendFileEventArgs e) + { + TraFransfersFileStart traFransfersFileStart = e.TraFransfersFileStart; + + Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate () + { + FileTransfersItem item = fileTansfersContainer.AddItem(traFransfersFileStart.MD5, "接收文件", traFransfersFileStart.FileName, traFransfersFileStart.Image, traFransfersFileStart.Length, FileTransfersItemStyle.ReadyReceive); + + item.BaseColor = _baseColor; + item.BorderColor = _borderColor; + item.ProgressBarBarColor = _progressBarBarColor; + item.ProgressBarBorderColor = _progressBarBorderColor; + item.ProgressBarTextColor = _progressBarTextColor; + item.Tag = e; + item.SaveButtonClick += new EventHandler(ItemSaveButtonClick); + item.SaveToButtonClick += new EventHandler(ItemSaveToButtonClick); + item.RefuseButtonClick += new EventHandler(ItemRefuseButtonClick); + fileTansfersContainer.ResumeLayout(true); + })); + + } + + #region 按钮事件 + /// + /// 文件另存为按钮事件 + /// + /// + /// + private void ItemSaveToButtonClick(object sender, EventArgs e) + { + FileTransfersItem item = sender as FileTransfersItem; + RequestSendFileEventArgs rse = item.Tag as RequestSendFileEventArgs; + FolderBrowserDialog fbd = new FolderBrowserDialog(); + if (fbd.ShowDialog() == DialogResult.OK) + { + rse.Path = fbd.SelectedPath; + ControlTag tag = new ControlTag(rse.TraFransfersFileStart.MD5, rse.TraFransfersFileStart.FileName, rse.RemoteIP); + item.Tag = tag; + item.Style = FileTransfersItemStyle.Receive; + item.CancelButtonClick += new EventHandler(ItemCancelButtonClick); + item.Start(); + + this.AcceptReceive(rse); + } + } + + /// + /// 保存文件按钮事件 + /// + /// + /// + private void ItemSaveButtonClick(object sender, EventArgs e) + { + FileTransfersItem item = sender as FileTransfersItem; + RequestSendFileEventArgs rse = item.Tag as RequestSendFileEventArgs; + //自动保存在程序根目录下 + rse.Path = Application.StartupPath; + ControlTag tag = new ControlTag(rse.TraFransfersFileStart.MD5, rse.TraFransfersFileStart.FileName, rse.RemoteIP); + item.Tag = tag; + item.Style = FileTransfersItemStyle.Receive; + item.CancelButtonClick += new EventHandler(ItemCancelButtonClick); + item.Start(); + this.AcceptReceive(rse); + } + + /// + /// 拒绝接收文件按钮事件 + /// + /// + /// + private void ItemRefuseButtonClick(object sender, EventArgs e) + { + FileTransfersItem item = sender as FileTransfersItem; + RequestSendFileEventArgs rse = item.Tag as RequestSendFileEventArgs; + rse.Cancel = true; + fileTansfersContainer.RemoveItem(item); + item.Dispose(); + AcceptReceive(rse); + } + + /// + /// 取消按钮事件 + /// + /// + /// + private void ItemCancelButtonClick(object sender, EventArgs e) + { + FileTransfersItem item = sender as FileTransfersItem; + ControlTag tag = item.Tag as ControlTag; + CancelReceive(tag.MD5, tag.RemoteIP); + fileTansfersContainer.RemoveItem(item); + item.Dispose(); + } + #endregion + #endregion + + #region 发送文件子项控件 + /// + /// 添加发送文件控件Item + /// + /// + /// + public void AddSendItems(SendFileManager sendFileManager, Image image) + { + + FileTransfersItem item = fileTansfersContainer.AddItem(sendFileManager.MD5, "发送文件", sendFileManager.Name, image, sendFileManager.Length, FileTransfersItemStyle.Send); + item.BaseColor = Color.FromArgb(224, 224, 224); + item.BorderColor = _borderColor; + item.ProgressBarBarColor = _progressBarBarColor; + item.ProgressBarBorderColor = _progressBarBorderColor; + item.ProgressBarTextColor = _progressBarTextColor; + item.CancelButtonClick += new EventHandler(ItemSendCancelButtonClick); + item.Tag = sendFileManager; + sendFileManager.Tag = item; + } + #region 按钮事件 + + private void ItemSendCancelButtonClick(object sender, EventArgs e) + { + FileTransfersItem item = sender as FileTransfersItem; + SendFileManager sendFileManager = item.Tag as SendFileManager; + this.CancelSend(sendFileManager.MD5); + + fileTansfersContainer.RemoveItem(item); + } + + #endregion + #endregion + #endregion + } +} diff --git a/tongxin/NetWorkHelper/UDP/AxUdpClient.resx b/tongxin/NetWorkHelper/UDP/AxUdpClient.resx new file mode 100644 index 0000000..c83b89d --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/AxUdpClient.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + False + + \ No newline at end of file diff --git a/tongxin/NetWorkHelper/UDP/Controls/ControlState.cs b/tongxin/NetWorkHelper/UDP/Controls/ControlState.cs new file mode 100644 index 0000000..4d930f8 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Controls/ControlState.cs @@ -0,0 +1,10 @@ +namespace NetWorkHelper +{ + internal enum ControlState + { + Normal, + Hover, + Pressed, + Focused + } +} diff --git a/tongxin/NetWorkHelper/UDP/Controls/FileTansfersContainer.cs b/tongxin/NetWorkHelper/UDP/Controls/FileTansfersContainer.cs new file mode 100644 index 0000000..d69b64f --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Controls/FileTansfersContainer.cs @@ -0,0 +1,162 @@ +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +namespace NetWorkHelper +{ + /// + /// ͽļ + /// + public class FileTansfersContainer : Panel + { + private IFileTransfersItemText _fileTransfersItemText; + [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public IFileTransfersItemText FileTransfersItemText + { + get + { + if (this._fileTransfersItemText == null) + { + this._fileTransfersItemText = new FileTransfersItemText(); + } + return this._fileTransfersItemText; + } + set + { + this._fileTransfersItemText = value; + foreach (FileTransfersItem item in base.Controls) + { + item.FileTransfersText = this._fileTransfersItemText; + } + } + } + public FileTansfersContainer() + { + this.AutoScroll = true; + } + + private bool _isAutomaticShowHide = true; + [Description("ǷԶʾؿؼ\r\n(trueΪнļļʱԶʾؿؼ)")] + public bool IsAutomaticShowHide + { + get { return _isAutomaticShowHide; } + set { _isAutomaticShowHide = value; } + } + + public FileTransfersItem AddItem(string text, string fileName, Image image, long fileSize, FileTransfersItemStyle style) + { + FileTransfersItem item = new FileTransfersItem(); + item.Text = text; + item.FileName = fileName; + item.Image = image; + item.FileSize = fileSize; + item.Style = style; + item.FileTransfersText = this.FileTransfersItemText; + item.Dock = DockStyle.Top; + base.SuspendLayout(); + base.Controls.Add(item); + item.BringToFront(); + base.ResumeLayout(true); + if (IsAutomaticShowHide) + { + base.Visible = base.Controls.Count > 0 ? true : false; + } + return item; + } + /// + /// FileTransfersItemļ + /// + /// ƣMD5Уֵ + /// ļͣļ/ļ + /// ļ· + /// ļͼ + /// ļС + /// ļ״̬鿴FileTransfersItemStyle + /// + public FileTransfersItem AddItem(string md5, string typetext, string fileName, Image image, long fileSize, FileTransfersItemStyle style) + { + FileTransfersItem item = new FileTransfersItem(); + item.Name = md5; + item.Text = typetext; + item.FileName = fileName; + item.Image = image; + item.FileSize = fileSize; + item.Style = style; + item.FileTransfersText = this.FileTransfersItemText; + item.Dock = DockStyle.Top; + base.SuspendLayout(); + base.Controls.Add(item); + item.BringToFront(); + base.ResumeLayout(true); + if (IsAutomaticShowHide) + { + base.Visible = base.Controls.Count > 0 ? true : false; + } + return item; + } + /// + /// ƳӦFileTransfersItem + /// + /// FileTransfersItem + public void RemoveItem(FileTransfersItem item) + { + base.Controls.Remove(item); + if (IsAutomaticShowHide) + { + base.Visible = base.Controls.Count > 0 ? true : false; + } + } + /// + /// MD5ֵƳӦؼ + /// + /// + public void RemoveItem(string md5) + { + base.Controls.RemoveByKey(md5); + if (IsAutomaticShowHide) + { + base.Visible = base.Controls.Count > 0 ? true : false; + } + } + + public void RemoveItem(Predicate match) + { + FileTransfersItem itemRemove = null; + foreach (FileTransfersItem item in base.Controls) + { + if (match(item)) + { + itemRemove = item; + } + } + base.Controls.Remove(itemRemove); + if (IsAutomaticShowHide) + { + base.Visible = base.Controls.Count > 0 ? true : false; + } + } + /// + /// MD5УֵFileTransfersItem + /// + /// + /// + public FileTransfersItem Search(string md5) + { + return base.Controls[md5] as FileTransfersItem; + } + public FileTransfersItem Search(Predicate match) + { + FileTransfersItem result; + foreach (FileTransfersItem item in base.Controls) + { + if (match(item)) + { + result = item; + return result; + } + } + result = null; + return result; + } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Controls/FileTransfersItem.cs b/tongxin/NetWorkHelper/UDP/Controls/FileTransfersItem.cs new file mode 100644 index 0000000..96684f2 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Controls/FileTransfersItem.cs @@ -0,0 +1,986 @@ +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Text; +using System.Windows.Forms; +namespace NetWorkHelper +{ + public class FileTransfersItem : Control + { + private Image _image; + private string _fileName; + private long _fileSize; + private long _totalTransfersSize; + private FileTransfersItemStyle _style; + private RoundStyle _roundStyle = RoundStyle.All; + private int _radius = 8; + private Color _baseColor = Color.FromArgb(191, 233, 255); + private Color _borderColor = Color.FromArgb(118, 208, 225); + private Color _progressBarTrackColor = Color.Gainsboro; + private Color _progressBarBarColor = Color.FromArgb(191, 233, 255); + private Color _progressBarBorderColor = Color.FromArgb(118, 208, 225); + private Color _progressBarTextColor = Color.FromArgb(0, 95, 147); + private int _interval = 1000; + private IFileTransfersItemText _fileTransfersText; + private DateTime _startTime = DateTime.Now; + private System.Threading.Timer _timer; + private ControlState _saveState; + private ControlState _saveToState; + private ControlState _refuseState; + private ControlState _cancelState; + private static readonly object EventSaveButtonClick = new object(); + private static readonly object EventSaveToButtonClick = new object(); + private static readonly object EventRefuseButtonClick = new object(); + private static readonly object EventCancelButtonClick = new object(); + public event EventHandler SaveButtonClick + { + add + { + base.Events.AddHandler(FileTransfersItem.EventSaveButtonClick, value); + } + remove + { + base.Events.RemoveHandler(FileTransfersItem.EventSaveButtonClick, value); + } + } + public event EventHandler SaveToButtonClick + { + add + { + base.Events.AddHandler(FileTransfersItem.EventSaveToButtonClick, value); + } + remove + { + base.Events.RemoveHandler(FileTransfersItem.EventSaveToButtonClick, value); + } + } + public event EventHandler RefuseButtonClick + { + add + { + base.Events.AddHandler(FileTransfersItem.EventRefuseButtonClick, value); + } + remove + { + base.Events.RemoveHandler(FileTransfersItem.EventRefuseButtonClick, value); + } + } + public event EventHandler CancelButtonClick + { + add + { + base.Events.AddHandler(FileTransfersItem.EventCancelButtonClick, value); + } + remove + { + base.Events.RemoveHandler(FileTransfersItem.EventCancelButtonClick, value); + } + } + [DefaultValue(typeof(Icon), "null")] + public Image Image + { + get + { + return this._image; + } + set + { + this._image = value; + base.Invalidate(); + } + } + [DefaultValue("")] + public string FileName + { + get + { + return this._fileName; + } + set + { + this._fileName = value; + base.Invalidate(); + } + } + [DefaultValue(0)] + public long FileSize + { + get + { + return this._fileSize; + } + set + { + this._fileSize = value; + base.Invalidate(); + } + } + [DefaultValue(0)] + public long TotalTransfersSize + { + get + { + return this._totalTransfersSize; + } + set + { + if (this._totalTransfersSize != value) + { + if (value > this._fileSize) + { + this._totalTransfersSize = this._fileSize; + } + else + { + this._totalTransfersSize = value; + } + base.Invalidate(this.ProgressBarRect); + base.Invalidate(this.TransfersSizeRect); + } + } + } + [DefaultValue(typeof(FileTransfersItemStyle), "0")] + public FileTransfersItemStyle Style + { + get + { + return this._style; + } + set + { + this._style = value; + base.Invalidate(); + } + } + [DefaultValue(typeof(RoundStyle), "1")] + public RoundStyle RoundStyle + { + get + { + return this._roundStyle; + } + set + { + if (this._roundStyle != value) + { + this._roundStyle = value; + base.Invalidate(); + } + } + } + [DefaultValue(8)] + public int Radius + { + get + { + return this._radius; + } + set + { + if (this._radius != value) + { + this._radius = ((value < 1) ? 1 : value); + base.Invalidate(); + } + } + } + [DefaultValue(typeof(Color), "191, 233, 255")] + public Color BaseColor + { + get + { + return this._baseColor; + } + set + { + this._baseColor = value; + base.Invalidate(); + } + } + [DefaultValue(typeof(Color), "118, 208, 225")] + public Color BorderColor + { + get + { + return this._borderColor; + } + set + { + this._borderColor = value; + base.Invalidate(); + } + } + [DefaultValue(typeof(Color), "Gainsboro")] + public Color ProgressBarTrackColor + { + get + { + return this._progressBarTrackColor; + } + set + { + this._progressBarTrackColor = value; + base.Invalidate(this.ProgressBarRect); + } + } + [DefaultValue(typeof(Color), "191, 233, 255")] + public Color ProgressBarBarColor + { + get + { + return this._progressBarBarColor; + } + set + { + this._progressBarBarColor = value; + base.Invalidate(this.ProgressBarRect); + } + } + [DefaultValue(typeof(Color), "118, 208, 225")] + public Color ProgressBarBorderColor + { + get + { + return this._progressBarBorderColor; + } + set + { + this._progressBarBorderColor = value; + base.Invalidate(this.ProgressBarRect); + } + } + [DefaultValue(typeof(Color), "0, 95, 147")] + public Color ProgressBarTextColor + { + get + { + return this._progressBarTextColor; + } + set + { + this._progressBarTextColor = value; + base.Invalidate(this.ProgressBarRect); + } + } + [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public IFileTransfersItemText FileTransfersText + { + get + { + if (this._fileTransfersText == null) + { + this._fileTransfersText = new FileTransfersItemText(); + } + return this._fileTransfersText; + } + set + { + this._fileTransfersText = value; + base.Invalidate(); + } + } + [DefaultValue(1000)] + public int Interval + { + get + { + return this._interval; + } + set + { + this._interval = value; + } + } + internal System.Threading.Timer Timer + { + get + { + if (this._timer == null) + { + this._timer = new System.Threading.Timer(delegate (object obj) + { + if (!base.Disposing) + { + if (!base.Disposing) + { + base.BeginInvoke((MethodInvoker)delegate () + { + base.Invalidate(this.SpeedRect); + }); + } + } + }, null, -1, this._interval); + //System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(timer_Elapsed), null, -1, this._interval); + } + return this._timer; + } + } + + + internal Rectangle ImageRect + { + get + { + return new Rectangle(6, 6, 32, 32); + } + } + internal Rectangle TextRect + { + get + { + return new Rectangle(43, 6, base.Width - 49, 16); + } + } + internal Rectangle FileNameRect + { + get + { + return new Rectangle(43, 22, base.Width - 49, 16); + } + } + internal Rectangle ProgressBarRect + { + get + { + return new Rectangle(4, 41, base.Width - 8, 16); + } + } + internal Rectangle SpeedRect + { + get + { + return new Rectangle(6, 60, base.Width / 2 - 8, 16); + } + } + internal Rectangle TransfersSizeRect + { + get + { + return new Rectangle(base.Width / 2, 60, base.Width / 2 - 6, 16); + } + } + internal Rectangle RefuseReceiveRect + { + get + { + Size size = TextRenderer.MeasureText(this.FileTransfersText.RefuseReceive, this.Font); + return new Rectangle(base.Width - size.Width - 7, 79, size.Width, size.Height); + } + } + internal Rectangle CancelTransfersRect + { + get + { + Size size = TextRenderer.MeasureText(this.FileTransfersText.CancelTransfers, this.Font); + return new Rectangle(base.Width - size.Width - 7, 79, size.Width, size.Height); + } + } + internal Rectangle SaveToRect + { + get + { + Size size = TextRenderer.MeasureText(this.FileTransfersText.SaveTo, this.Font); + return new Rectangle(this.RefuseReceiveRect.X - size.Width - 20, 79, size.Width, size.Height); + } + } + internal Rectangle SaveRect + { + get + { + Size size = TextRenderer.MeasureText(this.FileTransfersText.Save, this.Font); + return new Rectangle(this.SaveToRect.X - size.Width - 20, 79, size.Width, size.Height); + } + } + protected override Size DefaultSize + { + get + { + return new Size(200, 97); + } + } + private ControlState SaveState + { + get + { + return this._saveState; + } + set + { + if (this._saveState != value) + { + this._saveState = value; + base.Invalidate(this.Inflate(this.SaveRect)); + } + } + } + private ControlState SaveToState + { + get + { + return this._saveToState; + } + set + { + if (this._saveToState != value) + { + this._saveToState = value; + base.Invalidate(this.Inflate(this.SaveToRect)); + } + } + } + private ControlState RefuseState + { + get + { + return this._refuseState; + } + set + { + if (this._refuseState != value) + { + this._refuseState = value; + base.Invalidate(this.Inflate(this.RefuseReceiveRect)); + } + } + } + private ControlState CancelState + { + get + { + return this._cancelState; + } + set + { + if (this._cancelState != value) + { + this._cancelState = value; + base.Invalidate(this.Inflate(this.CancelTransfersRect)); + } + } + } + public FileTransfersItem() + { + this.SetStyles(); + } + public void Start() + { + this._startTime = DateTime.Now; + this.Timer.Change(this._interval, this._interval); + } + protected virtual void OnSaveButtonClick(EventArgs e) + { + EventHandler handler = base.Events[FileTransfersItem.EventSaveButtonClick] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + protected virtual void OnSaveToButtonClick(EventArgs e) + { + EventHandler handler = base.Events[FileTransfersItem.EventSaveToButtonClick] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + protected virtual void OnRefuseButtonClick(EventArgs e) + { + EventHandler handler = base.Events[FileTransfersItem.EventRefuseButtonClick] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + protected virtual void OnCancelButtonClick(EventArgs e) + { + EventHandler handler = base.Events[FileTransfersItem.EventCancelButtonClick] as EventHandler; + if (handler != null) + { + handler(this, e); + } + } + protected override void OnMouseMove(MouseEventArgs e) + { + base.OnMouseMove(e); + Point point = e.Location; + switch (this._style) + { + case FileTransfersItemStyle.Send: + case FileTransfersItemStyle.Receive: + if (this.CancelTransfersRect.Contains(point)) + { + this.CancelState = ControlState.Hover; + } + else + { + this.CancelState = ControlState.Normal; + } + break; + case FileTransfersItemStyle.ReadyReceive: + if (this.SaveRect.Contains(point)) + { + this.SaveState = ControlState.Hover; + } + else + { + this.SaveState = ControlState.Normal; + } + if (this.SaveToRect.Contains(point)) + { + this.SaveToState = ControlState.Hover; + } + else + { + this.SaveToState = ControlState.Normal; + } + if (this.RefuseReceiveRect.Contains(point)) + { + this.RefuseState = ControlState.Hover; + } + else + { + this.RefuseState = ControlState.Normal; + } + break; + } + } + protected override void OnMouseDown(MouseEventArgs e) + { + base.OnMouseDown(e); + if (e.Button == MouseButtons.Left) + { + Point point = e.Location; + switch (this._style) + { + case FileTransfersItemStyle.Send: + case FileTransfersItemStyle.Receive: + if (this.CancelTransfersRect.Contains(point)) + { + this.CancelState = ControlState.Pressed; + } + break; + case FileTransfersItemStyle.ReadyReceive: + if (this.SaveRect.Contains(point)) + { + this.SaveState = ControlState.Pressed; + } + if (this.SaveToRect.Contains(point)) + { + this.SaveToState = ControlState.Pressed; + } + if (this.RefuseReceiveRect.Contains(point)) + { + this.RefuseState = ControlState.Pressed; + } + break; + } + } + } + protected override void OnMouseUp(MouseEventArgs e) + { + base.OnMouseUp(e); + if (e.Button == MouseButtons.Left) + { + Point point = e.Location; + switch (this._style) + { + case FileTransfersItemStyle.Send: + case FileTransfersItemStyle.Receive: + if (this.CancelTransfersRect.Contains(point)) + { + this.CancelState = ControlState.Hover; + this.OnCancelButtonClick(e); + } + else + { + this.CancelState = ControlState.Normal; + } + break; + case FileTransfersItemStyle.ReadyReceive: + if (this.SaveRect.Contains(point)) + { + this.SaveState = ControlState.Hover; + this.OnSaveButtonClick(e); + } + else + { + this.SaveState = ControlState.Normal; + } + if (this.SaveToRect.Contains(point)) + { + this.SaveToState = ControlState.Hover; + this.OnSaveToButtonClick(e); + } + else + { + this.SaveToState = ControlState.Normal; + } + if (this.RefuseReceiveRect.Contains(point)) + { + this.RefuseState = ControlState.Hover; + this.OnRefuseButtonClick(e); + } + else + { + this.RefuseState = ControlState.Normal; + } + break; + } + } + } + protected override void OnMouseLeave(EventArgs e) + { + base.OnMouseLeave(e); + switch (this._style) + { + case FileTransfersItemStyle.Send: + case FileTransfersItemStyle.Receive: + this.CancelState = ControlState.Normal; + break; + case FileTransfersItemStyle.ReadyReceive: + this.SaveState = ControlState.Normal; + this.SaveToState = ControlState.Normal; + this.RefuseState = ControlState.Normal; + break; + } + } + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + Graphics g = e.Graphics; + g.SmoothingMode = SmoothingMode.AntiAlias; + g.InterpolationMode = InterpolationMode.HighQualityBilinear; + g.TextRenderingHint = TextRenderingHint.AntiAlias; + if (this.Image != null) + { + g.DrawImage(this.Image, this.ImageRect, new Rectangle(Point.Empty, this.Image.Size), GraphicsUnit.Pixel); + } + TextFormatFlags flags = TextFormatFlags.EndEllipsis | TextFormatFlags.SingleLine; + TextRenderer.DrawText(g, this.Text, this.Font, this.TextRect, this.ForeColor, flags); + TextRenderer.DrawText(g, this.FileName, this.Font, this.FileNameRect, this.ForeColor, flags); + Rectangle rect = this.ProgressBarRect; + Color innerBorderColor = Color.FromArgb(200, 255, 255, 255); + this.RenderBackgroundInternal(g, rect, this._progressBarTrackColor, this._progressBarBorderColor, innerBorderColor, RoundStyle.None, 0, 0.0f, false, false, LinearGradientMode.Vertical); + if (this.FileSize != 0L) + { + float percent = (float)this.TotalTransfersSize / (float)this.FileSize; + int width = (int)((float)rect.Width * percent); + width = Math.Min(width, rect.Width - 2); + if (width > 5) + { + Rectangle barRect = new Rectangle(rect.X + 1, rect.Y + 1, width, rect.Height - 2); + this.RenderBackgroundInternal(g, barRect, this._progressBarBarColor, this._progressBarBarColor, innerBorderColor, RoundStyle.None, 0, 0.0f, false, false, LinearGradientMode.Vertical); + } + TextRenderer.DrawText(g, percent.ToString("0.0%"), this.Font, rect, this._progressBarTextColor, TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter); + string transferSizeText = string.Format("{0}/{1}", this.GetText((double)this._totalTransfersSize), this.GetText((double)this._fileSize)); + TextRenderer.DrawText(g, transferSizeText, this.Font, this.TransfersSizeRect, this.ForeColor, TextFormatFlags.Right | TextFormatFlags.VerticalCenter); + if (this._totalTransfersSize != 0L && !base.DesignMode) + { + TextRenderer.DrawText(g, this.GetSpeedText(), this.Font, this.SpeedRect, this.ForeColor, TextFormatFlags.VerticalCenter); + } + } + flags = (TextFormatFlags.EndEllipsis | TextFormatFlags.HorizontalCenter | TextFormatFlags.SingleLine); + switch (this._style) + { + case FileTransfersItemStyle.Send: + case FileTransfersItemStyle.Receive: + if (this.CancelState != ControlState.Normal) + { + rect = this.CancelTransfersRect; + rect.Inflate(2, 2); + this.RenderBackgroundInternal(g, rect, this._baseColor, this._borderColor, innerBorderColor, RoundStyle.None, this._radius, 0.0f, true, true, LinearGradientMode.Vertical); + } + TextRenderer.DrawText(g, this.FileTransfersText.CancelTransfers, this.Font, this.CancelTransfersRect, this.ForeColor, flags); + break; + case FileTransfersItemStyle.ReadyReceive: + { + bool drawBack = false; + if (this.SaveState != ControlState.Normal) + { + rect = this.SaveRect; + rect.Inflate(2, 2); + drawBack = true; + } + if (this.SaveToState != ControlState.Normal) + { + rect = this.SaveToRect; + rect.Inflate(2, 2); + drawBack = true; + } + if (this.RefuseState != ControlState.Normal) + { + rect = this.RefuseReceiveRect; + rect.Inflate(2, 2); + drawBack = true; + } + if (drawBack) + { + this.RenderBackgroundInternal(g, rect, this._baseColor, this._borderColor, innerBorderColor, RoundStyle.None, this._radius, 0.45f, true, true, LinearGradientMode.Vertical); + } + TextRenderer.DrawText(g, this.FileTransfersText.RefuseReceive, this.Font, this.RefuseReceiveRect, this.ForeColor, flags); + TextRenderer.DrawText(g, this.FileTransfersText.SaveTo, this.Font, this.SaveToRect, this.ForeColor, flags); + TextRenderer.DrawText(g, this.FileTransfersText.Save, this.Font, this.SaveRect, this.ForeColor, flags); + break; + } + } + } + protected override void OnPaintBackground(PaintEventArgs e) + { + base.OnPaintBackground(e); + Graphics g = e.Graphics; + Rectangle rect = base.ClientRectangle; + g.SmoothingMode = SmoothingMode.AntiAlias; + rect.Inflate(-1, -1); + this.RenderBackgroundInternal(g, rect, this._baseColor, this._borderColor, Color.FromArgb(200, 255, 255), this._roundStyle, this._radius, 0.45f, true, false, LinearGradientMode.Vertical); + } + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (disposing) + { + if (this._timer != null) + { + this._timer.Dispose(); + } + this._fileTransfersText = null; + } + } + private void SetStyles() + { + base.SetStyle(ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.FixedHeight | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true); + base.SetStyle(ControlStyles.Opaque, false); + base.UpdateStyles(); + } + internal void RenderBackgroundInternal(Graphics g, Rectangle rect, Color baseColor, Color borderColor, Color innerBorderColor, RoundStyle style, int roundWidth, float basePosition, bool drawBorder, bool drawGlass, LinearGradientMode mode) + { + if (drawBorder) + { + rect.Width--; + rect.Height--; + } + if (rect.Width > 0 && rect.Height > 0) + { + using (LinearGradientBrush brush = new LinearGradientBrush(rect, Color.Transparent, Color.Transparent, mode)) + { + Color[] colors = new Color[] + { + this.GetColor(baseColor, 0, 35, 24, 9), + this.GetColor(baseColor, 0, 13, 8, 3), + baseColor, + this.GetColor(baseColor, 0, 68, 69, 54) + }; + brush.InterpolationColors = new ColorBlend + { + Positions = new float[] + { + 0f, + basePosition, + basePosition + 0.05f, + 1f + }, + Colors = colors + }; + if (style != RoundStyle.None) + { + using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false)) + { + g.FillPath(brush, path); + } + if (baseColor.A > 80) + { + Rectangle rectTop = rect; + if (mode == LinearGradientMode.Vertical) + { + rectTop.Height = (int)((float)rectTop.Height * basePosition); + } + else + { + rectTop.Width = (int)((float)rect.Width * basePosition); + } + using (GraphicsPath pathTop = GraphicsPathHelper.CreatePath(rectTop, roundWidth, RoundStyle.Top, false)) + { + using (SolidBrush brushAlpha = new SolidBrush(Color.FromArgb(80, 255, 255, 255))) + { + g.FillPath(brushAlpha, pathTop); + } + } + } + if (drawGlass) + { + RectangleF glassRect = rect; + if (mode == LinearGradientMode.Vertical) + { + glassRect.Y = (float)rect.Y + (float)rect.Height * basePosition; + glassRect.Height = ((float)rect.Height - (float)rect.Height * basePosition) * 2f; + } + else + { + glassRect.X = (float)rect.X + (float)rect.Width * basePosition; + glassRect.Width = ((float)rect.Width - (float)rect.Width * basePosition) * 2f; + } + this.DrawGlass(g, glassRect, 170, 0); + } + if (drawBorder) + { + using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false)) + { + using (Pen pen = new Pen(borderColor)) + { + g.DrawPath(pen, path); + } + } + rect.Inflate(-1, -1); + using (GraphicsPath path = GraphicsPathHelper.CreatePath(rect, roundWidth, style, false)) + { + using (Pen pen = new Pen(innerBorderColor)) + { + g.DrawPath(pen, path); + } + } + } + } + else + { + g.FillRectangle(brush, rect); + if (baseColor.A > 80) + { + Rectangle rectTop = rect; + if (mode == LinearGradientMode.Vertical) + { + rectTop.Height = (int)((float)rectTop.Height * basePosition); + } + else + { + rectTop.Width = (int)((float)rect.Width * basePosition); + } + using (SolidBrush brushAlpha = new SolidBrush(Color.FromArgb(80, 255, 255, 255))) + { + g.FillRectangle(brushAlpha, rectTop); + } + } + if (drawGlass) + { + RectangleF glassRect = rect; + if (mode == LinearGradientMode.Vertical) + { + glassRect.Y = (float)rect.Y + (float)rect.Height * basePosition; + glassRect.Height = ((float)rect.Height - (float)rect.Height * basePosition) * 2f; + } + else + { + glassRect.X = (float)rect.X + (float)rect.Width * basePosition; + glassRect.Width = ((float)rect.Width - (float)rect.Width * basePosition) * 2f; + } + this.DrawGlass(g, glassRect, 200, 0); + } + if (drawBorder) + { + using (Pen pen = new Pen(borderColor)) + { + g.DrawRectangle(pen, rect); + } + rect.Inflate(-1, -1); + using (Pen pen = new Pen(innerBorderColor)) + { + g.DrawRectangle(pen, rect); + } + } + } + } + } + } + private void DrawGlass(Graphics g, RectangleF glassRect, int alphaCenter, int alphaSurround) + { + this.DrawGlass(g, glassRect, Color.White, alphaCenter, alphaSurround); + } + private void DrawGlass(Graphics g, RectangleF glassRect, Color glassColor, int alphaCenter, int alphaSurround) + { + using (GraphicsPath path = new GraphicsPath()) + { + path.AddEllipse(glassRect); + using (PathGradientBrush brush = new PathGradientBrush(path)) + { + brush.CenterColor = Color.FromArgb(alphaCenter, glassColor); + brush.SurroundColors = new Color[] + { + Color.FromArgb(alphaSurround, glassColor) + }; + brush.CenterPoint = new PointF(glassRect.X + glassRect.Width / 2f, glassRect.Y + glassRect.Height / 2f); + g.FillPath(brush, path); + } + } + } + private Color GetColor(Color colorBase, int a, int r, int g, int b) + { + int a2 = (int)colorBase.A; + int r2 = (int)colorBase.R; + int g2 = (int)colorBase.G; + int b2 = (int)colorBase.B; + if (a + a2 > 255) + { + a = 255; + } + else + { + a = Math.Max(a + a2, 0); + } + if (r + r2 > 255) + { + r = 255; + } + else + { + r = Math.Max(r + r2, 0); + } + if (g + g2 > 255) + { + g = 255; + } + else + { + g = Math.Max(g + g2, 0); + } + if (b + b2 > 255) + { + b = 255; + } + else + { + b = Math.Max(b + b2, 0); + } + return Color.FromArgb(a, r, g, b); + } + private string GetText(double size) + { + string result; + if (size < 1024.0) + { + result = string.Format("{0} B", size.ToString("f1")); + } + else + { + if (size < 1048576.0) + { + result = string.Format("{0} KB", (size / 1024.0).ToString("f1")); + } + else + { + result = string.Format("{0} MB", (size / 1048576.0).ToString("f1")); + } + } + return result; + } + private string GetSpeedText() + { + TimeSpan span = DateTime.Now - this._startTime; + double speed = (double)this._totalTransfersSize / span.TotalSeconds; + return string.Format("{0}/s", this.GetText(speed)); + } + private Rectangle Inflate(Rectangle rect) + { + rect.Inflate(2, 2); + return rect; + } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Controls/FileTransfersItemStyle.cs b/tongxin/NetWorkHelper/UDP/Controls/FileTransfersItemStyle.cs new file mode 100644 index 0000000..b0c1911 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Controls/FileTransfersItemStyle.cs @@ -0,0 +1,21 @@ +namespace NetWorkHelper +{ + /// + /// ļ״̬ + /// + public enum FileTransfersItemStyle + { + /// + /// ļ + /// + Send, + /// + /// ׼ļ + /// + ReadyReceive, + /// + /// ļ + /// + Receive + } +} diff --git a/tongxin/NetWorkHelper/UDP/Controls/FileTransfersItemText.cs b/tongxin/NetWorkHelper/UDP/Controls/FileTransfersItemText.cs new file mode 100644 index 0000000..93193f9 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Controls/FileTransfersItemText.cs @@ -0,0 +1,34 @@ +namespace NetWorkHelper +{ + internal class FileTransfersItemText : IFileTransfersItemText + { + public string Save + { + get + { + return "接收"; + } + } + public string SaveTo + { + get + { + return "另存为..."; + } + } + public string RefuseReceive + { + get + { + return "拒绝"; + } + } + public string CancelTransfers + { + get + { + return "取消"; + } + } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Controls/GraphicsPathHelper.cs b/tongxin/NetWorkHelper/UDP/Controls/GraphicsPathHelper.cs new file mode 100644 index 0000000..87ec6f1 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Controls/GraphicsPathHelper.cs @@ -0,0 +1,47 @@ +using System.Drawing; +using System.Drawing.Drawing2D; +namespace NetWorkHelper +{ + public static class GraphicsPathHelper + { + public static GraphicsPath CreatePath(Rectangle rect, int radius, RoundStyle style, bool correction) + { + GraphicsPath path = new GraphicsPath(); + int radiusCorrection = correction ? 1 : 0; + switch (style) + { + case RoundStyle.None: + path.AddRectangle(rect); + break; + case RoundStyle.All: + path.AddArc(rect.X, rect.Y, radius, radius, 180f, 90f); + path.AddArc(rect.Right - radius - radiusCorrection, rect.Y, radius, radius, 270f, 90f); + path.AddArc(rect.Right - radius - radiusCorrection, rect.Bottom - radius - radiusCorrection, radius, radius, 0f, 90f); + path.AddArc(rect.X, rect.Bottom - radius - radiusCorrection, radius, radius, 90f, 90f); + break; + case RoundStyle.Left: + path.AddArc(rect.X, rect.Y, radius, radius, 180f, 90f); + path.AddLine(rect.Right - radiusCorrection, rect.Y, rect.Right - radiusCorrection, rect.Bottom - radiusCorrection); + path.AddArc(rect.X, rect.Bottom - radius - radiusCorrection, radius, radius, 90f, 90f); + break; + case RoundStyle.Right: + path.AddArc(rect.Right - radius - radiusCorrection, rect.Y, radius, radius, 270f, 90f); + path.AddArc(rect.Right - radius - radiusCorrection, rect.Bottom - radius - radiusCorrection, radius, radius, 0f, 90f); + path.AddLine(rect.X, rect.Bottom - radiusCorrection, rect.X, rect.Y); + break; + case RoundStyle.Top: + path.AddArc(rect.X, rect.Y, radius, radius, 180f, 90f); + path.AddArc(rect.Right - radius - radiusCorrection, rect.Y, radius, radius, 270f, 90f); + path.AddLine(rect.Right - radiusCorrection, rect.Bottom - radiusCorrection, rect.X, rect.Bottom - radiusCorrection); + break; + case RoundStyle.Bottom: + path.AddArc(rect.Right - radius - radiusCorrection, rect.Bottom - radius - radiusCorrection, radius, radius, 0f, 90f); + path.AddArc(rect.X, rect.Bottom - radius - radiusCorrection, radius, radius, 90f, 90f); + path.AddLine(rect.X, rect.Y, rect.Right - radiusCorrection, rect.Y); + break; + } + path.CloseFigure(); + return path; + } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Controls/IFileTransfersItemText.cs b/tongxin/NetWorkHelper/UDP/Controls/IFileTransfersItemText.cs new file mode 100644 index 0000000..5236e31 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Controls/IFileTransfersItemText.cs @@ -0,0 +1,22 @@ +namespace NetWorkHelper +{ + public interface IFileTransfersItemText + { + string Save + { + get; + } + string SaveTo + { + get; + } + string RefuseReceive + { + get; + } + string CancelTransfers + { + get; + } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Controls/RoundStyle.cs b/tongxin/NetWorkHelper/UDP/Controls/RoundStyle.cs new file mode 100644 index 0000000..fb7859e --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Controls/RoundStyle.cs @@ -0,0 +1,12 @@ +namespace NetWorkHelper +{ + public enum RoundStyle + { + None, + All, + Left, + Right, + Top, + Bottom + } +} diff --git a/tongxin/NetWorkHelper/UDP/Controls/TraFransfersFile.cs b/tongxin/NetWorkHelper/UDP/Controls/TraFransfersFile.cs new file mode 100644 index 0000000..7e3bc9c --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Controls/TraFransfersFile.cs @@ -0,0 +1,37 @@ +using System; + +namespace NetWorkHelper +{ + [Serializable] + public class TraFransfersFile + { + private string _md5; + private int _index; + private byte[] _buffer; + + public TraFransfersFile(string md5, int index, byte[] buffer) + { + _md5 = md5; + _index = index; + _buffer = buffer; + } + + public string MD5 + { + get { return _md5; } + set { _md5 = value; } + } + + public int Index + { + get { return _index; } + set { _index = value; } + } + + public byte[] Buffer + { + get { return _buffer; } + set { _buffer = value; } + } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Controls/TraFransfersFileControl.resx b/tongxin/NetWorkHelper/UDP/Controls/TraFransfersFileControl.resx new file mode 100644 index 0000000..5cea0f6 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Controls/TraFransfersFileControl.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/tongxin/NetWorkHelper/UDP/Controls/TraFransfersFileStart.cs b/tongxin/NetWorkHelper/UDP/Controls/TraFransfersFileStart.cs new file mode 100644 index 0000000..d555b70 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Controls/TraFransfersFileStart.cs @@ -0,0 +1,68 @@ +using System; +using System.Drawing; + +namespace NetWorkHelper +{ + [Serializable] + public class TraFransfersFileStart + { + private string _md5; + private string _fileName; + private Image _image; + private long _length; + private long _partCount; + private int _partSize; + + public TraFransfersFileStart( + string md5, + string fileName, + Image image, + long length, + long partCount, + int partSize) + { + _md5 = md5; + _fileName = fileName; + _image = image; + _length = length; + _partCount = partCount; + _partSize = partSize; + } + + public string MD5 + { + get { return _md5; } + set { _md5 = value; } + } + + public Image Image + { + get { return _image; } + set { _image = value; } + } + + public string FileName + { + get { return _fileName; } + set { _fileName = value; } + } + + public long Length + { + get { return _length; } + set { _length = value; } + } + + public long PartCount + { + get { return _partCount; } + set { _partCount = value; } + } + + public int PartSize + { + get { return _partSize; } + set { _partSize = value; } + } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Event/FileReceiveBufferEvent.cs b/tongxin/NetWorkHelper/UDP/Event/FileReceiveBufferEvent.cs new file mode 100644 index 0000000..4265eb0 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Event/FileReceiveBufferEvent.cs @@ -0,0 +1,20 @@ +using System; + +namespace NetWorkHelper +{ + public delegate void FileReceiveBufferEventHandler(object sender, FileReceiveBufferEventArgs e); + + public class FileReceiveBufferEventArgs : EventArgs + { + public FileReceiveBufferEventArgs(ReceiveFileManager receiveFileManager, int size) + : base() + { + ReceiveFileManager = receiveFileManager; + Size = size; + } + + public ReceiveFileManager ReceiveFileManager { get; } + + public int Size { get; } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Event/FileReceiveCompleteEvent.cs b/tongxin/NetWorkHelper/UDP/Event/FileReceiveCompleteEvent.cs new file mode 100644 index 0000000..16f7376 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Event/FileReceiveCompleteEvent.cs @@ -0,0 +1,19 @@ +using System; + +namespace NetWorkHelper +{ + public delegate void FileReceiveCompleteEventHandler(object sender, FileReceiveCompleteEventArgs e); + + public class FileReceiveCompleteEventArgs : EventArgs + { + public FileReceiveCompleteEventArgs() { } + + public FileReceiveCompleteEventArgs(bool success) + : base() + { + Success = success; + } + + public bool Success { get; set; } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Event/FileReceiveEvent.cs b/tongxin/NetWorkHelper/UDP/Event/FileReceiveEvent.cs new file mode 100644 index 0000000..158b533 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Event/FileReceiveEvent.cs @@ -0,0 +1,20 @@ +using System; + +namespace NetWorkHelper +{ + public delegate void FileReceiveEventHandler(object sender, FileReceiveEventArgs e); + + public class FileReceiveEventArgs : EventArgs + { + public FileReceiveEventArgs() { } + + public FileReceiveEventArgs(ReceiveFileManager receiveFileManager) : base() + { + ReceiveFileManager = receiveFileManager; + } + + public ReceiveFileManager ReceiveFileManager { get; } + + public object Tag { get; set; } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Event/FileSendBufferEvent.cs b/tongxin/NetWorkHelper/UDP/Event/FileSendBufferEvent.cs new file mode 100644 index 0000000..9550806 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Event/FileSendBufferEvent.cs @@ -0,0 +1,20 @@ +using System; + +namespace NetWorkHelper +{ + public delegate void FileSendBufferEventHandler(object sender, FileSendBufferEventArgs e); + + public class FileSendBufferEventArgs : EventArgs + { + public FileSendBufferEventArgs(SendFileManager sendFileManager, int size) + : base() + { + SendFileManager = sendFileManager; + Size = size; + } + + public SendFileManager SendFileManager { get; } + + public int Size { get; } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Event/FileSendEvent.cs b/tongxin/NetWorkHelper/UDP/Event/FileSendEvent.cs new file mode 100644 index 0000000..a2d6239 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Event/FileSendEvent.cs @@ -0,0 +1,17 @@ +using System; + +namespace NetWorkHelper +{ + public delegate void FileSendEventHandler(object sender, FileSendEventArgs e); + + public class FileSendEventArgs : EventArgs + { + public FileSendEventArgs(SendFileManager sendFileManager) + : base() + { + SendFileManager = sendFileManager; + } + + public SendFileManager SendFileManager { get; } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Event/ReadFileBufferEvent.cs b/tongxin/NetWorkHelper/UDP/Event/ReadFileBufferEvent.cs new file mode 100644 index 0000000..5736500 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Event/ReadFileBufferEvent.cs @@ -0,0 +1,20 @@ +using System; + +namespace NetWorkHelper +{ + public delegate void ReadFileBufferEventHandler(object sender, ReadFileBufferEventArgs e); + + public class ReadFileBufferEventArgs : EventArgs + { + public ReadFileBufferEventArgs(int index, byte[] buffer) + : base() + { + Index = index; + Buffer = buffer; + } + + public int Index { get; } + + public byte[] Buffer { get; } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Event/ReceiveDataEvent.cs b/tongxin/NetWorkHelper/UDP/Event/ReceiveDataEvent.cs new file mode 100644 index 0000000..2a92d1e --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Event/ReceiveDataEvent.cs @@ -0,0 +1,23 @@ +using System; +using System.Net; + +namespace NetWorkHelper +{ + public delegate void ReceiveDataEventHandler(object sender, ReceiveDataEventArgs e); + + public class ReceiveDataEventArgs : EventArgs + { + public ReceiveDataEventArgs() { } + + public ReceiveDataEventArgs(byte[] buffer, IPEndPoint remoteIP) + : base() + { + Buffer = buffer; + RemoteIP = remoteIP; + } + + public byte[] Buffer { get; set; } + + public IPEndPoint RemoteIP { get; set; } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Event/RequestSendFileEvent.cs b/tongxin/NetWorkHelper/UDP/Event/RequestSendFileEvent.cs new file mode 100644 index 0000000..b6be322 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Event/RequestSendFileEvent.cs @@ -0,0 +1,35 @@ +using System.ComponentModel; +using System.Net; + +namespace NetWorkHelper +{ + public delegate void RequestSendFileEventHandler(object sender, RequestSendFileEventArgs e); + + public class RequestSendFileEventArgs : CancelEventArgs + { + public RequestSendFileEventArgs() + : base() + { + } + + public RequestSendFileEventArgs(TraFransfersFileStart traFransfersFileStart, IPEndPoint remoteIP) + : base() + { + TraFransfersFileStart = traFransfersFileStart; + RemoteIP = remoteIP; + } + + public RequestSendFileEventArgs(TraFransfersFileStart traFransfersFileStart, IPEndPoint remoteIP, bool cancel) + : base(cancel) + { + TraFransfersFileStart = traFransfersFileStart; + RemoteIP = remoteIP; + } + + public IPEndPoint RemoteIP { get; set; } + + public TraFransfersFileStart TraFransfersFileStart { get; set; } + + public string Path { get; set; } + } +} diff --git a/tongxin/NetWorkHelper/UDP/IDataCell.cs b/tongxin/NetWorkHelper/UDP/IDataCell.cs new file mode 100644 index 0000000..cb535ab --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/IDataCell.cs @@ -0,0 +1,12 @@ +namespace NetWorkHelper +{ + /// + /// 消息数据单元接口 + /// + public interface IDataCell + { + byte[] ToBuffer(); + + void FromBuffer(byte[] buffer); + } +} diff --git a/tongxin/NetWorkHelper/UDP/Receive/ReadFileObject.cs b/tongxin/NetWorkHelper/UDP/Receive/ReadFileObject.cs new file mode 100644 index 0000000..ab1fd23 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Receive/ReadFileObject.cs @@ -0,0 +1,16 @@ + +namespace NetWorkHelper +{ + internal class ReadFileObject + { + public ReadFileObject(int index, byte[] buffer) + { + Index = index; + Buffer = buffer; + } + + public int Index { get; set; } + + public byte[] Buffer { get; set; } + } +} diff --git a/tongxin/NetWorkHelper/UDP/Receive/ReceiveFileManager.cs b/tongxin/NetWorkHelper/UDP/Receive/ReceiveFileManager.cs new file mode 100644 index 0000000..1d6ff48 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Receive/ReceiveFileManager.cs @@ -0,0 +1,238 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Threading; + +namespace NetWorkHelper +{ + public class ReceiveFileManager : IDisposable + { + + #region Fields + private string _path; + private string _tempFileName; + private string _fullName; + private int _partSize; + private long _length; + private FileStream _fileStream; + private DateTime _lastReceiveTime; + private Timer _timer; + private int _interval = 5000; + private long _receivePartCount; + + private static object SyncLock = new object(); + private static readonly int ReceiveTimeout = 5000; + private static readonly string FileTemptName = ".tmp"; + + #endregion + + #region Constructors + + public ReceiveFileManager() { } + + public ReceiveFileManager(string md5, string path, string fileName, long partCount, int partSize, long length, IPEndPoint remoteIP) + { + MD5 = md5; + _path = path; + Name = fileName; + PartCount = partCount; + _partSize = partSize; + _length = length; + RemoteIP = remoteIP; + Create(); + } + + #endregion + + #region Events + + public event FileReceiveCompleteEventHandler ReceiveFileComplete; + + public event EventHandler ReceiveFileTimeout; + + #endregion + + #region Properties + + public string MD5 { get; } + + public long PartCount { get; } + + public string Name { get; } + + public string FileName + { + get + { + if (string.IsNullOrEmpty(_fullName)) + { + GetFileName(); + } + return _fullName; + } + } + + public object Tag { get; set; } + + public bool Success { get; private set; } + + public IPEndPoint RemoteIP { get; } + + public bool Completed + { + get { return PartCount == _receivePartCount; } + } + + private Stream FileStream { get; set; } + + private Dictionary ReceiveFilePartList { get; set; } + + private Timer Timer + { + get + { + if (_timer == null) + { + _timer = new Timer( + new TimerCallback(delegate (object obj) + { + TimeSpan ts = DateTime.Now - _lastReceiveTime; + if (ts.TotalMilliseconds > ReceiveTimeout) + { + _lastReceiveTime = DateTime.Now; + OnReceiveFileTimeout(EventArgs.Empty); + } + }), + null, + Timeout.Infinite, + _interval); + } + return _timer; + } + } + + #endregion + + #region Methods + + private void Create() + { + _tempFileName = string.Format("{0}\\{1}{2}", _path, Name, FileTemptName); + _fileStream = new FileStream(_tempFileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, _partSize * 10, true); + FileStream = Stream.Synchronized(_fileStream); + ReceiveFilePartList = new Dictionary(); + for (int i = 0; i < PartCount; i++) + { + ReceiveFilePartList.Add(i, false); + } + } + + public void Start() + { + _lastReceiveTime = DateTime.Now; + Timer.Change(0, _interval); + } + + public int GetNextReceiveIndex() + { + foreach (int index in ReceiveFilePartList.Keys) + { + if (ReceiveFilePartList[index] == false) + { + return index; + } + } + return -1; + } + + public int ReceiveBuffer(int index, byte[] buffer) + { + _lastReceiveTime = DateTime.Now; + if (ReceiveFilePartList[index]) + { + return 0; + } + else + { + lock (SyncLock) + { + ReceiveFilePartList[index] = true; + _receivePartCount++; + } + FileStream.Position = index * _partSize; + FileStream.BeginWrite(buffer, 0, buffer.Length, new AsyncCallback(EndWrite), _receivePartCount); + return buffer.Length; + } + } + + protected virtual void OnReceiveFileComplete(FileReceiveCompleteEventArgs e) + { + ReceiveFileComplete?.Invoke(this, e); + } + + protected virtual void OnReceiveFileTimeout(EventArgs e) + { + ReceiveFileTimeout?.Invoke(this, e); + } + + private void EndWrite(IAsyncResult result) + { + if (FileStream == null) + { + return; + } + + FileStream.EndWrite(result); + + long index = (long)result.AsyncState; + if (index == PartCount) + { + Dispose(); + File.Move(_tempFileName, FileName); + Success = MD5 == MD5Helper.CretaeMD5(FileName); + OnReceiveFileComplete(new FileReceiveCompleteEventArgs(Success)); + } + } + + private void GetFileName() + { + _fullName = string.Format("{0}\\{1}", _path, Name); + int nameIndex = 1; + int index = Name.LastIndexOf('.'); + while (File.Exists(_fullName)) + { + _fullName = string.Format("{0}\\{1}", _path, Name.Insert(index, nameIndex.ToString("_0"))); + nameIndex++; + } + } + + #endregion + + #region IDisposable 成员 + + public void Dispose() + { + if (_timer != null) + { + _timer.Dispose(); + _timer = null; + } + if (_fileStream != null) + { + FileStream.Flush(); + FileStream.Close(); + FileStream.Dispose(); + FileStream = null; + _fileStream = null; + } + if (ReceiveFilePartList != null) + { + ReceiveFilePartList.Clear(); + ReceiveFilePartList = null; + } + } + + #endregion + } +} diff --git a/tongxin/NetWorkHelper/UDP/Send/SendFileManager.cs b/tongxin/NetWorkHelper/UDP/Send/SendFileManager.cs new file mode 100644 index 0000000..bd76948 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/Send/SendFileManager.cs @@ -0,0 +1,152 @@ +using System; +using System.IO; + +namespace NetWorkHelper +{ + /// + /// 文件管理类 + /// + public class SendFileManager : IDisposable + { + #region 变量 + + private FileStream _fileStream; + + #endregion + + #region 构造函数 + + public SendFileManager(string fileName) + { + FileName = fileName; + Create(fileName); + } + + public SendFileManager(string fileName, int partSize) + { + FileName = fileName; + PartSize = partSize; + Create(fileName); + } + + #endregion + + #region 属性 + + public long PartCount { get; set; } + + public long Length { get; private set; } + + public int PartSize { get; } = 1024 * 20; + + public string FileName { get; } + + public string Name + { + get { return new FileInfo(FileName).Name; } + } + + public string MD5 { get; private set; } + + public object Tag { get; set; } + + internal Stream FileStream { get; private set; } + + #endregion + + #region 方法 + /// + /// 创建初始化文件管理类 + /// + /// 文件路径 + private void Create(string fileName) + { + _fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, PartSize * 10, true); + FileStream = Stream.Synchronized(_fileStream); + Length = _fileStream.Length; + PartCount = Length / PartSize; + if (Length % PartSize != 0) + { + PartCount++; + } + MD5 = MD5Helper.CretaeMD5(_fileStream); + } + /// + /// 读取文件 + /// + /// + public void Read(int index) + { + int size = PartSize; + if (Length - PartSize * index < PartSize) + { + size = (int)(Length - PartSize * index); + } + byte[] buffer = new byte[size]; + ReadFileObject obj = new ReadFileObject(index, buffer); + FileStream.Position = index * PartSize; + FileStream.BeginRead(buffer, 0, size, new AsyncCallback(EndRead), obj); + } + + /// + /// 结束读取文件 + /// + /// + private void EndRead(IAsyncResult result) + { + if (FileStream == null) + { + return; + } + int length = FileStream.EndRead(result); + ReadFileObject state = (ReadFileObject)result.AsyncState; + int index = state.Index; + byte[] buffer = state.Buffer; + ReadFileBufferEventArgs e = null; + if (length < PartSize) + { + byte[] realBuffer = new byte[length]; + Buffer.BlockCopy(buffer, 0, realBuffer, 0, length); + e = new ReadFileBufferEventArgs(index, realBuffer); + } + else + { + e = new ReadFileBufferEventArgs(index, buffer); + } + OnReadFileBuffer(e); + } + + #endregion + + #region 事件 + /// + /// 读取文件事件 + /// + public event ReadFileBufferEventHandler ReadFileBuffer; + /// + /// 读取文件方法 + /// + /// + protected void OnReadFileBuffer(ReadFileBufferEventArgs e) + { + ReadFileBuffer?.Invoke(this, e); + } + #endregion + + #region IDisposable 成员 + + public void Dispose() + { + if (_fileStream != null) + { + FileStream.Flush(); + FileStream.Close(); + FileStream.Dispose(); + FileStream = null; + _fileStream = null; + } + } + + #endregion + } +} diff --git a/tongxin/NetWorkHelper/UDP/SerializableClass/MsgCell.cs b/tongxin/NetWorkHelper/UDP/SerializableClass/MsgCell.cs new file mode 100644 index 0000000..327576e --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/SerializableClass/MsgCell.cs @@ -0,0 +1,65 @@ +using System; + +namespace NetWorkHelper +{ + /// + /// 消息单元类(可序列化) + /// + [Serializable] + public class MsgCell : IDataCell + { + /// + /// 消息标识 + /// + public int MessageId { get; set; } + + private object _data; + /// + /// 消息序列化数据 + /// + public object Data + { + get { return _data; } + set { _data = value; } + } + + #region 构造函数 + public MsgCell() { } + /// + /// 构造函数 + /// + /// 消息标识 + /// 序列化数据 + public MsgCell( + int messageId, + object data) + { + MessageId = messageId; + _data = data; + } + #endregion + /// + /// 将数据序列化成Byte[]数组 + /// + /// + public byte[] ToBuffer() + { + byte[] data = SerHelper.Serialize(_data); + byte[] id = BitConverter.GetBytes(MessageId); + + byte[] buffer = new byte[data.Length + id.Length]; + Buffer.BlockCopy(id, 0, buffer, 0, id.Length); + Buffer.BlockCopy(data, 0, buffer, id.Length, data.Length); + return buffer; + } + /// + /// 将Byte[]数组反序列化成数据结构 + /// + /// + public void FromBuffer(byte[] buffer) + { + MessageId = BitConverter.ToInt32(buffer, 0); + _data = SerHelper.Deserialize(buffer, 4); + } + } +} diff --git a/tongxin/NetWorkHelper/UDP/SerializableClass/MsgTypeCell.cs b/tongxin/NetWorkHelper/UDP/SerializableClass/MsgTypeCell.cs new file mode 100644 index 0000000..2a3aeb4 --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/SerializableClass/MsgTypeCell.cs @@ -0,0 +1,39 @@ +using System; + +namespace NetWorkHelper +{ + [Serializable] + public class MsgTypeCell + { + private MsgType _msgType; + private string _imageSuffix = ""; + private byte[] _bufferBytes; + + /// + /// 消息类型 + /// + public MsgType Msgtype + { + get { return _msgType; } + set { _msgType = value; } + } + /// + /// 图片后缀格式 + /// + public string ImageSuffix + { + get { return _imageSuffix; } + set { _imageSuffix = value; } + } + public byte[] BufferBytes + { + get { return _bufferBytes; } + set { _bufferBytes = value; } + } + public MsgTypeCell(MsgType msgType, byte[] buffer) + { + Msgtype = msgType; + BufferBytes = buffer; + } + } +} diff --git a/tongxin/NetWorkHelper/UDP/SerializableClass/ResponeTraFransfersFile.cs b/tongxin/NetWorkHelper/UDP/SerializableClass/ResponeTraFransfersFile.cs new file mode 100644 index 0000000..59fb5cc --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/SerializableClass/ResponeTraFransfersFile.cs @@ -0,0 +1,39 @@ +using System; + +namespace NetWorkHelper +{ + [Serializable] + public class ResponeTraFransfersFile + { + private string _md5; + private int _size; + private int _index; + + public ResponeTraFransfersFile() { } + + public ResponeTraFransfersFile(string md5, int size, int index) + { + _md5 = md5; + _size = size; + _index = index; + } + + public string MD5 + { + get { return _md5; } + set { _md5 = value; } + } + + public int Size + { + get { return _size; } + set { _size = value; } + } + + public int Index + { + get { return _index; } + set { _index = value; } + } + } +} diff --git a/tongxin/NetWorkHelper/UDP/UdpLibrary.cs b/tongxin/NetWorkHelper/UDP/UdpLibrary.cs new file mode 100644 index 0000000..11cba8e --- /dev/null +++ b/tongxin/NetWorkHelper/UDP/UdpLibrary.cs @@ -0,0 +1,201 @@ +using System; +using System.ComponentModel; +using System.Net; +using System.Net.Sockets; + +namespace NetWorkHelper +{ + public class UdpLibrary : IDisposable + { + #region 构造函数 + public UdpLibrary(int port) + { + Port = port; + } + public UdpLibrary() + { + //默认监听端口1234 + Port = 1234; + } + #endregion + + #region 变量 + private UdpClient _udpClient; + private bool _started; + #endregion + + #region 属性 + [Description("UDP监听端口")] + [Category("UDP服务端")] + public int Port { get; set; } = 1234; + + [Description("UDP客户端")] + [Category("UDP服务端")] + internal UdpClient UdpClient + { + get + { + if (_udpClient == null) + { + bool success = false; + while (!success) + { + try + { + _udpClient = new UdpClient(Port); + success = true; + } + catch (SocketException ex) + { + Port++; + if (Port > 65535) + { + success = true; + throw ex; + } + } + } + + uint IOC_IN = 0x80000000; + uint IOC_VENDOR = 0x18000000; + uint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12; + _udpClient.Client.IOControl((int)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, null); + } + return _udpClient; + } + } + #endregion + + #region 方法 + public void Start() + { + if (!_started) + { + _started = true; + ReceiveInternal(); + } + } + + public void Stop() + { + try + { + _started = false; + UdpClient.Close(); + _udpClient = null; + } + catch + { + } + } + + public void Send(IDataCell cell, IPEndPoint remoteIP) + { + byte[] buffer = cell.ToBuffer(); + SendInternal(buffer, remoteIP); + } + + public void Send(byte[] buffer, IPEndPoint remoteIP) + { + SendInternal(buffer, remoteIP); + } + + protected void SendInternal(byte[] buffer, IPEndPoint remoteIP) + { + if (!_started) + { + throw new ApplicationException("UDP Closed."); + } + try + { + UdpClient.BeginSend(buffer, buffer.Length, remoteIP, new AsyncCallback(SendCallback), null); + } + catch (SocketException ex) + { + throw ex; + } + } + + public bool IsStarted() + { + return _started; + } + protected void ReceiveInternal() + { + if (!_started) + { + return; + } + try + { + UdpClient.BeginReceive(new AsyncCallback(ReceiveCallback), null); + } + catch (SocketException ex) + { + //_started = false; + throw ex; + } + } + + void SendCallback(IAsyncResult result) + { + try + { + UdpClient.EndSend(result); + } + catch (SocketException ex) + { + throw ex; + } + } + + void ReceiveCallback(IAsyncResult result) + { + if (!_started) + { + return; + } + IPEndPoint remoteIP = new IPEndPoint(IPAddress.Any, 0); + byte[] buffer = null; + try + { + buffer = UdpClient.EndReceive(result, ref remoteIP); + } + catch (SocketException ex) + { + throw ex; + } + finally + { + ReceiveInternal(); + } + + OnReceiveData(new ReceiveDataEventArgs(buffer, remoteIP)); + } + #endregion + + #region IDisposable 成员 + + public void Dispose() + { + _started = false; + if (_udpClient != null) + { + _udpClient.Close(); + _udpClient = null; + } + } + + #endregion + + #region 事件 + public event ReceiveDataEventHandler ReceiveData; + [Description("UDP服务端接收数据事件")] + [Category("UDPServer事件")] + protected virtual void OnReceiveData(ReceiveDataEventArgs e) + { + ReceiveData?.Invoke(this, e); + } + #endregion + } +} diff --git a/tongxin/NetWorkHelper/bin/Debug/NetWorkHelper.dll b/tongxin/NetWorkHelper/bin/Debug/NetWorkHelper.dll new file mode 100644 index 0000000..2033eec Binary files /dev/null and b/tongxin/NetWorkHelper/bin/Debug/NetWorkHelper.dll differ diff --git a/tongxin/NetWorkHelper/bin/Debug/NetWorkHelper.pdb b/tongxin/NetWorkHelper/bin/Debug/NetWorkHelper.pdb new file mode 100644 index 0000000..982d094 Binary files /dev/null and b/tongxin/NetWorkHelper/bin/Debug/NetWorkHelper.pdb differ diff --git a/tongxin/NetWorkHelper/bin/Debug/TCP/ITcpClient.Designer.cs b/tongxin/NetWorkHelper/bin/Debug/TCP/ITcpClient.Designer.cs new file mode 100644 index 0000000..7fb78dc --- /dev/null +++ b/tongxin/NetWorkHelper/bin/Debug/TCP/ITcpClient.Designer.cs @@ -0,0 +1,36 @@ +namespace NetWorkHelper.TCP +{ + partial class ITcpClient + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/tongxin/NetWorkHelper/bin/Debug/TCP/ITcpClient.cs b/tongxin/NetWorkHelper/bin/Debug/TCP/ITcpClient.cs new file mode 100644 index 0000000..1338fba --- /dev/null +++ b/tongxin/NetWorkHelper/bin/Debug/TCP/ITcpClient.cs @@ -0,0 +1,624 @@ +using NetWorkHelper.ICommond; +using NetWorkHelper.IModels; +using System; +using System.ComponentModel; +using System.Net; +using System.Net.Sockets; +using System.Threading; + +namespace NetWorkHelper.TCP +{ + public partial class ITcpClient : Component + { + + + //#region 读取ini文件 + //[DllImport("kernel32")] + //private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); + + + ///// + ///// 读出INI文件 + ///// + ///// 项目名称(如 [TypeName] ) + ///// 键 + //public string IniReadValue(string Section, string Key) + //{ + // StringBuilder temp = new StringBuilder(500); + // int i = GetPrivateProfileString(Section, Key, "", temp, 500, System.AppDomain.CurrentDomain.BaseDirectory + "MESConfig.ini"); + + // return temp.ToString(); + //} + + static int connecttimeout = 4000; + static int receivetimeout = 2000; + //static int sleeptime; + static int timeoutsend = 3; + //public void ReadINI() + //{ + // //string dialog; + // //dialog = System.AppDomain.CurrentDomain.BaseDirectory + "MESConfig.ini"; + // //ControlINI mesconfig = new ControlINI(dialog); + + // //连接设置 + // connecttimeout = Convert.ToInt32(IniReadValue("MESConfig", "connectTimeout")); ; + // receivetimeout = Convert.ToInt32(IniReadValue("MESConfig", "receiveTimeout")); + // _reConnectTime = Convert.ToInt32(IniReadValue("MESConfig", "sleepTime")); + + // timeoutsend = Convert.ToInt32(IniReadValue("MESConfig", "timeoutSend"))+1; + + + + //} + //#endregion + + + + + #region 构造函数 + public ITcpClient() + { + //ReadINI(); + InitializeComponent(); + } + + public ITcpClient(IContainer container) + { + container.Add(this); + + InitializeComponent(); + } + #endregion + + #region 变量 + + public IClient Client = null; + private Thread _startThread = null; + private int _reConnectCount = 0;//重连计数 + private int _maxConnectCount => timeoutsend; + private ConncetType _conncetType = ConncetType.Conncet; + private bool _isReconnect = true;//是否开启断开重连 + private int _reConnectTime;//重连间隔时间 + private bool _isStart = false;// 是否启动 + private System.Timers.Timer _timer = new System.Timers.Timer(); // 连接后两秒未成功重连 + + //bool timeoutreconnected=true;//连接超时的重连 + //bool datareconnected = true;//接收不到心跳包的重连 + + #endregion + + #region 属性 + /// + /// 服务端IP + /// + private string _serverip = "127.0.0.1"; + [Description("服务端IP")] + [Category("TCP客户端")] + public string ServerIp + { + set { _serverip = value; } + get { return _serverip; } + } + /// + /// 服务端监听端口 + /// + private int _serverport = 5000; + [Description("服务端监听端口")] + [Category("TCP客户端")] + public int ServerPort + { + set { _serverport = value; } + get { return _serverport; } + } + + /// + /// 网络端点 + /// + private IPEndPoint _ipEndPoint = null; + [Description("网络端点,IP+PORT")] + [Category("TCP客户端")] + internal IPEndPoint IpEndPoint + { + get + { + try + { + IPAddress ipAddress = null; + ipAddress = string.IsNullOrEmpty(ServerIp) + ? IPAddress.Any + : IPAddress.Parse(CommonMethod.HostnameToIp(ServerIp)); + + _ipEndPoint = new IPEndPoint(ipAddress, ServerPort); + } + catch + { + } + return _ipEndPoint; + } + } + + /// + /// 是否重连 + /// + [Description("是否重连")] + [Category("TCP客户端")] + public bool IsReconnection + { + set { _isReconnect = value; } + get { return _isReconnect; } + } + + /// + /// 设置断开重连时间间隔单位(毫秒)(默认3000毫秒) + /// + [Description("设置断开重连时间间隔单位(毫秒)(默认3000毫秒)")] + [Category("TCP客户端")] + public int ReConnectionTime + { + get { return _reConnectTime; } + set { _reConnectTime = value; } + } + [Description("设置断开重连时间间隔单位(毫秒)(默认3000毫秒)")] + [Category("TCP客户端"), Browsable(false)] + public bool IsStart + { + get { return _isStart; } + set { _isStart = value; } + } + #endregion + + #region 启动停止方法 + + private readonly object _threadLock = new object(); + public void StartConnect() + { + if (IsStart) + return; + lock (_threadLock) + { + if (_startThread == null || !_startThread.IsAlive) + { + _startThread = new Thread(StartThread); + _startThread.IsBackground = true; + _startThread.Start(); + } + } + } + + /// + /// 启动客户端基础的一个线程 + /// + private void StartThread() + { + if (_conncetType == ConncetType.ReConncet && IsReconnection && !IsStart) //如果是重连的延迟N秒 + { + Thread.Sleep(ReConnectionTime); + + if (IsReconnection) + { + TcpClientStateInfo(string.Format("正在重连..."), SocketState.Reconnection); + } + try + { + + _timer.Interval = connecttimeout; + _timer.Elapsed += Timer_Elapsed; + _timer.AutoReset = false; + _timer.Start(); + + + Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + socket.ReceiveTimeout = receivetimeout; + socket.SendTimeout = 1000; + socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, true); + socket.BeginConnect(IpEndPoint, new AsyncCallback(AcceptCallback), socket); + //timeoutreconnected = true;//连接超时的重连 + //datareconnected = true;//接收不到心跳包的重连 + + } + catch (Exception ex) + { + _timer.Stop(); + TcpClientErrorMsg(string.Format("连接服务器失败,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + if (IsReconnection) + { + Reconnect(); + } + } + } + else if (!IsStart) + { + if (IsReconnection) + { + TcpClientStateInfo("正在连接服务器... ...", SocketState.Connecting); + try + { + + _timer.Interval = connecttimeout; + _timer.Elapsed += Timer_Elapsed; + _timer.AutoReset = false; + _timer.Start(); + + + Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + socket.ReceiveTimeout = receivetimeout; + socket.SendTimeout = 1000; + socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, true); + socket.BeginConnect(IpEndPoint, new AsyncCallback(AcceptCallback), socket); + //timeoutreconnected = true;//连接超时的重连 + //datareconnected = true;//接收不到心跳包的重连 + + } + catch (Exception ex) + { + _timer.Stop(); + TcpClientErrorMsg(string.Format("连接服务器失败,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + if (IsReconnection) + { + Reconnect(); + } + } + } + } + + + } + + + //连接超时则重新连接 + private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + if (IsReconnection) + { + //datareconnected = false;//接收不到心跳包的重连 + TcpClientErrorMsg(string.Format("连接服务器失败")); + + //if (Client != null) + //{ + // ShutdownClient(Client); + // Client.WorkSocket.Close(); + //} + Reconnect(); + + //reconnected = false; + } + } + + + + /// + /// 当连接服务器之后的回调函数 + /// + /// TcpClient + private void AcceptCallback(IAsyncResult ar) + { + _timer.Stop(); + + try + { + IsStart = true; + + Socket socket = (Socket)ar.AsyncState; + socket.EndConnect(ar); + + Client = new IClient(socket); + Client.WorkSocket.BeginReceive(Client.BufferInfo.ReceivedBuffer, 0, Client.BufferInfo.ReceivedBuffer.Length, 0, new AsyncCallback(ReadCallback), Client); + + _conncetType = ConncetType.Conncet; + TcpClientStateInfo(string.Format("已连接服务器"), SocketState.Connected); + _reConnectCount = 0; + //timeoutreconnected = false;//连接超时的重连 + //datareconnected = false;//接收不到心跳包的重连 + + + } + catch (SocketException ex) + { + IsStart = false; + string msg = ex.Message; + if (ex.NativeErrorCode.Equals(10060)) + { + //无法连接目标主机 + msg = string.Format("{0} 无法连接: error code {1}!", "", ex.NativeErrorCode); + } + else if (ex.NativeErrorCode.Equals(10061)) + { + msg = string.Format("{0} 主动拒绝正在重连: error code {1}!", "", ex.NativeErrorCode); + } + else if (ex.NativeErrorCode.Equals(10053)) + { + //读写时主机断开 + msg = string.Format("{0} 主动断开连接: error code {1}! ", "", ex.NativeErrorCode); + } + else + { + //其他错误 + msg = string.Format("Disconnected: error code {0}!", ex.NativeErrorCode); + } + + if (IsReconnection) + { + TcpClientErrorMsg(string.Format("连接服务器失败,错误原因:{0}", msg)); + + Reconnect(); + } + } + catch (Exception ex) + { + } + } + #endregion + + #region 登录篇 + /// + /// 重连模块 + /// + private void Reconnect() + { + if (Client != null) + { + ShutdownClient(Client); + Client?.WorkSocket?.Close(); + Client = null; + } + + if (_conncetType == ConncetType.Conncet) + { + TcpClientStateInfo(string.Format("已断开服务器{0}", IsReconnection ? ",准备重连" : ""), SocketState.Disconnect); + } + + if (!IsReconnection) + { + return; + } + + _reConnectCount++;//每重连一次重连的次数加1 + + + if (_conncetType == ConncetType.Conncet) + { + _conncetType = ConncetType.ReConncet; + + //CommonMethod.EventInvoket(() => { ReconnectionStart(); }); + } + + _isStart = false; + + if (_startThread != null) + { + try + { + // 检查线程状态,避免重复启动 + if (_startThread.IsAlive) + { + // 给线程一个机会正常结束 + if (!_startThread.Join(500)) // 等待500毫秒 + { + try + { + _startThread.Abort(); // 强制终止 + } + catch (ThreadStateException) + { + // 线程可能已经终止,忽略此异常 + } + } + } + } + catch (Exception ex) + { + // 记录异常但不阻止重连 + Console.WriteLine($"清理线程时异常: {ex.Message}"); + } + finally + { + _startThread = null; // 确保设置为null + } + } + + if (_reConnectCount < _maxConnectCount && IsReconnection) + { + StartConnect(); + } + else + { + _timer.Stop(); + StopConnect(); + this.IsReconnection = false; + _reConnectCount = 0; + TcpClientStateInfo(string.Format("超过最大重连数,已断开服务器连接"), SocketState.Disconnect); + } + + } + #endregion + + #region 发送数据 + public void SendData(byte[] data) + { + try + { + if (data == null || data.Length == 0) + { + return; + } + + if (Client != null && Client.WorkSocket != null && Client.WorkSocket.Connected) + { + //异步发送数据 + //cModel.ClientSocket.Send(data); + Client.WorkSocket.BeginSend(data, 0, data.Length, 0, new AsyncCallback(SendCallback), Client); + //timeoutreconnected = false;//连接超时的重连 + //datareconnected = true;//接收不到心跳包的重连 + } + } + catch (SocketException ex) + { + TcpClientErrorMsg(string.Format("向服务端发送数据时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + } + } + + public bool IsConnected + { + get + { + try + { + return Client != null && + Client.WorkSocket != null && + Client.WorkSocket.Connected; + } + catch + { + return false; + } + } + } + + /// + /// 发送完数据之后的回调函数 + /// + /// Clicent + private void SendCallback(IAsyncResult ar) + { + IClient iClient = (IClient)ar.AsyncState; + if (iClient == null) + return; + Socket handler = iClient.WorkSocket; + try + { + int bytesSent = handler.EndSend(ar); + } + catch (Exception ex) + { + TcpClientErrorMsg(string.Format("发送数据后回调时发生错误,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + } + } + #endregion + + #region 接收数据 + /// + /// 当接收到数据之后的回调函数 + /// + /// + private void ReadCallback(IAsyncResult ar) + { + if (Client == null || !_isStart) + return; + Socket handler = Client.WorkSocket; + try + { + int bytesRead = handler.EndReceive(ar); + if (bytesRead > 0 && bytesRead <= Client.BufferInfo.ReceivedBuffer.Length) + { + byte[] bytes = new byte[bytesRead]; + Array.Copy(Client.BufferInfo.ReceivedBuffer, 0, bytes, 0, bytesRead); + TcpClientRecevice(bytes); + handler.BeginReceive(Client.BufferInfo.ReceivedBuffer, 0, Client.BufferInfo.ReceivedBuffer.Length, + 0, new AsyncCallback(ReadCallback), Client); + + } + else + { + if (IsReconnection) + { + Reconnect(); + } + } + } + catch (Exception ex) + { + //if (datareconnected) + //{ + // timeoutreconnected = false;//连接超时的重连 + ////IsStart = false; + StopConnect(); + + TcpClientErrorMsg(string.Format("接收数据失败,错误原因:{0},行号{1}", ex.Message, ex.StackTrace)); + + + Reconnect(); + + //} + + } + } + #endregion + + #region 断开篇 + /// + /// 关闭相连的scoket以及关联的StateObject,释放所有的资源 + /// + public void StopConnect() + { + IsStart = false; + if (Client != null) + { + var workSocket = Client.WorkSocket; // 提前保存引用 + ShutdownClient(Client); + workSocket?.Close(); + //if (Client.WorkSocket != null) + //{ + // Client.WorkSocket.Close(); + // //Client.WorkSocket?.Dispose(); + //} + + } + _conncetType = ConncetType.Conncet; + _reConnectCount = 0;//前面三个初始化 + } + public void ShutdownClient(IClient iClient) + { + try + { + iClient.WorkSocket.Shutdown(SocketShutdown.Both); + } + catch + { + } + } + #endregion + + #region 事件 + #region OnRecevice接收数据事件 + [Description("接收数据事件")] + [Category("TcpClient事件")] + public event EventHandler OnRecevice; + protected virtual void TcpClientRecevice(byte[] data) + { + if (OnRecevice != null) + CommonMethod.EventInvoket(() => { OnRecevice(this, new TcpClientReceviceEventArgs(data)); }); + + } + #endregion + + #region OnErrorMsg返回错误消息事件 + [Description("返回错误消息事件")] + [Category("TcpClient事件")] + public event EventHandler OnErrorMsg; + protected virtual void TcpClientErrorMsg(string msg) + { + if (OnErrorMsg != null) + CommonMethod.EventInvoket(() => { OnErrorMsg(this, new TcpClientErrorEventArgs(msg)); }); + } + #endregion + + #region OnStateInfo连接状态改变时返回连接状态事件 + [Description("连接状态改变时返回连接状态事件")] + [Category("TcpClient事件")] + public event EventHandler OnStateInfo; + protected virtual void TcpClientStateInfo(string msg, SocketState state) + { + if (OnStateInfo != null) + CommonMethod.EventInvoket(() => { OnStateInfo(this, new TcpClientStateEventArgs(msg, state)); }); + } + #endregion + #endregion + } + + public enum ConncetType + { + Conncet, + ReConncet, + DisConncet + } +} diff --git a/tongxin/NetWorkHelper/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/tongxin/NetWorkHelper/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs new file mode 100644 index 0000000..15efebf --- /dev/null +++ b/tongxin/NetWorkHelper/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] diff --git a/tongxin/NetWorkHelper/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/tongxin/NetWorkHelper/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000..35c3ce8 Binary files /dev/null and b/tongxin/NetWorkHelper/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.AxUdpClient.resources b/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.AxUdpClient.resources new file mode 100644 index 0000000..6c05a97 Binary files /dev/null and b/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.AxUdpClient.resources differ diff --git a/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.csproj.AssemblyReference.cache b/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.csproj.AssemblyReference.cache new file mode 100644 index 0000000..ca25f48 Binary files /dev/null and b/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.csproj.AssemblyReference.cache differ diff --git a/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.csproj.CoreCompileInputs.cache b/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..8b89bdd --- /dev/null +++ b/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +fd1470a5ec7772d60dcf67497416fa5a98dbb5cca52c0adfcc1db2697f2a8034 diff --git a/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.csproj.FileListAbsolute.txt b/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..c05982e --- /dev/null +++ b/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.csproj.FileListAbsolute.txt @@ -0,0 +1,159 @@ +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\28-双通道\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +C:\Users\Administrator\Desktop\备份\LL-28_guanghongshuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +C:\Users\Administrator\Desktop\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +D:\上位机\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +D:\上位机\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +D:\上位机\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +D:\上位机\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +D:\上位机\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +D:\上位机\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +D:\上位机\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +D:\上位机\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +D:\上位机\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +D:\上位机\备份\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +E:\备份\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +E:\备份\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +E:\备份\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +E:\备份\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +E:\备份\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +E:\备份\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +E:\备份\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +E:\备份\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +E:\备份\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +E:\备份\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\上位机源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_shuangtongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\28双通道\0731出差源码\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\耕德\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\LL-28_sitongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\LL-28\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华勤\华贝LL-28\正负压\单个\USB扫码枪版本\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.cs +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\TCP\ITcpClient.Designer.cs +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\tongxin\NetWorkHelper\bin\Debug\NetWorkHelper.pdb +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.AssemblyReference.cache +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.AxUdpClient.resources +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.GenerateResource.cache +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.csproj.CoreCompileInputs.cache +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.dll +D:\桌面\莫禧亮\华贝\差压28\huabei4tongdao\tongxin\NetWorkHelper\obj\Debug\NetWorkHelper.pdb diff --git a/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.csproj.GenerateResource.cache b/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.csproj.GenerateResource.cache new file mode 100644 index 0000000..57e2a22 Binary files /dev/null and b/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.csproj.GenerateResource.cache differ diff --git a/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.dll b/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.dll new file mode 100644 index 0000000..2033eec Binary files /dev/null and b/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.dll differ diff --git a/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.pdb b/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.pdb new file mode 100644 index 0000000..982d094 Binary files /dev/null and b/tongxin/NetWorkHelper/obj/Debug/NetWorkHelper.pdb differ diff --git a/tongxin/NetWorkHelper/packages.config b/tongxin/NetWorkHelper/packages.config new file mode 100644 index 0000000..dd34cff --- /dev/null +++ b/tongxin/NetWorkHelper/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/tongxin/Socket.Client.sln b/tongxin/Socket.Client.sln new file mode 100644 index 0000000..d8ab833 --- /dev/null +++ b/tongxin/Socket.Client.sln @@ -0,0 +1,51 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29905.134 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetWorkHelper", "NetWorkHelper\NetWorkHelper.csproj", "{FB7970FD-F699-4093-83D0-509501B7863C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Socket.Client", "Socket.Client\Socket.Client.csproj", "{9BADF8D4-7FEF-4AB9-94D6-456D5AEEB204}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|x64.ActiveCfg = Debug|x64 + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|x64.Build.0 = Debug|x64 + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|x86.ActiveCfg = Debug|x86 + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|x86.Build.0 = Debug|x86 + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|Any CPU.Build.0 = Release|Any CPU + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|x64.ActiveCfg = Release|x64 + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|x64.Build.0 = Release|x64 + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|x86.ActiveCfg = Release|x86 + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|x86.Build.0 = Release|x86 + {9BADF8D4-7FEF-4AB9-94D6-456D5AEEB204}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9BADF8D4-7FEF-4AB9-94D6-456D5AEEB204}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9BADF8D4-7FEF-4AB9-94D6-456D5AEEB204}.Debug|x64.ActiveCfg = Debug|Any CPU + {9BADF8D4-7FEF-4AB9-94D6-456D5AEEB204}.Debug|x64.Build.0 = Debug|Any CPU + {9BADF8D4-7FEF-4AB9-94D6-456D5AEEB204}.Debug|x86.ActiveCfg = Debug|Any CPU + {9BADF8D4-7FEF-4AB9-94D6-456D5AEEB204}.Debug|x86.Build.0 = Debug|Any CPU + {9BADF8D4-7FEF-4AB9-94D6-456D5AEEB204}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9BADF8D4-7FEF-4AB9-94D6-456D5AEEB204}.Release|Any CPU.Build.0 = Release|Any CPU + {9BADF8D4-7FEF-4AB9-94D6-456D5AEEB204}.Release|x64.ActiveCfg = Release|Any CPU + {9BADF8D4-7FEF-4AB9-94D6-456D5AEEB204}.Release|x64.Build.0 = Release|Any CPU + {9BADF8D4-7FEF-4AB9-94D6-456D5AEEB204}.Release|x86.ActiveCfg = Release|Any CPU + {9BADF8D4-7FEF-4AB9-94D6-456D5AEEB204}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8A10C8CA-1D64-4CD5-B7E3-861FA7018DF0} + EndGlobalSection +EndGlobal diff --git a/tongxin/Socket.Client/App.config b/tongxin/Socket.Client/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/tongxin/Socket.Client/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/tongxin/Socket.Client/FrmClient.Designer.cs b/tongxin/Socket.Client/FrmClient.Designer.cs new file mode 100644 index 0000000..96905f5 --- /dev/null +++ b/tongxin/Socket.Client/FrmClient.Designer.cs @@ -0,0 +1,287 @@ +namespace Client +{ + partial class FrmClient + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.txtServerPort = new System.Windows.Forms.TextBox(); + this.txtServerIp = new System.Windows.Forms.TextBox(); + this.btnConnect = new System.Windows.Forms.Button(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.txtInterval = new System.Windows.Forms.TextBox(); + this.chBoxIsHeartCheck = new System.Windows.Forms.CheckBox(); + this.label3 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.txtReceviceData = new System.Windows.Forms.RichTextBox(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.txtSendData = new System.Windows.Forms.TextBox(); + this.btnSendData = new System.Windows.Forms.Button(); + this.panel2 = new System.Windows.Forms.Panel(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.txtMessage = new System.Windows.Forms.RichTextBox(); + this.groupBox3.SuspendLayout(); + this.panel1.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.panel2.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.SuspendLayout(); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(38, 98); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(77, 12); + this.label5.TabIndex = 38; + this.label5.Text = "服务器端口:"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(50, 52); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(65, 12); + this.label6.TabIndex = 37; + this.label6.Text = "服务器IP:"; + // + // txtServerPort + // + this.txtServerPort.Location = new System.Drawing.Point(121, 94); + this.txtServerPort.Name = "txtServerPort"; + this.txtServerPort.Size = new System.Drawing.Size(202, 21); + this.txtServerPort.TabIndex = 1; + this.txtServerPort.Text = "7001"; + // + // txtServerIp + // + this.txtServerIp.Location = new System.Drawing.Point(121, 48); + this.txtServerIp.Name = "txtServerIp"; + this.txtServerIp.Size = new System.Drawing.Size(202, 21); + this.txtServerIp.TabIndex = 0; + this.txtServerIp.Text = "192.168.1.5"; + // + // btnConnect + // + this.btnConnect.Location = new System.Drawing.Point(127, 187); + this.btnConnect.Name = "btnConnect"; + this.btnConnect.Size = new System.Drawing.Size(106, 33); + this.btnConnect.TabIndex = 2; + this.btnConnect.Text = "连接"; + this.btnConnect.UseVisualStyleBackColor = true; + this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click); + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.txtInterval); + this.groupBox3.Controls.Add(this.chBoxIsHeartCheck); + this.groupBox3.Controls.Add(this.label3); + this.groupBox3.Controls.Add(this.label5); + this.groupBox3.Controls.Add(this.label6); + this.groupBox3.Controls.Add(this.txtServerPort); + this.groupBox3.Controls.Add(this.txtServerIp); + this.groupBox3.Controls.Add(this.btnConnect); + this.groupBox3.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox3.Location = new System.Drawing.Point(0, 0); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(360, 258); + this.groupBox3.TabIndex = 68; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "客户端参数设置"; + // + // txtInterval + // + this.txtInterval.Location = new System.Drawing.Point(288, 147); + this.txtInterval.Name = "txtInterval"; + this.txtInterval.Size = new System.Drawing.Size(35, 21); + this.txtInterval.TabIndex = 41; + this.txtInterval.Text = "40"; + // + // chBoxIsHeartCheck + // + this.chBoxIsHeartCheck.AutoSize = true; + this.chBoxIsHeartCheck.Checked = true; + this.chBoxIsHeartCheck.CheckState = System.Windows.Forms.CheckState.Checked; + this.chBoxIsHeartCheck.Location = new System.Drawing.Point(121, 149); + this.chBoxIsHeartCheck.Name = "chBoxIsHeartCheck"; + this.chBoxIsHeartCheck.Size = new System.Drawing.Size(72, 16); + this.chBoxIsHeartCheck.TabIndex = 39; + this.chBoxIsHeartCheck.Text = "心跳检测"; + this.chBoxIsHeartCheck.UseVisualStyleBackColor = true; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(219, 151); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(65, 12); + this.label3.TabIndex = 40; + this.label3.Text = "间隔(秒):"; + // + // panel1 + // + this.panel1.Controls.Add(this.groupBox1); + this.panel1.Controls.Add(this.groupBox2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(370, 10); + this.panel1.Name = "panel1"; + this.panel1.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.panel1.Size = new System.Drawing.Size(616, 690); + this.panel1.TabIndex = 73; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.txtReceviceData); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox1.Location = new System.Drawing.Point(10, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(606, 620); + this.groupBox1.TabIndex = 2; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "已接收数据"; + // + // txtReceviceData + // + this.txtReceviceData.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtReceviceData.Location = new System.Drawing.Point(3, 17); + this.txtReceviceData.Name = "txtReceviceData"; + this.txtReceviceData.ReadOnly = true; + this.txtReceviceData.Size = new System.Drawing.Size(600, 600); + this.txtReceviceData.TabIndex = 100; + this.txtReceviceData.Text = ""; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.txtSendData); + this.groupBox2.Controls.Add(this.btnSendData); + this.groupBox2.Dock = System.Windows.Forms.DockStyle.Bottom; + this.groupBox2.Location = new System.Drawing.Point(10, 620); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(606, 70); + this.groupBox2.TabIndex = 3; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "发送数据"; + // + // txtSendData + // + this.txtSendData.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtSendData.Location = new System.Drawing.Point(3, 17); + this.txtSendData.Multiline = true; + this.txtSendData.Name = "txtSendData"; + this.txtSendData.Size = new System.Drawing.Size(525, 50); + this.txtSendData.TabIndex = 0; + // + // btnSendData + // + this.btnSendData.Dock = System.Windows.Forms.DockStyle.Right; + this.btnSendData.Location = new System.Drawing.Point(528, 17); + this.btnSendData.Name = "btnSendData"; + this.btnSendData.Size = new System.Drawing.Size(75, 50); + this.btnSendData.TabIndex = 1; + this.btnSendData.Text = "发送数据"; + this.btnSendData.UseVisualStyleBackColor = true; + this.btnSendData.Click += new System.EventHandler(this.btnSendData_Click); + // + // panel2 + // + this.panel2.Controls.Add(this.groupBox4); + this.panel2.Controls.Add(this.groupBox3); + this.panel2.Dock = System.Windows.Forms.DockStyle.Left; + this.panel2.Location = new System.Drawing.Point(10, 10); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(360, 690); + this.panel2.TabIndex = 74; + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.txtMessage); + this.groupBox4.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox4.Location = new System.Drawing.Point(0, 258); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(360, 432); + this.groupBox4.TabIndex = 69; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "消息"; + // + // txtMessage + // + this.txtMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtMessage.Location = new System.Drawing.Point(3, 17); + this.txtMessage.Name = "txtMessage"; + this.txtMessage.ReadOnly = true; + this.txtMessage.Size = new System.Drawing.Size(354, 412); + this.txtMessage.TabIndex = 101; + this.txtMessage.Text = ""; + // + // FrmClient + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(996, 710); + this.Controls.Add(this.panel1); + this.Controls.Add(this.panel2); + this.Name = "FrmClient"; + this.Padding = new System.Windows.Forms.Padding(10); + this.Text = "主窗体"; + this.Load += new System.EventHandler(this.FrmClient_Load); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.panel1.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.panel2.ResumeLayout(false); + this.groupBox4.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox txtServerPort; + private System.Windows.Forms.TextBox txtServerIp; + private System.Windows.Forms.Button btnConnect; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RichTextBox txtReceviceData; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.TextBox txtSendData; + private System.Windows.Forms.Button btnSendData; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.RichTextBox txtMessage; + private System.Windows.Forms.TextBox txtInterval; + private System.Windows.Forms.CheckBox chBoxIsHeartCheck; + private System.Windows.Forms.Label label3; + } +} + diff --git a/tongxin/Socket.Client/FrmClient.cs b/tongxin/Socket.Client/FrmClient.cs new file mode 100644 index 0000000..b698499 --- /dev/null +++ b/tongxin/Socket.Client/FrmClient.cs @@ -0,0 +1,171 @@ +using NetWorkHelper; +using NetWorkHelper.TCP; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Client +{ + public partial class FrmClient : Form + { + /// + /// 连接状态 + /// + SocketState _connectState { get; set; } + + /// + /// 连接对象 + /// + ITcpClient _client { get; set; } + + System.Timers.Timer _timer { get; set; } + + System.Timers.Timer _timerPone { get; set; } + + private const string pingPong = "客户端心跳包"; + + + public FrmClient() + { + InitializeComponent(); + _timerPone = new System.Timers.Timer(); + } + + private void FrmClient_Load(object sender, EventArgs e) + { + _client = new ITcpClient(); + _client.IsReconnection = true; + + _client.OnStateInfo += Client_OnStateInfo; + _client.OnRecevice += Client_OnRecevice; + _client.OnErrorMsg += Client_OnErrorMsg; + _timerPone.Elapsed += CloseConnect; + _timerPone.Interval = 2000; + _timerPone.AutoReset = false; + + txtSendData.Focus(); + } + + private void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + SendData("客户端心跳包:" + pingPong); + _timerPone.Start(); + } + + /// + /// 连接按钮事件 + /// + private void btnConnect_Click(object sender, EventArgs e) + { + if (!_client.IsStart) + { + if (chBoxIsHeartCheck.Checked) + { + if (string.IsNullOrEmpty(txtInterval.Text.Trim())) + { + MessageBox.Show("心跳间隔不能为空!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + int interval = int.Parse(txtInterval.Text.Trim()); + + _timer = new System.Timers.Timer(); + _timer.Interval = 1000 * interval; + _timer.Elapsed += _timer_Elapsed; + _timer.Start(); + } + + _client.ServerIp = txtServerIp.Text.Trim(); + _client.ServerPort = int.Parse(txtServerPort.Text.Trim()); + + _client.StartConnect(); + } + } + + /// + /// 连接错误 + /// + private void Client_OnErrorMsg(object sender, NetWorkHelper.ICommond.TcpClientErrorEventArgs e) + { + txtMessage.AppendText(e.ErrorMsg + Environment.NewLine); + } + + /// + /// 接收数据 + /// + private void Client_OnRecevice(object sender, NetWorkHelper.ICommond.TcpClientReceviceEventArgs e) + { + string receviceData = Encoding.Default.GetString(e.Data); + + if (receviceData == pingPong) + { + _timerPone.Stop(); + } + else + { + txtReceviceData.AppendText(receviceData + Environment.NewLine); + } + } + + /// + /// 连接状态 + /// + private void Client_OnStateInfo(object sender, NetWorkHelper.ICommond.TcpClientStateEventArgs e) + { + _connectState = e.State; + + txtMessage.AppendText(e.StateInfo + Environment.NewLine); + } + + /// + /// 发送数据 + /// + private void btnSendData_Click(object sender, EventArgs e) + { + SendData(txtSendData.Text.Trim()); + } + + void SendData(string data) + { + byte[] sendData = Encoding.Default.GetBytes(data); + if (this.InvokeRequired) + { + this.Invoke((Action)delegate () + { + _client.SendData(sendData); + txtSendData.Text = string.Empty; + }); + } + else + { + _client.SendData(sendData); + txtSendData.Text = string.Empty; + } + } + + /// + /// 关闭连接 + /// + private void ClientClose_Click(object sender, EventArgs e) + { + if (_client.IsStart) + { + _client.StopConnect(); + _client.Dispose(); + } + } + + private void CloseConnect(object body, EventArgs e) + { + + _client.StopConnect(); + _client.StartConnect(); + } + } +} diff --git a/tongxin/Socket.Client/FrmClient.resx b/tongxin/Socket.Client/FrmClient.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/tongxin/Socket.Client/FrmClient.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/tongxin/Socket.Client/Program.cs b/tongxin/Socket.Client/Program.cs new file mode 100644 index 0000000..fe5f8cf --- /dev/null +++ b/tongxin/Socket.Client/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Client +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new FrmClient()); + } + } +} diff --git a/tongxin/Socket.Client/Properties/AssemblyInfo.cs b/tongxin/Socket.Client/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9b0d362 --- /dev/null +++ b/tongxin/Socket.Client/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("Client")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Client")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("9badf8d4-7fef-4ab9-94d6-456d5aeeb204")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/tongxin/Socket.Client/Properties/Resources.Designer.cs b/tongxin/Socket.Client/Properties/Resources.Designer.cs new file mode 100644 index 0000000..083f925 --- /dev/null +++ b/tongxin/Socket.Client/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace Client.Properties +{ + + + /// + /// 强类型资源类,用于查找本地化字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// 返回此类使用的缓存 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Client.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 覆盖当前线程的 CurrentUICulture 属性 + /// 使用此强类型的资源类的资源查找。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/tongxin/Socket.Client/Properties/Resources.resx b/tongxin/Socket.Client/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/tongxin/Socket.Client/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/tongxin/Socket.Client/Properties/Settings.Designer.cs b/tongxin/Socket.Client/Properties/Settings.Designer.cs new file mode 100644 index 0000000..6ec15e6 --- /dev/null +++ b/tongxin/Socket.Client/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Client.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/tongxin/Socket.Client/Properties/Settings.settings b/tongxin/Socket.Client/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/tongxin/Socket.Client/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/tongxin/Socket.Client/Socket.Client.csproj b/tongxin/Socket.Client/Socket.Client.csproj new file mode 100644 index 0000000..9b7f320 --- /dev/null +++ b/tongxin/Socket.Client/Socket.Client.csproj @@ -0,0 +1,89 @@ + + + + + Debug + AnyCPU + {9BADF8D4-7FEF-4AB9-94D6-456D5AEEB204} + WinExe + Client + Client + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + Form + + + FrmClient.cs + + + + + FrmClient.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + {fb7970fd-f699-4093-83d0-509501b7863c} + NetWorkHelper + + + + \ No newline at end of file diff --git a/tongxin/Socket.Server/App.config b/tongxin/Socket.Server/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/tongxin/Socket.Server/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/tongxin/Socket.Server/FrmServer.Designer.cs b/tongxin/Socket.Server/FrmServer.Designer.cs new file mode 100644 index 0000000..e96003d --- /dev/null +++ b/tongxin/Socket.Server/FrmServer.Designer.cs @@ -0,0 +1,460 @@ + +namespace Socket.Server +{ + partial class FrmServer + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + this.chBoxIsHeartCheck = new System.Windows.Forms.CheckBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.txtServerIp = new System.Windows.Forms.TextBox(); + this.txtServerPort = new System.Windows.Forms.TextBox(); + this.panel2 = new System.Windows.Forms.Panel(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.txtReceviceData = new System.Windows.Forms.RichTextBox(); + this.panel4 = new System.Windows.Forms.Panel(); + this.lblCurrentClient = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.txtMessage = new System.Windows.Forms.RichTextBox(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.txtSendData = new System.Windows.Forms.TextBox(); + this.btnSendData = new System.Windows.Forms.Button(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.txtInterval = new System.Windows.Forms.TextBox(); + this.btnListeningStop = new System.Windows.Forms.Button(); + this.btnListeningStart = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.dgvClientView = new System.Windows.Forms.DataGridView(); + this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.panel3 = new System.Windows.Forms.Panel(); + this.lblClientCount = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.panel2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.panel4.SuspendLayout(); + this.groupBox5.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.panel1.SuspendLayout(); + this.groupBox4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvClientView)).BeginInit(); + this.panel3.SuspendLayout(); + this.SuspendLayout(); + // + // chBoxIsHeartCheck + // + this.chBoxIsHeartCheck.AutoSize = true; + this.chBoxIsHeartCheck.Checked = true; + this.chBoxIsHeartCheck.CheckState = System.Windows.Forms.CheckState.Checked; + this.chBoxIsHeartCheck.Location = new System.Drawing.Point(141, 159); + this.chBoxIsHeartCheck.Name = "chBoxIsHeartCheck"; + this.chBoxIsHeartCheck.Size = new System.Drawing.Size(72, 16); + this.chBoxIsHeartCheck.TabIndex = 0; + this.chBoxIsHeartCheck.Text = "心跳检测"; + this.chBoxIsHeartCheck.UseVisualStyleBackColor = true; + this.chBoxIsHeartCheck.CheckedChanged += new System.EventHandler(this.chBoxIsHeartCheck_CheckedChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(58, 50); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(77, 12); + this.label1.TabIndex = 1; + this.label1.Text = "服务器地址:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(82, 105); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(53, 12); + this.label2.TabIndex = 2; + this.label2.Text = "端口号:"; + // + // txtServerIp + // + this.txtServerIp.Location = new System.Drawing.Point(141, 46); + this.txtServerIp.Name = "txtServerIp"; + this.txtServerIp.Size = new System.Drawing.Size(202, 21); + this.txtServerIp.TabIndex = 3; + this.txtServerIp.Text = "192.168.1.5"; + // + // txtServerPort + // + this.txtServerPort.Location = new System.Drawing.Point(141, 101); + this.txtServerPort.Name = "txtServerPort"; + this.txtServerPort.Size = new System.Drawing.Size(202, 21); + this.txtServerPort.TabIndex = 4; + this.txtServerPort.Text = "7001"; + // + // panel2 + // + this.panel2.Controls.Add(this.groupBox1); + this.panel2.Controls.Add(this.groupBox5); + this.panel2.Controls.Add(this.groupBox2); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(410, 10); + this.panel2.Name = "panel2"; + this.panel2.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.panel2.Size = new System.Drawing.Size(628, 669); + this.panel2.TabIndex = 6; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.txtReceviceData); + this.groupBox1.Controls.Add(this.panel4); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox1.Location = new System.Drawing.Point(10, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(618, 460); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "已接收数据"; + // + // txtReceviceData + // + this.txtReceviceData.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtReceviceData.Location = new System.Drawing.Point(3, 47); + this.txtReceviceData.Name = "txtReceviceData"; + this.txtReceviceData.ReadOnly = true; + this.txtReceviceData.Size = new System.Drawing.Size(612, 410); + this.txtReceviceData.TabIndex = 0; + this.txtReceviceData.Text = ""; + // + // panel4 + // + this.panel4.Controls.Add(this.lblCurrentClient); + this.panel4.Controls.Add(this.label6); + this.panel4.Dock = System.Windows.Forms.DockStyle.Top; + this.panel4.Location = new System.Drawing.Point(3, 17); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(612, 30); + this.panel4.TabIndex = 1; + // + // lblCurrentClient + // + this.lblCurrentClient.AutoSize = true; + this.lblCurrentClient.Location = new System.Drawing.Point(126, 9); + this.lblCurrentClient.Name = "lblCurrentClient"; + this.lblCurrentClient.Size = new System.Drawing.Size(17, 12); + this.lblCurrentClient.TabIndex = 1; + this.lblCurrentClient.Text = "无"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(18, 9); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(101, 12); + this.label6.TabIndex = 0; + this.label6.Text = "当前通讯客户端:"; + // + // groupBox5 + // + this.groupBox5.Controls.Add(this.txtMessage); + this.groupBox5.Dock = System.Windows.Forms.DockStyle.Bottom; + this.groupBox5.Location = new System.Drawing.Point(10, 460); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(618, 139); + this.groupBox5.TabIndex = 70; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "消息"; + // + // txtMessage + // + this.txtMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtMessage.Location = new System.Drawing.Point(3, 17); + this.txtMessage.Name = "txtMessage"; + this.txtMessage.ReadOnly = true; + this.txtMessage.Size = new System.Drawing.Size(612, 119); + this.txtMessage.TabIndex = 101; + this.txtMessage.Text = ""; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.txtSendData); + this.groupBox2.Controls.Add(this.btnSendData); + this.groupBox2.Dock = System.Windows.Forms.DockStyle.Bottom; + this.groupBox2.Location = new System.Drawing.Point(10, 599); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(618, 70); + this.groupBox2.TabIndex = 1; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "发送数据"; + // + // txtSendData + // + this.txtSendData.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtSendData.Location = new System.Drawing.Point(3, 17); + this.txtSendData.Multiline = true; + this.txtSendData.Name = "txtSendData"; + this.txtSendData.Size = new System.Drawing.Size(537, 50); + this.txtSendData.TabIndex = 0; + // + // btnSendData + // + this.btnSendData.Dock = System.Windows.Forms.DockStyle.Right; + this.btnSendData.Location = new System.Drawing.Point(540, 17); + this.btnSendData.Name = "btnSendData"; + this.btnSendData.Size = new System.Drawing.Size(75, 50); + this.btnSendData.TabIndex = 1; + this.btnSendData.Text = "发送数据"; + this.btnSendData.UseVisualStyleBackColor = true; + this.btnSendData.Click += new System.EventHandler(this.btnSendData_Click); + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.txtInterval); + this.groupBox3.Controls.Add(this.btnListeningStop); + this.groupBox3.Controls.Add(this.btnListeningStart); + this.groupBox3.Controls.Add(this.txtServerPort); + this.groupBox3.Controls.Add(this.chBoxIsHeartCheck); + this.groupBox3.Controls.Add(this.label3); + this.groupBox3.Controls.Add(this.label2); + this.groupBox3.Controls.Add(this.txtServerIp); + this.groupBox3.Controls.Add(this.label1); + this.groupBox3.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox3.Location = new System.Drawing.Point(0, 0); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(400, 263); + this.groupBox3.TabIndex = 7; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "服务器参数设置"; + // + // txtInterval + // + this.txtInterval.Location = new System.Drawing.Point(308, 157); + this.txtInterval.Name = "txtInterval"; + this.txtInterval.Size = new System.Drawing.Size(35, 21); + this.txtInterval.TabIndex = 6; + this.txtInterval.Text = "500"; + // + // btnListeningStop + // + this.btnListeningStop.Location = new System.Drawing.Point(219, 214); + this.btnListeningStop.Name = "btnListeningStop"; + this.btnListeningStop.Size = new System.Drawing.Size(100, 36); + this.btnListeningStop.TabIndex = 5; + this.btnListeningStop.Text = "停止监听"; + this.btnListeningStop.UseVisualStyleBackColor = true; + this.btnListeningStop.Click += new System.EventHandler(this.btnListeningStop_Click); + // + // btnListeningStart + // + this.btnListeningStart.Location = new System.Drawing.Point(89, 214); + this.btnListeningStart.Name = "btnListeningStart"; + this.btnListeningStart.Size = new System.Drawing.Size(100, 36); + this.btnListeningStart.TabIndex = 5; + this.btnListeningStart.Text = "开启监听"; + this.btnListeningStart.UseVisualStyleBackColor = true; + this.btnListeningStart.Click += new System.EventHandler(this.btnListeningStart_Click); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(234, 161); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(77, 12); + this.label3.TabIndex = 2; + this.label3.Text = "间隔(毫秒):"; + // + // panel1 + // + this.panel1.Controls.Add(this.groupBox4); + this.panel1.Controls.Add(this.groupBox3); + this.panel1.Dock = System.Windows.Forms.DockStyle.Left; + this.panel1.Location = new System.Drawing.Point(10, 10); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(400, 669); + this.panel1.TabIndex = 8; + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.dgvClientView); + this.groupBox4.Controls.Add(this.panel3); + this.groupBox4.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox4.Location = new System.Drawing.Point(0, 263); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(400, 406); + this.groupBox4.TabIndex = 8; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "客户端列表"; + // + // dgvClientView + // + this.dgvClientView.AllowUserToAddRows = false; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvClientView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.dgvClientView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvClientView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Column1, + this.Column2, + this.Column3, + this.Column4}); + this.dgvClientView.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvClientView.Location = new System.Drawing.Point(3, 47); + this.dgvClientView.Name = "dgvClientView"; + this.dgvClientView.RowHeadersVisible = false; + this.dgvClientView.RowTemplate.Height = 23; + this.dgvClientView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dgvClientView.Size = new System.Drawing.Size(394, 356); + this.dgvClientView.TabIndex = 0; + // + // Column1 + // + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.Column1.DefaultCellStyle = dataGridViewCellStyle2; + this.Column1.HeaderText = "序号"; + this.Column1.Name = "Column1"; + this.Column1.Width = 70; + // + // Column2 + // + this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.Column2.HeaderText = "客户端IP"; + this.Column2.Name = "Column2"; + // + // Column3 + // + this.Column3.HeaderText = "端口号"; + this.Column3.Name = "Column3"; + // + // Column4 + // + this.Column4.HeaderText = "状态"; + this.Column4.Name = "Column4"; + this.Column4.Width = 80; + // + // panel3 + // + this.panel3.Controls.Add(this.lblClientCount); + this.panel3.Controls.Add(this.label4); + this.panel3.Dock = System.Windows.Forms.DockStyle.Top; + this.panel3.Location = new System.Drawing.Point(3, 17); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(394, 30); + this.panel3.TabIndex = 1; + // + // lblClientCount + // + this.lblClientCount.AutoSize = true; + this.lblClientCount.Location = new System.Drawing.Point(102, 9); + this.lblClientCount.Name = "lblClientCount"; + this.lblClientCount.Size = new System.Drawing.Size(11, 12); + this.lblClientCount.TabIndex = 1; + this.lblClientCount.Text = "0"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(18, 9); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(77, 12); + this.label4.TabIndex = 0; + this.label4.Text = "客户端总数:"; + // + // FrmServer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1048, 689); + this.Controls.Add(this.panel2); + this.Controls.Add(this.panel1); + this.Name = "FrmServer"; + this.Padding = new System.Windows.Forms.Padding(10); + this.Text = "Socket通讯 服务端"; + this.Load += new System.EventHandler(this.FrmServer_Load); + this.panel2.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.panel4.ResumeLayout(false); + this.panel4.PerformLayout(); + this.groupBox5.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.panel1.ResumeLayout(false); + this.groupBox4.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvClientView)).EndInit(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.CheckBox chBoxIsHeartCheck; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtServerIp; + private System.Windows.Forms.TextBox txtServerPort; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.Button btnListeningStop; + private System.Windows.Forms.Button btnListeningStart; + private System.Windows.Forms.Button btnSendData; + private System.Windows.Forms.TextBox txtSendData; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.RichTextBox txtReceviceData; + private System.Windows.Forms.DataGridView dgvClientView; + private System.Windows.Forms.TextBox txtInterval; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.DataGridViewTextBoxColumn Column1; + private System.Windows.Forms.DataGridViewTextBoxColumn Column2; + private System.Windows.Forms.DataGridViewTextBoxColumn Column3; + private System.Windows.Forms.DataGridViewTextBoxColumn Column4; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Label lblClientCount; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.Label lblCurrentClient; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.RichTextBox txtMessage; + } +} + diff --git a/tongxin/Socket.Server/FrmServer.cs b/tongxin/Socket.Server/FrmServer.cs new file mode 100644 index 0000000..61e3d9e --- /dev/null +++ b/tongxin/Socket.Server/FrmServer.cs @@ -0,0 +1,250 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using NetWorkHelper.IModels; +using NetWorkHelper.TCP; + +namespace Socket.Server +{ + public partial class FrmServer : Form + { + /// + /// 服务端通讯组件 + /// + ITcpServer _server { get; set; } + + /// + /// 客户端列表 + /// + List _clientSocketList { get; set; } + + public FrmServer() + { + InitializeComponent(); + } + + /// + /// 窗体加载事件 + /// + private void FrmServer_Load(object sender, EventArgs e) + { + _server = new ITcpServer(); + + _server.OnErrorMsg += _server_OnErrorMsg; + _server.OnGetLog += _server_OnGetLog; + _server.OnOfflineClient += _server_OnOfflineClient; + _server.OnOnlineClient += _server_OnOnlineClient; + _server.OnRecevice += _server_OnRecevice; + _server.OnReturnClientCount += _server_OnReturnClientCount; + _server.OnSendDateSuccess += _server_OnSendDateSuccess; + _server.OnStateInfo += _server_OnStateInfo; + + _clientSocketList = new List(); + + + } + + /// + /// 监听状态改变时返回监听状态事件 + /// + private void _server_OnStateInfo(object sender, NetWorkHelper.ICommond.TcpServerStateEventArgs e) + { + txtMessage.AppendText(e.Msg + Environment.NewLine); + } + + /// + /// 发送消息成功时返回成功消息事件 + /// + private void _server_OnSendDateSuccess(object sender, NetWorkHelper.ICommond.TcpServerSendReturnEventArgs e) + { + + } + + /// + /// 用户上线下线时更新客户端在线数量事件 + /// + private void _server_OnReturnClientCount(object sender, NetWorkHelper.ICommond.TcpServerReturnClientCountEventArgs e) + { + lblClientCount.Text = e.ClientCount.ToString(); + } + + /// + /// 接收数据事件 + /// + private void _server_OnRecevice(object sender, NetWorkHelper.ICommond.TcpServerReceviceaEventArgs e) + { + string receviceData = Encoding.Default.GetString(e.Data); + txtReceviceData.AppendText(receviceData + Environment.NewLine); + } + + /// + /// 新客户端上线时返回客户端事件 + /// + private void _server_OnOnlineClient(object sender, NetWorkHelper.ICommond.TcpServerClientEventArgs e) + { + ChangeClientList(e.IClient, true); + } + + /// + /// 改变客户端列表 + /// + /// + void ChangeClientList(IClient client, bool isAdd) + { + //新增 + if (isAdd) + { + //是否存在于队列中 + bool state = _clientSocketList.Exists(p => p.Ip == client.Ip); + + if (!state) + { + _clientSocketList.Add(client); + DataGridViewRow dr = new DataGridViewRow(); + + dr.CreateCells(dgvClientView); + + //设置列的值 + dr.Cells[0].Value = dgvClientView.Rows.Count; + dr.Cells[1].Value = client.Ip; + dr.Cells[2].Value = client.Port; + dr.Cells[3].Value = client.ClientInfo.SitState.ToString(); + + dr.Tag = client.Ip; + + dgvClientView.Rows.Add(dr); + } + } + else + { + var removeList = new List(); + + foreach (DataGridViewRow row in dgvClientView.Rows) + { + var rowClient = (string)row.Tag; + + if (rowClient == client.Ip) + { + removeList.Add(row); + + _clientSocketList.RemoveAll(p => p.Ip == rowClient); + } + } + + //删除列表,避免删除导致的索引错误,另起删除循环 + foreach (var row in removeList) + { + dgvClientView.Rows.Remove(row); + } + } + } + + /// + /// 客户端下线时返回客户端事件 + /// + private void _server_OnOfflineClient(object sender, NetWorkHelper.ICommond.TcpServerClientEventArgs e) + { + ChangeClientList(e.IClient, false); + } + + /// + /// 服务端读写操作时返回日志消息 + /// + private void _server_OnGetLog(object sender, NetWorkHelper.ICommond.TcpServerLogEventArgs e) + { + txtMessage.AppendText(e.LogMsg + Environment.NewLine); + } + + /// + /// 错误消息 + /// + private void _server_OnErrorMsg(object sender, NetWorkHelper.ICommond.TcpServerErrorEventArgs e) + { + txtMessage.AppendText(e.ErrorMsg + Environment.NewLine); + } + + /// + /// 是否开启心跳检测 + /// + private void chBoxIsHeartCheck_CheckedChanged(object sender, EventArgs e) + { + _server.IsHeartCheck = chBoxIsHeartCheck.Checked; + } + + /// + /// 开启监听 + /// + private void btnListeningStart_Click(object sender, EventArgs e) + { + if (!_server.IsStartListening) + { + if (string.IsNullOrEmpty(txtServerIp.Text) || string.IsNullOrEmpty(txtServerPort.Text) || string.IsNullOrEmpty(txtInterval.Text)) + { + MessageBox.Show("参数不能为空!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + _server.CheckTime = int.Parse(txtInterval.Text.Trim()); + _server.ServerIp = txtServerIp.Text.Trim(); + _server.ServerPort = int.Parse(txtServerPort.Text.Trim()); + + _server.Start(); + + btnListeningStart.Enabled = false; + btnListeningStop.Enabled = true; + } + } + + /// + /// 停止监听 + /// + private void btnListeningStop_Click(object sender, EventArgs e) + { + if (_server.IsStartListening) + { + _server.Stop(); + + btnListeningStart.Enabled = true; + btnListeningStop.Enabled = false; + } + } + + /// + /// 发送数据按钮 + /// + private void btnSendData_Click(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(txtSendData.Text.Trim())) + { + byte[] sendData = Encoding.Default.GetBytes(txtSendData.Text.Trim()); + + var selectedList = dgvClientView.SelectedRows; + + if (selectedList.Count == 0) + { + MessageBox.Show("请选择要发送的客户端!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning); + + return; + } + + foreach (DataGridViewRow row in selectedList) + { + var rowIp = (string)row.Tag; + + var rowClient = _clientSocketList.Find(p => p.Ip == rowIp); + + //发送数据 + _server.SendData(rowClient, sendData); + } + + txtSendData.Text = string.Empty; + } + } + } +} diff --git a/tongxin/Socket.Server/FrmServer.resx b/tongxin/Socket.Server/FrmServer.resx new file mode 100644 index 0000000..1d910af --- /dev/null +++ b/tongxin/Socket.Server/FrmServer.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/tongxin/Socket.Server/Program.cs b/tongxin/Socket.Server/Program.cs new file mode 100644 index 0000000..4ea9865 --- /dev/null +++ b/tongxin/Socket.Server/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Socket.Server +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new FrmServer()); + } + } +} diff --git a/tongxin/Socket.Server/Properties/AssemblyInfo.cs b/tongxin/Socket.Server/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..da45f95 --- /dev/null +++ b/tongxin/Socket.Server/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("Socket.Server")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Socket.Server")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("5a88af7a-e1a2-4ee9-8e0a-f998b9d1edfb")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/tongxin/Socket.Server/Properties/Resources.Designer.cs b/tongxin/Socket.Server/Properties/Resources.Designer.cs new file mode 100644 index 0000000..9d80378 --- /dev/null +++ b/tongxin/Socket.Server/Properties/Resources.Designer.cs @@ -0,0 +1,70 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + + +namespace Socket.Server.Properties +{ + /// + /// 强类型资源类,用于查找本地化字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// 返回此类使用的缓存 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Socket.Server.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/tongxin/Socket.Server/Properties/Resources.resx b/tongxin/Socket.Server/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/tongxin/Socket.Server/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/tongxin/Socket.Server/Properties/Settings.Designer.cs b/tongxin/Socket.Server/Properties/Settings.Designer.cs new file mode 100644 index 0000000..9b56dd7 --- /dev/null +++ b/tongxin/Socket.Server/Properties/Settings.Designer.cs @@ -0,0 +1,29 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +namespace Socket.Server.Properties +{ + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/tongxin/Socket.Server/Properties/Settings.settings b/tongxin/Socket.Server/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/tongxin/Socket.Server/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/tongxin/Socket.Server/Socket.Server.csproj b/tongxin/Socket.Server/Socket.Server.csproj new file mode 100644 index 0000000..46b25ef --- /dev/null +++ b/tongxin/Socket.Server/Socket.Server.csproj @@ -0,0 +1,89 @@ + + + + + Debug + AnyCPU + {5A88AF7A-E1A2-4EE9-8E0A-F998B9D1EDFB} + WinExe + Socket.Server + Socket.Server + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + Form + + + FrmServer.cs + + + + + FrmServer.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + {FB7970FD-F699-4093-83D0-509501B7863C} + NetWorkHelper + + + + \ No newline at end of file diff --git a/tongxin/SocketServer.sln b/tongxin/SocketServer.sln new file mode 100644 index 0000000..04a83a1 --- /dev/null +++ b/tongxin/SocketServer.sln @@ -0,0 +1,51 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29905.134 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetWorkHelper", "NetWorkHelper\NetWorkHelper.csproj", "{FB7970FD-F699-4093-83D0-509501B7863C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Socket.Server", "Socket.Server\Socket.Server.csproj", "{5A88AF7A-E1A2-4EE9-8E0A-F998B9D1EDFB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|x64.ActiveCfg = Debug|x64 + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|x64.Build.0 = Debug|x64 + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|x86.ActiveCfg = Debug|x86 + {FB7970FD-F699-4093-83D0-509501B7863C}.Debug|x86.Build.0 = Debug|x86 + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|Any CPU.Build.0 = Release|Any CPU + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|x64.ActiveCfg = Release|x64 + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|x64.Build.0 = Release|x64 + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|x86.ActiveCfg = Release|x86 + {FB7970FD-F699-4093-83D0-509501B7863C}.Release|x86.Build.0 = Release|x86 + {5A88AF7A-E1A2-4EE9-8E0A-F998B9D1EDFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5A88AF7A-E1A2-4EE9-8E0A-F998B9D1EDFB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5A88AF7A-E1A2-4EE9-8E0A-F998B9D1EDFB}.Debug|x64.ActiveCfg = Debug|Any CPU + {5A88AF7A-E1A2-4EE9-8E0A-F998B9D1EDFB}.Debug|x64.Build.0 = Debug|Any CPU + {5A88AF7A-E1A2-4EE9-8E0A-F998B9D1EDFB}.Debug|x86.ActiveCfg = Debug|Any CPU + {5A88AF7A-E1A2-4EE9-8E0A-F998B9D1EDFB}.Debug|x86.Build.0 = Debug|Any CPU + {5A88AF7A-E1A2-4EE9-8E0A-F998B9D1EDFB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5A88AF7A-E1A2-4EE9-8E0A-F998B9D1EDFB}.Release|Any CPU.Build.0 = Release|Any CPU + {5A88AF7A-E1A2-4EE9-8E0A-F998B9D1EDFB}.Release|x64.ActiveCfg = Release|Any CPU + {5A88AF7A-E1A2-4EE9-8E0A-F998B9D1EDFB}.Release|x64.Build.0 = Release|Any CPU + {5A88AF7A-E1A2-4EE9-8E0A-F998B9D1EDFB}.Release|x86.ActiveCfg = Release|Any CPU + {5A88AF7A-E1A2-4EE9-8E0A-F998B9D1EDFB}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8A10C8CA-1D64-4CD5-B7E3-861FA7018DF0} + EndGlobalSection +EndGlobal diff --git a/vs密钥.txt b/vs密钥.txt new file mode 100644 index 0000000..7ebfa99 --- /dev/null +++ b/vs密钥.txt @@ -0,0 +1,9 @@ +Visual Studio 2019 Professional + +NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y + + + +Visual Studio 2019 Enterprise + +BF8Y8-GN2QH-T84XB-QVY3B-RC4DF \ No newline at end of file diff --git a/上位机扫码器连接配置.docx b/上位机扫码器连接配置.docx new file mode 100644 index 0000000..36f1b36 Binary files /dev/null and b/上位机扫码器连接配置.docx differ diff --git a/扫码枪使用说明书/2023-2D XH系列-V4.0-中文.pdf b/扫码枪使用说明书/2023-2D XH系列-V4.0-中文.pdf new file mode 100644 index 0000000..b140d94 Binary files /dev/null and b/扫码枪使用说明书/2023-2D XH系列-V4.0-中文.pdf differ diff --git a/扫码枪使用说明书/扫码器指令控制设置-V4.0(1).pdf b/扫码枪使用说明书/扫码器指令控制设置-V4.0(1).pdf new file mode 100644 index 0000000..edbdc95 Binary files /dev/null and b/扫码枪使用说明书/扫码器指令控制设置-V4.0(1).pdf differ diff --git a/自动化思路图.docx b/自动化思路图.docx new file mode 100644 index 0000000..11c151a Binary files /dev/null and b/自动化思路图.docx differ