Browse Source

- TAML now supports writing and reading JSON. By default it will use a schema that is strictly compatible with JSON RFC4627 (specifically the part about member names must be unique) however TAML does not care about this and it can be turned off with the console variable "$pref::T2D::JSONStrict" (set it to false).
- TAML adheres to unique member names by adding a suffix. The member names that do this are the ones that represent children types or custom node names. The JSON writer has a unique serial number which is increments during writing however you are free to configure the actual format by changing the following in the "tamlJSONWriter.cc" file (at the top): StringTableEntry JSON_RFC4627_NAME_MANGLING_FORMAT = StringTable->insert( "%s[%d]" );
- Taml also allows you to configure which characters are used to separate the type/node-name from the index again using an entry in the "tamlJSONWriter.cc": StringTableEntry JSON_RFC4627_NAME_MANGLING_CHARACTERS = StringTable->insert(" !$%^&*()-+{}[]@:~#|\\/?<>,.\n\r\t");

- TAML already will auto-detects the file type by extension (the defaults are XML is ".taml", BINARY is ".baml") and JSON now has a default of ".json". As always, you are free to changes these defaults in the C++ code or on a TAML per-instance basis.

MelvMay-GG 12 years ago
parent
commit
1d007c26a4
100 changed files with 11524 additions and 167 deletions
  1. 33 14
      engine/compilers/VisualStudio 2010/Torque 2D.vcxproj
  2. 105 33
      engine/compilers/VisualStudio 2010/Torque 2D.vcxproj.filters
  3. 33 14
      engine/compilers/VisualStudio 2012/Torque 2D.vcxproj
  4. 105 33
      engine/compilers/VisualStudio 2012/Torque 2D.vcxproj.filters
  5. 121 38
      engine/compilers/Xcode/Torque2D.xcodeproj/project.pbxproj
  6. 116 32
      engine/compilers/Xcode_iOS/Torque2D.xcodeproj/project.pbxproj
  7. 1 1
      engine/source/assets/tamlAssetReferencedUpdateVisitor.h
  8. 1 1
      engine/source/assets/tamlAssetReferencedVisitor.h
  9. 1 1
      engine/source/module/tamlModuleIdUpdateVisitor.h
  10. 199 0
      engine/source/persistence/rapidjson/.gitattributes
  11. 22 0
      engine/source/persistence/rapidjson/bin/data/glossary.json
  12. 27 0
      engine/source/persistence/rapidjson/bin/data/menu.json
  13. 1 0
      engine/source/persistence/rapidjson/bin/data/readme.txt
  14. 3315 0
      engine/source/persistence/rapidjson/bin/data/sample.json
  15. 88 0
      engine/source/persistence/rapidjson/bin/data/webapp.json
  16. 26 0
      engine/source/persistence/rapidjson/bin/data/widget.json
  17. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf16be.json
  18. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf16bebom.json
  19. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf16le.json
  20. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf16lebom.json
  21. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf32be.json
  22. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf32bebom.json
  23. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf32le.json
  24. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf32lebom.json
  25. 7 0
      engine/source/persistence/rapidjson/bin/encodings/utf8.json
  26. 7 0
      engine/source/persistence/rapidjson/bin/encodings/utf8bom.json
  27. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail1.json
  28. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail10.json
  29. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail11.json
  30. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail12.json
  31. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail13.json
  32. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail14.json
  33. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail15.json
  34. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail16.json
  35. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail17.json
  36. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail18.json
  37. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail19.json
  38. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail2.json
  39. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail20.json
  40. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail21.json
  41. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail22.json
  42. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail23.json
  43. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail24.json
  44. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail25.json
  45. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail26.json
  46. 2 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail27.json
  47. 2 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail28.json
  48. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail29.json
  49. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail3.json
  50. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail30.json
  51. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail31.json
  52. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail32.json
  53. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail33.json
  54. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail4.json
  55. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail5.json
  56. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail6.json
  57. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail7.json
  58. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail8.json
  59. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail9.json
  60. 58 0
      engine/source/persistence/rapidjson/bin/jsonchecker/pass1.json
  61. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/pass2.json
  62. 6 0
      engine/source/persistence/rapidjson/bin/jsonchecker/pass3.json
  63. 3 0
      engine/source/persistence/rapidjson/bin/jsonchecker/readme.txt
  64. 1789 0
      engine/source/persistence/rapidjson/build/Doxyfile
  65. 4 0
      engine/source/persistence/rapidjson/build/premake
  66. 5 0
      engine/source/persistence/rapidjson/build/premake.bat
  67. 175 0
      engine/source/persistence/rapidjson/build/premake4.lua
  68. 31 0
      engine/source/persistence/rapidjson/example/condense/condense.cpp
  69. 29 0
      engine/source/persistence/rapidjson/example/pretty/pretty.cpp
  70. 55 0
      engine/source/persistence/rapidjson/example/prettyauto/prettyauto.cpp
  71. 129 0
      engine/source/persistence/rapidjson/example/serialize/serialize.cpp
  72. 154 0
      engine/source/persistence/rapidjson/example/tutorial/tutorial.cpp
  73. 221 0
      engine/source/persistence/rapidjson/include/rapidjson/allocators.h
  74. 843 0
      engine/source/persistence/rapidjson/include/rapidjson/document.h
  75. 250 0
      engine/source/persistence/rapidjson/include/rapidjson/encodedstream.h
  76. 527 0
      engine/source/persistence/rapidjson/include/rapidjson/encodings.h
  77. 74 0
      engine/source/persistence/rapidjson/include/rapidjson/filereadstream.h
  78. 49 0
      engine/source/persistence/rapidjson/include/rapidjson/filestream.h
  79. 73 0
      engine/source/persistence/rapidjson/include/rapidjson/filewritestream.h
  80. 54 0
      engine/source/persistence/rapidjson/include/rapidjson/internal/pow10.h
  81. 83 0
      engine/source/persistence/rapidjson/include/rapidjson/internal/stack.h
  82. 24 0
      engine/source/persistence/rapidjson/include/rapidjson/internal/strfunc.h
  83. 160 0
      engine/source/persistence/rapidjson/include/rapidjson/prettywriter.h
  84. 256 0
      engine/source/persistence/rapidjson/include/rapidjson/rapidjson.h
  85. 669 0
      engine/source/persistence/rapidjson/include/rapidjson/reader.h
  86. 50 0
      engine/source/persistence/rapidjson/include/rapidjson/stringbuffer.h
  87. 249 0
      engine/source/persistence/rapidjson/include/rapidjson/writer.h
  88. 19 0
      engine/source/persistence/rapidjson/license.txt
  89. 34 0
      engine/source/persistence/rapidjson/readme.txt
  90. 57 0
      engine/source/persistence/rapidjson/test/perftest/jsoncpptest.cpp
  91. 61 0
      engine/source/persistence/rapidjson/test/perftest/misctest.cpp
  92. 10 0
      engine/source/persistence/rapidjson/test/perftest/perftest.cpp
  93. 85 0
      engine/source/persistence/rapidjson/test/perftest/perftest.h
  94. 152 0
      engine/source/persistence/rapidjson/test/perftest/platformtest.cpp
  95. 287 0
      engine/source/persistence/rapidjson/test/perftest/rapidjsontest.cpp
  96. 64 0
      engine/source/persistence/rapidjson/test/perftest/ultrajsontest.cpp
  97. 22 0
      engine/source/persistence/rapidjson/test/perftest/yajl_all.c
  98. 188 0
      engine/source/persistence/rapidjson/test/perftest/yajltest.cpp
  99. 92 0
      engine/source/persistence/rapidjson/test/unittest/documenttest.cpp
  100. 189 0
      engine/source/persistence/rapidjson/test/unittest/encodedstreamtest.cpp

+ 33 - 14
engine/compilers/VisualStudio 2010/Torque 2D.vcxproj

@@ -72,7 +72,7 @@
     </Midl>
     </Midl>
     <ClCompile>
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../Source/persistence/rapidjson/include;../../source/testing/googleTest;../../source/testing/googleTest/include;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>TORQUE_DEBUG;TORQUE_DEBUG_GUARD;_CRT_SECURE_NO_DEPRECATE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions>TORQUE_DEBUG;TORQUE_DEBUG_GUARD;_CRT_SECURE_NO_DEPRECATE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -119,7 +119,7 @@
     <ClCompile>
     <ClCompile>
       <Optimization>MinSpace</Optimization>
       <Optimization>MinSpace</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../Source/persistence/rapidjson/include;../../source/testing/googleTest;../../source/testing/googleTest/include;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions>UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -178,7 +178,7 @@
     <ClCompile>
     <ClCompile>
       <Optimization>MinSpace</Optimization>
       <Optimization>MinSpace</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../Source/persistence/rapidjson/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>TORQUE_SHIPPING;UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions>TORQUE_SHIPPING;UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -451,14 +451,16 @@
     <ClCompile Include="..\..\source\network\serverQuery.cc" />
     <ClCompile Include="..\..\source\network\serverQuery.cc" />
     <ClCompile Include="..\..\source\network\tcpObject.cc" />
     <ClCompile Include="..\..\source\network\tcpObject.cc" />
     <ClCompile Include="..\..\source\network\telnetConsole.cc" />
     <ClCompile Include="..\..\source\network\telnetConsole.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryReader.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONReader.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONWriter.cc" />
     <ClCompile Include="..\..\source\persistence\taml\taml.cc" />
     <ClCompile Include="..\..\source\persistence\taml\taml.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryReader.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryWriter.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlCustom.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlCustom.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlWriteNode.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlWriteNode.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlParser.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlReader.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlWriter.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlParser.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlReader.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlWriter.cc" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinystr.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinystr.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxml.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxml.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlerror.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlerror.cpp" />
@@ -897,18 +899,35 @@
     <ClInclude Include="..\..\source\network\serverQuery.h" />
     <ClInclude Include="..\..\source\network\serverQuery.h" />
     <ClInclude Include="..\..\source\network\tcpObject.h" />
     <ClInclude Include="..\..\source\network\tcpObject.h" />
     <ClInclude Include="..\..\source\network\telnetConsole.h" />
     <ClInclude Include="..\..\source\network\telnetConsole.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\allocators.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\document.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodedstream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodings.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filereadstream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filestream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filewritestream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\pow10.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\stack.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\strfunc.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\prettywriter.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\rapidjson.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\reader.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\stringbuffer.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\writer.h" />
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryReader.h" />
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.h" />
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONReader.h" />
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONWriter.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryReader.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryWriter.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCallbacks.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCallbacks.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlChildren.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlChildren.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCustom.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCustom.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlWriteNode.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlWriteNode.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlParser.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlReader.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlVisitor.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlWriter.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h" />
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlParser.h" />
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlReader.h" />
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlVisitor.h" />
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlWriter.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinystr.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinystr.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h" />
     <ClInclude Include="..\..\source\audio\audio.h" />
     <ClInclude Include="..\..\source\audio\audio.h" />

+ 105 - 33
engine/compilers/VisualStudio 2010/Torque 2D.vcxproj.filters

@@ -178,6 +178,21 @@
     <Filter Include="2d\experimental\composites">
     <Filter Include="2d\experimental\composites">
       <UniqueIdentifier>{b250a30d-b6a9-48b5-9193-2b9bedf765ee}</UniqueIdentifier>
       <UniqueIdentifier>{b250a30d-b6a9-48b5-9193-2b9bedf765ee}</UniqueIdentifier>
     </Filter>
     </Filter>
+    <Filter Include="persistence\rapidjson">
+      <UniqueIdentifier>{3b65e104-5a90-41e6-94d5-8449f4820a4f}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\rapidjson\internal">
+      <UniqueIdentifier>{96dd2ca7-b93e-4b3d-8fc2-1b3b96f7df40}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\taml\binary">
+      <UniqueIdentifier>{ef91bcc8-f098-453d-b2ad-a16d85c7c07b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\taml\json">
+      <UniqueIdentifier>{4f1fa44b-dc63-45b7-8aef-37714133ac71}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\taml\xml">
+      <UniqueIdentifier>{e8f11d4b-6a54-4467-ae13-794ed56063f9}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\..\source\audio\audio.cc">
     <ClCompile Include="..\..\source\audio\audio.cc">
@@ -669,12 +684,6 @@
     <ClCompile Include="..\..\source\persistence\taml\taml.cc">
     <ClCompile Include="..\..\source\persistence\taml\taml.cc">
       <Filter>persistence\taml</Filter>
       <Filter>persistence\taml</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlWriter.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlReader.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\module\moduleDefinition.cc">
     <ClCompile Include="..\..\source\module\moduleDefinition.cc">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClCompile>
     </ClCompile>
@@ -693,12 +702,6 @@
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlparser.cpp">
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlparser.cpp">
       <Filter>persistence\tinyXML</Filter>
       <Filter>persistence\tinyXML</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryWriter.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryReader.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\module\moduleMergeDefinition.cc">
     <ClCompile Include="..\..\source\module\moduleMergeDefinition.cc">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClCompile>
     </ClCompile>
@@ -708,9 +711,6 @@
     <ClCompile Include="..\..\source\assets\assetFieldTypes.cc">
     <ClCompile Include="..\..\source\assets\assetFieldTypes.cc">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlParser.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\assets\assetQuery.cc">
     <ClCompile Include="..\..\source\assets\assetQuery.cc">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClCompile>
     </ClCompile>
@@ -1305,6 +1305,27 @@
     <ClCompile Include="..\..\source\2d\core\ImageFrameProviderCore.cc">
     <ClCompile Include="..\..\source\2d\core\ImageFrameProviderCore.cc">
       <Filter>2d\core</Filter>
       <Filter>2d\core</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryReader.cc">
+      <Filter>persistence\taml\binary</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.cc">
+      <Filter>persistence\taml\binary</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONReader.cc">
+      <Filter>persistence\taml\json</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONWriter.cc">
+      <Filter>persistence\taml\json</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlParser.cc">
+      <Filter>persistence\taml\xml</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlReader.cc">
+      <Filter>persistence\taml\xml</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlWriter.cc">
+      <Filter>persistence\taml\xml</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\source\audio\audio.h">
     <ClInclude Include="..\..\source\audio\audio.h">
@@ -1829,12 +1850,6 @@
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h">
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h">
       <Filter>persistence\taml</Filter>
       <Filter>persistence\taml</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlWriter.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlReader.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\module\moduleDefinition.h">
     <ClInclude Include="..\..\source\module\moduleDefinition.h">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClInclude>
     </ClInclude>
@@ -1850,12 +1865,6 @@
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h">
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h">
       <Filter>persistence\tinyXML</Filter>
       <Filter>persistence\tinyXML</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryWriter.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryReader.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\module\moduleDefinition_ScriptBinding.h">
     <ClInclude Include="..\..\source\module\moduleDefinition_ScriptBinding.h">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClInclude>
     </ClInclude>
@@ -1874,12 +1883,6 @@
     <ClInclude Include="..\..\source\assets\assetFieldTypes.h">
     <ClInclude Include="..\..\source\assets\assetFieldTypes.h">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlParser.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlVisitor.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\assets\tamlAssetUpdateVisitor.h">
     <ClInclude Include="..\..\source\assets\tamlAssetUpdateVisitor.h">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClInclude>
     </ClInclude>
@@ -2676,6 +2679,75 @@
     <ClInclude Include="..\..\source\2d\core\ImageFrameProviderCore.h">
     <ClInclude Include="..\..\source\2d\core\ImageFrameProviderCore.h">
       <Filter>2d\core</Filter>
       <Filter>2d\core</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\allocators.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\document.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodedstream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodings.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filereadstream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filestream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filewritestream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\prettywriter.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\rapidjson.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\reader.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\stringbuffer.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\writer.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\pow10.h">
+      <Filter>persistence\rapidjson\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\stack.h">
+      <Filter>persistence\rapidjson\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\strfunc.h">
+      <Filter>persistence\rapidjson\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryReader.h">
+      <Filter>persistence\taml\binary</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.h">
+      <Filter>persistence\taml\binary</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONReader.h">
+      <Filter>persistence\taml\json</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONWriter.h">
+      <Filter>persistence\taml\json</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlParser.h">
+      <Filter>persistence\taml\xml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlReader.h">
+      <Filter>persistence\taml\xml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlVisitor.h">
+      <Filter>persistence\taml\xml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlWriter.h">
+      <Filter>persistence\taml\xml</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <CustomBuild Include="..\..\source\math\mMath_ASM.asm">
     <CustomBuild Include="..\..\source\math\mMath_ASM.asm">

+ 33 - 14
engine/compilers/VisualStudio 2012/Torque 2D.vcxproj

@@ -75,7 +75,7 @@
     </Midl>
     </Midl>
     <ClCompile>
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../Source/persistence/rapidjson/include;../../Source/persistence/libjson;../../source/testing/googleTest;../../source/testing/googleTest/include;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>TORQUE_DEBUG;TORQUE_DEBUG_GUARD;_CRT_SECURE_NO_DEPRECATE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions>TORQUE_DEBUG;TORQUE_DEBUG_GUARD;_CRT_SECURE_NO_DEPRECATE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -124,7 +124,7 @@
     <ClCompile>
     <ClCompile>
       <Optimization>MinSpace</Optimization>
       <Optimization>MinSpace</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../Source/persistence/rapidjson/include;../../Source/persistence/libjson;../../source/testing/googleTest;../../source/testing/googleTest/include;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions>UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -184,7 +184,7 @@
     <ClCompile>
     <ClCompile>
       <Optimization>MinSpace</Optimization>
       <Optimization>MinSpace</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../Source/persistence/rapidjson/include;../../Source/persistence/libjson;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>TORQUE_SHIPPING;UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions>TORQUE_SHIPPING;UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -458,14 +458,16 @@
     <ClCompile Include="..\..\source\network\serverQuery.cc" />
     <ClCompile Include="..\..\source\network\serverQuery.cc" />
     <ClCompile Include="..\..\source\network\tcpObject.cc" />
     <ClCompile Include="..\..\source\network\tcpObject.cc" />
     <ClCompile Include="..\..\source\network\telnetConsole.cc" />
     <ClCompile Include="..\..\source\network\telnetConsole.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryReader.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONReader.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONWriter.cc" />
     <ClCompile Include="..\..\source\persistence\taml\taml.cc" />
     <ClCompile Include="..\..\source\persistence\taml\taml.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryReader.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryWriter.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlCustom.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlCustom.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlWriteNode.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlWriteNode.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlParser.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlReader.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlWriter.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlParser.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlReader.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlWriter.cc" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinystr.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinystr.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxml.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxml.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlerror.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlerror.cpp" />
@@ -903,18 +905,35 @@
     <ClInclude Include="..\..\source\network\serverQuery.h" />
     <ClInclude Include="..\..\source\network\serverQuery.h" />
     <ClInclude Include="..\..\source\network\tcpObject.h" />
     <ClInclude Include="..\..\source\network\tcpObject.h" />
     <ClInclude Include="..\..\source\network\telnetConsole.h" />
     <ClInclude Include="..\..\source\network\telnetConsole.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\allocators.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\document.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodedstream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodings.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filereadstream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filestream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filewritestream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\pow10.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\stack.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\strfunc.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\prettywriter.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\rapidjson.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\reader.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\stringbuffer.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\writer.h" />
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryReader.h" />
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.h" />
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONReader.h" />
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONWriter.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryReader.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryWriter.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCallbacks.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCallbacks.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlChildren.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlChildren.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCustom.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCustom.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlWriteNode.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlWriteNode.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlParser.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlReader.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlVisitor.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlWriter.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h" />
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlParser.h" />
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlReader.h" />
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlVisitor.h" />
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlWriter.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinystr.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinystr.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h" />
     <ClInclude Include="..\..\source\audio\audio.h" />
     <ClInclude Include="..\..\source\audio\audio.h" />

+ 105 - 33
engine/compilers/VisualStudio 2012/Torque 2D.vcxproj.filters

@@ -178,6 +178,21 @@
     <Filter Include="2d\experimental\composites">
     <Filter Include="2d\experimental\composites">
       <UniqueIdentifier>{30e1ec13-118b-4d50-8e04-76e76fcfdc01}</UniqueIdentifier>
       <UniqueIdentifier>{30e1ec13-118b-4d50-8e04-76e76fcfdc01}</UniqueIdentifier>
     </Filter>
     </Filter>
+    <Filter Include="persistence\rapidjson">
+      <UniqueIdentifier>{4d0b6ff3-58d2-4952-bd14-915a50a3b568}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\rapidjson\internal">
+      <UniqueIdentifier>{9cbec746-dd4c-4b4c-b11f-37a126ea2c38}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\taml\binary">
+      <UniqueIdentifier>{427672e0-f4a2-45a9-b44c-92d190e961aa}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\taml\json">
+      <UniqueIdentifier>{e1ff3412-7343-4dfb-bc99-bce90655557b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\taml\xml">
+      <UniqueIdentifier>{cc1c1416-376b-4686-a4ac-21d1a35c9390}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\..\source\audio\audio.cc">
     <ClCompile Include="..\..\source\audio\audio.cc">
@@ -669,12 +684,6 @@
     <ClCompile Include="..\..\source\persistence\taml\taml.cc">
     <ClCompile Include="..\..\source\persistence\taml\taml.cc">
       <Filter>persistence\taml</Filter>
       <Filter>persistence\taml</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlWriter.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlReader.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\module\moduleDefinition.cc">
     <ClCompile Include="..\..\source\module\moduleDefinition.cc">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClCompile>
     </ClCompile>
@@ -693,12 +702,6 @@
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlparser.cpp">
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlparser.cpp">
       <Filter>persistence\tinyXML</Filter>
       <Filter>persistence\tinyXML</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryWriter.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryReader.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\module\moduleMergeDefinition.cc">
     <ClCompile Include="..\..\source\module\moduleMergeDefinition.cc">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClCompile>
     </ClCompile>
@@ -708,9 +711,6 @@
     <ClCompile Include="..\..\source\assets\assetFieldTypes.cc">
     <ClCompile Include="..\..\source\assets\assetFieldTypes.cc">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlParser.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\assets\assetQuery.cc">
     <ClCompile Include="..\..\source\assets\assetQuery.cc">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClCompile>
     </ClCompile>
@@ -1305,6 +1305,27 @@
     <ClCompile Include="..\..\source\2d\core\ImageFrameProviderCore.cc">
     <ClCompile Include="..\..\source\2d\core\ImageFrameProviderCore.cc">
       <Filter>2d\core</Filter>
       <Filter>2d\core</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryReader.cc">
+      <Filter>persistence\taml\binary</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.cc">
+      <Filter>persistence\taml\binary</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONReader.cc">
+      <Filter>persistence\taml\json</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONWriter.cc">
+      <Filter>persistence\taml\json</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlParser.cc">
+      <Filter>persistence\taml\xml</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlReader.cc">
+      <Filter>persistence\taml\xml</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlWriter.cc">
+      <Filter>persistence\taml\xml</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\source\audio\audio.h">
     <ClInclude Include="..\..\source\audio\audio.h">
@@ -1829,12 +1850,6 @@
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h">
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h">
       <Filter>persistence\taml</Filter>
       <Filter>persistence\taml</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlWriter.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlReader.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\module\moduleDefinition.h">
     <ClInclude Include="..\..\source\module\moduleDefinition.h">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClInclude>
     </ClInclude>
@@ -1850,12 +1865,6 @@
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h">
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h">
       <Filter>persistence\tinyXML</Filter>
       <Filter>persistence\tinyXML</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryWriter.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryReader.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\module\moduleDefinition_ScriptBinding.h">
     <ClInclude Include="..\..\source\module\moduleDefinition_ScriptBinding.h">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClInclude>
     </ClInclude>
@@ -1874,12 +1883,6 @@
     <ClInclude Include="..\..\source\assets\assetFieldTypes.h">
     <ClInclude Include="..\..\source\assets\assetFieldTypes.h">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlParser.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlVisitor.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\assets\tamlAssetUpdateVisitor.h">
     <ClInclude Include="..\..\source\assets\tamlAssetUpdateVisitor.h">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClInclude>
     </ClInclude>
@@ -2673,6 +2676,75 @@
     <ClInclude Include="..\..\source\2d\core\ImageFrameProviderCore.h">
     <ClInclude Include="..\..\source\2d\core\ImageFrameProviderCore.h">
       <Filter>2d\core</Filter>
       <Filter>2d\core</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\allocators.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\document.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodedstream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodings.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filereadstream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filestream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filewritestream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\prettywriter.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\rapidjson.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\reader.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\stringbuffer.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\writer.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\pow10.h">
+      <Filter>persistence\rapidjson\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\stack.h">
+      <Filter>persistence\rapidjson\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\strfunc.h">
+      <Filter>persistence\rapidjson\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryReader.h">
+      <Filter>persistence\taml\binary</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.h">
+      <Filter>persistence\taml\binary</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONReader.h">
+      <Filter>persistence\taml\json</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONWriter.h">
+      <Filter>persistence\taml\json</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlParser.h">
+      <Filter>persistence\taml\xml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlReader.h">
+      <Filter>persistence\taml\xml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlVisitor.h">
+      <Filter>persistence\taml\xml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlWriter.h">
+      <Filter>persistence\taml\xml</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <CustomBuild Include="..\..\source\math\mMath_ASM.asm">
     <CustomBuild Include="..\..\source\math\mMath_ASM.asm">

+ 121 - 38
engine/compilers/Xcode/Torque2D.xcodeproj/project.pbxproj

@@ -25,6 +25,13 @@
 		2AC5C7E81667C85700A0D046 /* platformStringTests.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AC5C7E71667C85700A0D046 /* platformStringTests.cc */; };
 		2AC5C7E81667C85700A0D046 /* platformStringTests.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AC5C7E71667C85700A0D046 /* platformStringTests.cc */; };
 		2ACF5A2816E52D4B00F838D9 /* SpriteBatchQuery.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF5A2516E52D4B00F838D9 /* SpriteBatchQuery.cc */; };
 		2ACF5A2816E52D4B00F838D9 /* SpriteBatchQuery.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF5A2516E52D4B00F838D9 /* SpriteBatchQuery.cc */; };
 		2ACFC0A8166CE1AB00FE7370 /* platformMemoryTests.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ACFC0A7166CE1AB00FE7370 /* platformMemoryTests.cc */; };
 		2ACFC0A8166CE1AB00FE7370 /* platformMemoryTests.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ACFC0A7166CE1AB00FE7370 /* platformMemoryTests.cc */; };
+		2AD42140170433FE005BB8AD /* tamlXmlParser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD42139170433FE005BB8AD /* tamlXmlParser.cc */; };
+		2AD42141170433FE005BB8AD /* tamlXmlReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4213B170433FE005BB8AD /* tamlXmlReader.cc */; };
+		2AD42142170433FE005BB8AD /* tamlXmlWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4213E170433FE005BB8AD /* tamlXmlWriter.cc */; };
+		2AD4214717043408005BB8AD /* tamlJSONReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4214317043408005BB8AD /* tamlJSONReader.cc */; };
+		2AD4214817043408005BB8AD /* tamlJSONWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4214517043408005BB8AD /* tamlJSONWriter.cc */; };
+		2AD4214D17043413005BB8AD /* tamlBinaryReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4214917043413005BB8AD /* tamlBinaryReader.cc */; };
+		2AD4214E17043413005BB8AD /* tamlBinaryWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4214B17043413005BB8AD /* tamlBinaryWriter.cc */; };
 		2ADCAC1516A41E5500E07619 /* ParticleAsset.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ADCAC1116A41E5500E07619 /* ParticleAsset.cc */; };
 		2ADCAC1516A41E5500E07619 /* ParticleAsset.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ADCAC1116A41E5500E07619 /* ParticleAsset.cc */; };
 		2ADCAC1716A41E5500E07619 /* ParticleAssetField.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ADCAC1316A41E5500E07619 /* ParticleAssetField.cc */; };
 		2ADCAC1716A41E5500E07619 /* ParticleAssetField.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ADCAC1316A41E5500E07619 /* ParticleAssetField.cc */; };
 		2AE2938516EF4C220015E200 /* WaveComposite.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AE2938316EF4C220015E200 /* WaveComposite.cc */; };
 		2AE2938516EF4C220015E200 /* WaveComposite.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AE2938316EF4C220015E200 /* WaveComposite.cc */; };
@@ -401,12 +408,7 @@
 		86D7707E1656873C0046D71F /* telnetConsole.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80ED16518D4600D96ADF /* telnetConsole.cc */; };
 		86D7707E1656873C0046D71F /* telnetConsole.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80ED16518D4600D96ADF /* telnetConsole.cc */; };
 		86D7707F1656873C0046D71F /* SimXMLDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80F016518D4600D96ADF /* SimXMLDocument.cpp */; };
 		86D7707F1656873C0046D71F /* SimXMLDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80F016518D4600D96ADF /* SimXMLDocument.cpp */; };
 		86D770801656873C0046D71F /* taml.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80F316518D4600D96ADF /* taml.cc */; };
 		86D770801656873C0046D71F /* taml.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80F316518D4600D96ADF /* taml.cc */; };
-		86D770811656873C0046D71F /* tamlBinaryReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80F616518D4600D96ADF /* tamlBinaryReader.cc */; };
-		86D770821656873C0046D71F /* tamlBinaryWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80F816518D4600D96ADF /* tamlBinaryWriter.cc */; };
 		86D770841656873C0046D71F /* tamlWriteNode.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80FD16518D4600D96ADF /* tamlWriteNode.cc */; };
 		86D770841656873C0046D71F /* tamlWriteNode.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80FD16518D4600D96ADF /* tamlWriteNode.cc */; };
-		86D770851656873C0046D71F /* tamlXmlParser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80FF16518D4600D96ADF /* tamlXmlParser.cc */; };
-		86D770861656873C0046D71F /* tamlXmlReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810116518D4600D96ADF /* tamlXmlReader.cc */; };
-		86D770871656873C0046D71F /* tamlXmlWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810416518D4600D96ADF /* tamlXmlWriter.cc */; };
 		86D770881656873C0046D71F /* tinystr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810716518D4600D96ADF /* tinystr.cpp */; };
 		86D770881656873C0046D71F /* tinystr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810716518D4600D96ADF /* tinystr.cpp */; };
 		86D770891656873C0046D71F /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810916518D4600D96ADF /* tinyxml.cpp */; };
 		86D770891656873C0046D71F /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810916518D4600D96ADF /* tinyxml.cpp */; };
 		86D7708A1656873C0046D71F /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810B16518D4600D96ADF /* tinyxmlerror.cpp */; };
 		86D7708A1656873C0046D71F /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810B16518D4600D96ADF /* tinyxmlerror.cpp */; };
@@ -494,6 +496,36 @@
 		2ACFC0A7166CE1AB00FE7370 /* platformMemoryTests.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = platformMemoryTests.cc; path = ../../../source/testing/tests/platformMemoryTests.cc; sourceTree = "<group>"; };
 		2ACFC0A7166CE1AB00FE7370 /* platformMemoryTests.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = platformMemoryTests.cc; path = ../../../source/testing/tests/platformMemoryTests.cc; sourceTree = "<group>"; };
 		2AD07B2616D15F5A0070DC79 /* simObjectTimerEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simObjectTimerEvent.h; sourceTree = "<group>"; };
 		2AD07B2616D15F5A0070DC79 /* simObjectTimerEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simObjectTimerEvent.h; sourceTree = "<group>"; };
 		2AD35A541663608E00C75F30 /* platformFileIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = platformFileIO.h; sourceTree = "<group>"; };
 		2AD35A541663608E00C75F30 /* platformFileIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = platformFileIO.h; sourceTree = "<group>"; };
+		2AD42126170433B3005BB8AD /* allocators.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = allocators.h; path = rapidjson/include/rapidjson/allocators.h; sourceTree = "<group>"; };
+		2AD42127170433B3005BB8AD /* document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = document.h; path = rapidjson/include/rapidjson/document.h; sourceTree = "<group>"; };
+		2AD42128170433B3005BB8AD /* encodedstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = encodedstream.h; path = rapidjson/include/rapidjson/encodedstream.h; sourceTree = "<group>"; };
+		2AD42129170433B3005BB8AD /* encodings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = encodings.h; path = rapidjson/include/rapidjson/encodings.h; sourceTree = "<group>"; };
+		2AD4212A170433B3005BB8AD /* filereadstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filereadstream.h; path = rapidjson/include/rapidjson/filereadstream.h; sourceTree = "<group>"; };
+		2AD4212B170433B3005BB8AD /* filestream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filestream.h; path = rapidjson/include/rapidjson/filestream.h; sourceTree = "<group>"; };
+		2AD4212C170433B3005BB8AD /* filewritestream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filewritestream.h; path = rapidjson/include/rapidjson/filewritestream.h; sourceTree = "<group>"; };
+		2AD4212D170433B3005BB8AD /* prettywriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prettywriter.h; path = rapidjson/include/rapidjson/prettywriter.h; sourceTree = "<group>"; };
+		2AD4212E170433B3005BB8AD /* rapidjson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rapidjson.h; path = rapidjson/include/rapidjson/rapidjson.h; sourceTree = "<group>"; };
+		2AD4212F170433B3005BB8AD /* reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = reader.h; path = rapidjson/include/rapidjson/reader.h; sourceTree = "<group>"; };
+		2AD42130170433B3005BB8AD /* stringbuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stringbuffer.h; path = rapidjson/include/rapidjson/stringbuffer.h; sourceTree = "<group>"; };
+		2AD42131170433B3005BB8AD /* writer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = writer.h; path = rapidjson/include/rapidjson/writer.h; sourceTree = "<group>"; };
+		2AD42133170433C7005BB8AD /* pow10.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pow10.h; path = rapidjson/include/rapidjson/internal/pow10.h; sourceTree = "<group>"; };
+		2AD42134170433C7005BB8AD /* stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stack.h; path = rapidjson/include/rapidjson/internal/stack.h; sourceTree = "<group>"; };
+		2AD42135170433C7005BB8AD /* strfunc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = strfunc.h; path = rapidjson/include/rapidjson/internal/strfunc.h; sourceTree = "<group>"; };
+		2AD42139170433FE005BB8AD /* tamlXmlParser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlXmlParser.cc; path = xml/tamlXmlParser.cc; sourceTree = "<group>"; };
+		2AD4213A170433FE005BB8AD /* tamlXmlParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlXmlParser.h; path = xml/tamlXmlParser.h; sourceTree = "<group>"; };
+		2AD4213B170433FE005BB8AD /* tamlXmlReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlXmlReader.cc; path = xml/tamlXmlReader.cc; sourceTree = "<group>"; };
+		2AD4213C170433FE005BB8AD /* tamlXmlReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlXmlReader.h; path = xml/tamlXmlReader.h; sourceTree = "<group>"; };
+		2AD4213D170433FE005BB8AD /* tamlXmlVisitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlXmlVisitor.h; path = xml/tamlXmlVisitor.h; sourceTree = "<group>"; };
+		2AD4213E170433FE005BB8AD /* tamlXmlWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlXmlWriter.cc; path = xml/tamlXmlWriter.cc; sourceTree = "<group>"; };
+		2AD4213F170433FE005BB8AD /* tamlXmlWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlXmlWriter.h; path = xml/tamlXmlWriter.h; sourceTree = "<group>"; };
+		2AD4214317043408005BB8AD /* tamlJSONReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlJSONReader.cc; path = json/tamlJSONReader.cc; sourceTree = "<group>"; };
+		2AD4214417043408005BB8AD /* tamlJSONReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlJSONReader.h; path = json/tamlJSONReader.h; sourceTree = "<group>"; };
+		2AD4214517043408005BB8AD /* tamlJSONWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlJSONWriter.cc; path = json/tamlJSONWriter.cc; sourceTree = "<group>"; };
+		2AD4214617043408005BB8AD /* tamlJSONWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlJSONWriter.h; path = json/tamlJSONWriter.h; sourceTree = "<group>"; };
+		2AD4214917043413005BB8AD /* tamlBinaryReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlBinaryReader.cc; path = binary/tamlBinaryReader.cc; sourceTree = "<group>"; };
+		2AD4214A17043413005BB8AD /* tamlBinaryReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlBinaryReader.h; path = binary/tamlBinaryReader.h; sourceTree = "<group>"; };
+		2AD4214B17043413005BB8AD /* tamlBinaryWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlBinaryWriter.cc; path = binary/tamlBinaryWriter.cc; sourceTree = "<group>"; };
+		2AD4214C17043413005BB8AD /* tamlBinaryWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlBinaryWriter.h; path = binary/tamlBinaryWriter.h; sourceTree = "<group>"; };
 		2ADCAC0E16A41E4400E07619 /* tamlChildren.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlChildren.h; sourceTree = "<group>"; };
 		2ADCAC0E16A41E4400E07619 /* tamlChildren.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlChildren.h; sourceTree = "<group>"; };
 		2ADCAC1016A41E5500E07619 /* ParticleAsset_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParticleAsset_ScriptBinding.h; sourceTree = "<group>"; };
 		2ADCAC1016A41E5500E07619 /* ParticleAsset_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParticleAsset_ScriptBinding.h; sourceTree = "<group>"; };
 		2ADCAC1116A41E5500E07619 /* ParticleAsset.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParticleAsset.cc; sourceTree = "<group>"; };
 		2ADCAC1116A41E5500E07619 /* ParticleAsset.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParticleAsset.cc; sourceTree = "<group>"; };
@@ -1183,20 +1215,9 @@
 		86BC80F316518D4600D96ADF /* taml.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = taml.cc; sourceTree = "<group>"; };
 		86BC80F316518D4600D96ADF /* taml.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = taml.cc; sourceTree = "<group>"; };
 		86BC80F416518D4600D96ADF /* taml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml.h; sourceTree = "<group>"; };
 		86BC80F416518D4600D96ADF /* taml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml.h; sourceTree = "<group>"; };
 		86BC80F516518D4600D96ADF /* taml_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml_ScriptBinding.h; sourceTree = "<group>"; };
 		86BC80F516518D4600D96ADF /* taml_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml_ScriptBinding.h; sourceTree = "<group>"; };
-		86BC80F616518D4600D96ADF /* tamlBinaryReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlBinaryReader.cc; sourceTree = "<group>"; };
-		86BC80F716518D4600D96ADF /* tamlBinaryReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlBinaryReader.h; sourceTree = "<group>"; };
-		86BC80F816518D4600D96ADF /* tamlBinaryWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlBinaryWriter.cc; sourceTree = "<group>"; };
-		86BC80F916518D4600D96ADF /* tamlBinaryWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlBinaryWriter.h; sourceTree = "<group>"; };
 		86BC80FA16518D4600D96ADF /* tamlCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlCallbacks.h; sourceTree = "<group>"; };
 		86BC80FA16518D4600D96ADF /* tamlCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlCallbacks.h; sourceTree = "<group>"; };
 		86BC80FD16518D4600D96ADF /* tamlWriteNode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlWriteNode.cc; sourceTree = "<group>"; };
 		86BC80FD16518D4600D96ADF /* tamlWriteNode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlWriteNode.cc; sourceTree = "<group>"; };
 		86BC80FE16518D4600D96ADF /* tamlWriteNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlWriteNode.h; sourceTree = "<group>"; };
 		86BC80FE16518D4600D96ADF /* tamlWriteNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlWriteNode.h; sourceTree = "<group>"; };
-		86BC80FF16518D4600D96ADF /* tamlXmlParser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlXmlParser.cc; sourceTree = "<group>"; };
-		86BC810016518D4600D96ADF /* tamlXmlParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlParser.h; sourceTree = "<group>"; };
-		86BC810116518D4600D96ADF /* tamlXmlReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlXmlReader.cc; sourceTree = "<group>"; };
-		86BC810216518D4600D96ADF /* tamlXmlReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlReader.h; sourceTree = "<group>"; };
-		86BC810316518D4600D96ADF /* tamlXmlVisitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlVisitor.h; sourceTree = "<group>"; };
-		86BC810416518D4600D96ADF /* tamlXmlWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlXmlWriter.cc; sourceTree = "<group>"; };
-		86BC810516518D4600D96ADF /* tamlXmlWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlWriter.h; sourceTree = "<group>"; };
 		86BC810716518D4600D96ADF /* tinystr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinystr.cpp; sourceTree = "<group>"; };
 		86BC810716518D4600D96ADF /* tinystr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinystr.cpp; sourceTree = "<group>"; };
 		86BC810816518D4600D96ADF /* tinystr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinystr.h; sourceTree = "<group>"; };
 		86BC810816518D4600D96ADF /* tinystr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinystr.h; sourceTree = "<group>"; };
 		86BC810916518D4600D96ADF /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = "<group>"; };
 		86BC810916518D4600D96ADF /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = "<group>"; };
@@ -1408,6 +1429,72 @@
 			name = controllers;
 			name = controllers;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
 		};
 		};
+		2AD4212517043387005BB8AD /* rapidjson */ = {
+			isa = PBXGroup;
+			children = (
+				2AD42132170433B7005BB8AD /* internal */,
+				2AD42126170433B3005BB8AD /* allocators.h */,
+				2AD42127170433B3005BB8AD /* document.h */,
+				2AD42128170433B3005BB8AD /* encodedstream.h */,
+				2AD42129170433B3005BB8AD /* encodings.h */,
+				2AD4212A170433B3005BB8AD /* filereadstream.h */,
+				2AD4212B170433B3005BB8AD /* filestream.h */,
+				2AD4212C170433B3005BB8AD /* filewritestream.h */,
+				2AD4212D170433B3005BB8AD /* prettywriter.h */,
+				2AD4212E170433B3005BB8AD /* rapidjson.h */,
+				2AD4212F170433B3005BB8AD /* reader.h */,
+				2AD42130170433B3005BB8AD /* stringbuffer.h */,
+				2AD42131170433B3005BB8AD /* writer.h */,
+			);
+			name = rapidjson;
+			sourceTree = "<group>";
+		};
+		2AD42132170433B7005BB8AD /* internal */ = {
+			isa = PBXGroup;
+			children = (
+				2AD42133170433C7005BB8AD /* pow10.h */,
+				2AD42134170433C7005BB8AD /* stack.h */,
+				2AD42135170433C7005BB8AD /* strfunc.h */,
+			);
+			name = internal;
+			sourceTree = "<group>";
+		};
+		2AD42136170433E4005BB8AD /* binary */ = {
+			isa = PBXGroup;
+			children = (
+				2AD4214917043413005BB8AD /* tamlBinaryReader.cc */,
+				2AD4214A17043413005BB8AD /* tamlBinaryReader.h */,
+				2AD4214B17043413005BB8AD /* tamlBinaryWriter.cc */,
+				2AD4214C17043413005BB8AD /* tamlBinaryWriter.h */,
+			);
+			name = binary;
+			sourceTree = "<group>";
+		};
+		2AD42137170433EA005BB8AD /* json */ = {
+			isa = PBXGroup;
+			children = (
+				2AD4214317043408005BB8AD /* tamlJSONReader.cc */,
+				2AD4214417043408005BB8AD /* tamlJSONReader.h */,
+				2AD4214517043408005BB8AD /* tamlJSONWriter.cc */,
+				2AD4214617043408005BB8AD /* tamlJSONWriter.h */,
+			);
+			name = json;
+			sourceTree = "<group>";
+		};
+		2AD42138170433F3005BB8AD /* xml */ = {
+			isa = PBXGroup;
+			children = (
+				2AD42139170433FE005BB8AD /* tamlXmlParser.cc */,
+				2AD4213A170433FE005BB8AD /* tamlXmlParser.h */,
+				2AD4213B170433FE005BB8AD /* tamlXmlReader.cc */,
+				2AD4213C170433FE005BB8AD /* tamlXmlReader.h */,
+				2AD4213D170433FE005BB8AD /* tamlXmlVisitor.h */,
+				2AD4213E170433FE005BB8AD /* tamlXmlWriter.cc */,
+				2AD4213F170433FE005BB8AD /* tamlXmlWriter.h */,
+			);
+			name = xml;
+			sourceTree = "<group>";
+		};
 		2AE2938016EF4BFA0015E200 /* experimental */ = {
 		2AE2938016EF4BFA0015E200 /* experimental */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
@@ -2617,6 +2704,7 @@
 		86BC80EF16518D4600D96ADF /* persistence */ = {
 		86BC80EF16518D4600D96ADF /* persistence */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				2AD4212517043387005BB8AD /* rapidjson */,
 				86BC80F016518D4600D96ADF /* SimXMLDocument.cpp */,
 				86BC80F016518D4600D96ADF /* SimXMLDocument.cpp */,
 				86BC80F116518D4600D96ADF /* SimXMLDocument.h */,
 				86BC80F116518D4600D96ADF /* SimXMLDocument.h */,
 				86BC80F216518D4600D96ADF /* taml */,
 				86BC80F216518D4600D96ADF /* taml */,
@@ -2629,26 +2717,18 @@
 		86BC80F216518D4600D96ADF /* taml */ = {
 		86BC80F216518D4600D96ADF /* taml */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				2AD42138170433F3005BB8AD /* xml */,
+				2AD42137170433EA005BB8AD /* json */,
+				2AD42136170433E4005BB8AD /* binary */,
 				2AB97A1B16B66BC70080F940 /* tamlCustom.cc */,
 				2AB97A1B16B66BC70080F940 /* tamlCustom.cc */,
 				2AB97A1C16B66BC70080F940 /* tamlCustom.h */,
 				2AB97A1C16B66BC70080F940 /* tamlCustom.h */,
 				2ADCAC0E16A41E4400E07619 /* tamlChildren.h */,
 				2ADCAC0E16A41E4400E07619 /* tamlChildren.h */,
 				86BC80F316518D4600D96ADF /* taml.cc */,
 				86BC80F316518D4600D96ADF /* taml.cc */,
 				86BC80F416518D4600D96ADF /* taml.h */,
 				86BC80F416518D4600D96ADF /* taml.h */,
 				86BC80F516518D4600D96ADF /* taml_ScriptBinding.h */,
 				86BC80F516518D4600D96ADF /* taml_ScriptBinding.h */,
-				86BC80F616518D4600D96ADF /* tamlBinaryReader.cc */,
-				86BC80F716518D4600D96ADF /* tamlBinaryReader.h */,
-				86BC80F816518D4600D96ADF /* tamlBinaryWriter.cc */,
-				86BC80F916518D4600D96ADF /* tamlBinaryWriter.h */,
 				86BC80FA16518D4600D96ADF /* tamlCallbacks.h */,
 				86BC80FA16518D4600D96ADF /* tamlCallbacks.h */,
 				86BC80FD16518D4600D96ADF /* tamlWriteNode.cc */,
 				86BC80FD16518D4600D96ADF /* tamlWriteNode.cc */,
 				86BC80FE16518D4600D96ADF /* tamlWriteNode.h */,
 				86BC80FE16518D4600D96ADF /* tamlWriteNode.h */,
-				86BC80FF16518D4600D96ADF /* tamlXmlParser.cc */,
-				86BC810016518D4600D96ADF /* tamlXmlParser.h */,
-				86BC810116518D4600D96ADF /* tamlXmlReader.cc */,
-				86BC810216518D4600D96ADF /* tamlXmlReader.h */,
-				86BC810316518D4600D96ADF /* tamlXmlVisitor.h */,
-				86BC810416518D4600D96ADF /* tamlXmlWriter.cc */,
-				86BC810516518D4600D96ADF /* tamlXmlWriter.h */,
 			);
 			);
 			path = taml;
 			path = taml;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -2909,12 +2989,7 @@
 				86D7707E1656873C0046D71F /* telnetConsole.cc in Sources */,
 				86D7707E1656873C0046D71F /* telnetConsole.cc in Sources */,
 				86D7707F1656873C0046D71F /* SimXMLDocument.cpp in Sources */,
 				86D7707F1656873C0046D71F /* SimXMLDocument.cpp in Sources */,
 				86D770801656873C0046D71F /* taml.cc in Sources */,
 				86D770801656873C0046D71F /* taml.cc in Sources */,
-				86D770811656873C0046D71F /* tamlBinaryReader.cc in Sources */,
-				86D770821656873C0046D71F /* tamlBinaryWriter.cc in Sources */,
 				86D770841656873C0046D71F /* tamlWriteNode.cc in Sources */,
 				86D770841656873C0046D71F /* tamlWriteNode.cc in Sources */,
-				86D770851656873C0046D71F /* tamlXmlParser.cc in Sources */,
-				86D770861656873C0046D71F /* tamlXmlReader.cc in Sources */,
-				86D770871656873C0046D71F /* tamlXmlWriter.cc in Sources */,
 				86D770881656873C0046D71F /* tinystr.cpp in Sources */,
 				86D770881656873C0046D71F /* tinystr.cpp in Sources */,
 				86D770891656873C0046D71F /* tinyxml.cpp in Sources */,
 				86D770891656873C0046D71F /* tinyxml.cpp in Sources */,
 				86D7708A1656873C0046D71F /* tinyxmlerror.cpp in Sources */,
 				86D7708A1656873C0046D71F /* tinyxmlerror.cpp in Sources */,
@@ -3296,6 +3371,13 @@
 				2AE2938516EF4C220015E200 /* WaveComposite.cc in Sources */,
 				2AE2938516EF4C220015E200 /* WaveComposite.cc in Sources */,
 				2AA3655916F3552200E7A900 /* ImageFrameProvider.cc in Sources */,
 				2AA3655916F3552200E7A900 /* ImageFrameProvider.cc in Sources */,
 				2AA3655A16F3552200E7A900 /* ImageFrameProviderCore.cc in Sources */,
 				2AA3655A16F3552200E7A900 /* ImageFrameProviderCore.cc in Sources */,
+				2AD42140170433FE005BB8AD /* tamlXmlParser.cc in Sources */,
+				2AD42141170433FE005BB8AD /* tamlXmlReader.cc in Sources */,
+				2AD42142170433FE005BB8AD /* tamlXmlWriter.cc in Sources */,
+				2AD4214717043408005BB8AD /* tamlJSONReader.cc in Sources */,
+				2AD4214817043408005BB8AD /* tamlJSONWriter.cc in Sources */,
+				2AD4214D17043413005BB8AD /* tamlBinaryReader.cc in Sources */,
+				2AD4214E17043413005BB8AD /* tamlBinaryWriter.cc in Sources */,
 			);
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 		};
@@ -3358,10 +3440,9 @@
 					../../lib/lpng,
 					../../lib/lpng,
 					../../lib/ljpeg,
 					../../lib/ljpeg,
 					../../lib/lungif,
 					../../lib/lungif,
+					../../source/persistence/rapidjson/include,
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/ApplicationServices.framework/Versions/Current/Frameworks/QD.framework/Headers",
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/ApplicationServices.framework/Versions/Current/Frameworks/QD.framework/Headers",
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
-					../../source/testing/googleTest,
-					../../source/testing/googleTest/include,
 				);
 				);
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				LIBRARY_SEARCH_PATHS = "$(inherited)";
 				LIBRARY_SEARCH_PATHS = "$(inherited)";
@@ -3454,10 +3535,11 @@
 					../../lib/lpng,
 					../../lib/lpng,
 					../../lib/ljpeg,
 					../../lib/ljpeg,
 					../../lib/lungif,
 					../../lib/lungif,
-					"$(SYSTEM_LIBRARY_DIR)/Frameworks/ApplicationServices.framework/Versions/Current/Frameworks/QD.framework/Headers",
-					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
+					../../source/persistence/rapidjson,
 					../../source/testing/googleTest,
 					../../source/testing/googleTest,
 					../../source/testing/googleTest/include,
 					../../source/testing/googleTest/include,
+					"$(SYSTEM_LIBRARY_DIR)/Frameworks/ApplicationServices.framework/Versions/Current/Frameworks/QD.framework/Headers",
+					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
 				);
 				);
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				LIBRARY_SEARCH_PATHS = "$(inherited)";
 				LIBRARY_SEARCH_PATHS = "$(inherited)";
@@ -3487,10 +3569,11 @@
 					../../lib/lpng,
 					../../lib/lpng,
 					../../lib/ljpeg,
 					../../lib/ljpeg,
 					../../lib/lungif,
 					../../lib/lungif,
-					"$(SYSTEM_LIBRARY_DIR)/Frameworks/ApplicationServices.framework/Versions/Current/Frameworks/QD.framework/Headers",
-					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
+					../../source/persistence/rapidjson/include,
 					../../source/testing/googleTest,
 					../../source/testing/googleTest,
 					../../source/testing/googleTest/include,
 					../../source/testing/googleTest/include,
+					"$(SYSTEM_LIBRARY_DIR)/Frameworks/ApplicationServices.framework/Versions/Current/Frameworks/QD.framework/Headers",
+					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
 				);
 				);
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				LIBRARY_SEARCH_PATHS = "$(inherited)";
 				LIBRARY_SEARCH_PATHS = "$(inherited)";

+ 116 - 32
engine/compilers/Xcode_iOS/Torque2D.xcodeproj/project.pbxproj

@@ -18,6 +18,13 @@
 		2AB97A2116B66BE50080F940 /* tamlCustom.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AB97A1F16B66BE50080F940 /* tamlCustom.cc */; };
 		2AB97A2116B66BE50080F940 /* tamlCustom.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AB97A1F16B66BE50080F940 /* tamlCustom.cc */; };
 		2AC4404E16B0144500FC4091 /* ImageFont.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AC4404C16B0144500FC4091 /* ImageFont.cc */; };
 		2AC4404E16B0144500FC4091 /* ImageFont.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AC4404C16B0144500FC4091 /* ImageFont.cc */; };
 		2ACF5A2C16E52D6A00F838D9 /* SpriteBatchQuery.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF5A2916E52D6A00F838D9 /* SpriteBatchQuery.cc */; };
 		2ACF5A2C16E52D6A00F838D9 /* SpriteBatchQuery.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF5A2916E52D6A00F838D9 /* SpriteBatchQuery.cc */; };
+		2AD42156170434C2005BB8AD /* tamlBinaryReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD42152170434C2005BB8AD /* tamlBinaryReader.cc */; };
+		2AD42157170434C2005BB8AD /* tamlBinaryWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD42154170434C2005BB8AD /* tamlBinaryWriter.cc */; };
+		2AD4215F170434E1005BB8AD /* tamlXmlParser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD42158170434E1005BB8AD /* tamlXmlParser.cc */; };
+		2AD42160170434E1005BB8AD /* tamlXmlReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4215A170434E1005BB8AD /* tamlXmlReader.cc */; };
+		2AD42161170434E1005BB8AD /* tamlXmlWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4215D170434E1005BB8AD /* tamlXmlWriter.cc */; };
+		2AD42166170434F0005BB8AD /* tamlJSONReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD42162170434F0005BB8AD /* tamlJSONReader.cc */; };
+		2AD42167170434F0005BB8AD /* tamlJSONWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD42164170434F0005BB8AD /* tamlJSONWriter.cc */; };
 		2AE2938B16EF4C480015E200 /* WaveComposite.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AE2938916EF4C480015E200 /* WaveComposite.cc */; };
 		2AE2938B16EF4C480015E200 /* WaveComposite.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AE2938916EF4C480015E200 /* WaveComposite.cc */; };
 		2AE2F55916D6B07200B6A058 /* BuoyancyController.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AE2F55716D6B07200B6A058 /* BuoyancyController.cc */; };
 		2AE2F55916D6B07200B6A058 /* BuoyancyController.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AE2F55716D6B07200B6A058 /* BuoyancyController.cc */; };
 		2AED7D9316B70102003482CF /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AED7D9216B70102003482CF /* CoreText.framework */; };
 		2AED7D9316B70102003482CF /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AED7D9216B70102003482CF /* CoreText.framework */; };
@@ -302,12 +309,7 @@
 		867BB0E316AEC9050033868F /* telnetConsole.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5116AEC9050033868F /* telnetConsole.cc */; };
 		867BB0E316AEC9050033868F /* telnetConsole.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5116AEC9050033868F /* telnetConsole.cc */; };
 		867BB0E416AEC9050033868F /* SimXMLDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5416AEC9050033868F /* SimXMLDocument.cpp */; };
 		867BB0E416AEC9050033868F /* SimXMLDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5416AEC9050033868F /* SimXMLDocument.cpp */; };
 		867BB0E516AEC9050033868F /* taml.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5716AEC9050033868F /* taml.cc */; };
 		867BB0E516AEC9050033868F /* taml.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5716AEC9050033868F /* taml.cc */; };
-		867BB0E616AEC9050033868F /* tamlBinaryReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5A16AEC9050033868F /* tamlBinaryReader.cc */; };
-		867BB0E716AEC9050033868F /* tamlBinaryWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5C16AEC9050033868F /* tamlBinaryWriter.cc */; };
 		867BB0E916AEC9050033868F /* tamlWriteNode.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6216AEC9050033868F /* tamlWriteNode.cc */; };
 		867BB0E916AEC9050033868F /* tamlWriteNode.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6216AEC9050033868F /* tamlWriteNode.cc */; };
-		867BB0EA16AEC9050033868F /* tamlXmlParser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6416AEC9050033868F /* tamlXmlParser.cc */; };
-		867BB0EB16AEC9050033868F /* tamlXmlReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6616AEC9050033868F /* tamlXmlReader.cc */; };
-		867BB0EC16AEC9050033868F /* tamlXmlWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6916AEC9050033868F /* tamlXmlWriter.cc */; };
 		867BB0ED16AEC9050033868F /* tinystr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6C16AEC9050033868F /* tinystr.cpp */; };
 		867BB0ED16AEC9050033868F /* tinystr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6C16AEC9050033868F /* tinystr.cpp */; };
 		867BB0EE16AEC9050033868F /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6E16AEC9050033868F /* tinyxml.cpp */; };
 		867BB0EE16AEC9050033868F /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6E16AEC9050033868F /* tinyxml.cpp */; };
 		867BB0EF16AEC9050033868F /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF7016AEC9050033868F /* tinyxmlerror.cpp */; };
 		867BB0EF16AEC9050033868F /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF7016AEC9050033868F /* tinyxmlerror.cpp */; };
@@ -512,6 +514,36 @@
 		2ACF5A2A16E52D6A00F838D9 /* SpriteBatchQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBatchQuery.h; sourceTree = "<group>"; };
 		2ACF5A2A16E52D6A00F838D9 /* SpriteBatchQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBatchQuery.h; sourceTree = "<group>"; };
 		2ACF5A2B16E52D6A00F838D9 /* SpriteBatchQueryResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBatchQueryResult.h; sourceTree = "<group>"; };
 		2ACF5A2B16E52D6A00F838D9 /* SpriteBatchQueryResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBatchQueryResult.h; sourceTree = "<group>"; };
 		2AD07B2716D15F8E0070DC79 /* simObjectTimerEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simObjectTimerEvent.h; sourceTree = "<group>"; };
 		2AD07B2716D15F8E0070DC79 /* simObjectTimerEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simObjectTimerEvent.h; sourceTree = "<group>"; };
+		2AD42152170434C2005BB8AD /* tamlBinaryReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlBinaryReader.cc; path = binary/tamlBinaryReader.cc; sourceTree = "<group>"; };
+		2AD42153170434C2005BB8AD /* tamlBinaryReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlBinaryReader.h; path = binary/tamlBinaryReader.h; sourceTree = "<group>"; };
+		2AD42154170434C2005BB8AD /* tamlBinaryWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlBinaryWriter.cc; path = binary/tamlBinaryWriter.cc; sourceTree = "<group>"; };
+		2AD42155170434C2005BB8AD /* tamlBinaryWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlBinaryWriter.h; path = binary/tamlBinaryWriter.h; sourceTree = "<group>"; };
+		2AD42158170434E1005BB8AD /* tamlXmlParser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlXmlParser.cc; path = xml/tamlXmlParser.cc; sourceTree = "<group>"; };
+		2AD42159170434E1005BB8AD /* tamlXmlParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlXmlParser.h; path = xml/tamlXmlParser.h; sourceTree = "<group>"; };
+		2AD4215A170434E1005BB8AD /* tamlXmlReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlXmlReader.cc; path = xml/tamlXmlReader.cc; sourceTree = "<group>"; };
+		2AD4215B170434E1005BB8AD /* tamlXmlReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlXmlReader.h; path = xml/tamlXmlReader.h; sourceTree = "<group>"; };
+		2AD4215C170434E1005BB8AD /* tamlXmlVisitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlXmlVisitor.h; path = xml/tamlXmlVisitor.h; sourceTree = "<group>"; };
+		2AD4215D170434E1005BB8AD /* tamlXmlWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlXmlWriter.cc; path = xml/tamlXmlWriter.cc; sourceTree = "<group>"; };
+		2AD4215E170434E1005BB8AD /* tamlXmlWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlXmlWriter.h; path = xml/tamlXmlWriter.h; sourceTree = "<group>"; };
+		2AD42162170434F0005BB8AD /* tamlJSONReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlJSONReader.cc; path = json/tamlJSONReader.cc; sourceTree = "<group>"; };
+		2AD42163170434F0005BB8AD /* tamlJSONReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlJSONReader.h; path = json/tamlJSONReader.h; sourceTree = "<group>"; };
+		2AD42164170434F0005BB8AD /* tamlJSONWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlJSONWriter.cc; path = json/tamlJSONWriter.cc; sourceTree = "<group>"; };
+		2AD42165170434F0005BB8AD /* tamlJSONWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlJSONWriter.h; path = json/tamlJSONWriter.h; sourceTree = "<group>"; };
+		2AD4216A17043513005BB8AD /* allocators.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = allocators.h; path = rapidjson/include/rapidjson/allocators.h; sourceTree = "<group>"; };
+		2AD4216B17043513005BB8AD /* document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = document.h; path = rapidjson/include/rapidjson/document.h; sourceTree = "<group>"; };
+		2AD4216C17043513005BB8AD /* encodedstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = encodedstream.h; path = rapidjson/include/rapidjson/encodedstream.h; sourceTree = "<group>"; };
+		2AD4216D17043513005BB8AD /* encodings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = encodings.h; path = rapidjson/include/rapidjson/encodings.h; sourceTree = "<group>"; };
+		2AD4216E17043513005BB8AD /* filereadstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filereadstream.h; path = rapidjson/include/rapidjson/filereadstream.h; sourceTree = "<group>"; };
+		2AD4216F17043513005BB8AD /* filestream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filestream.h; path = rapidjson/include/rapidjson/filestream.h; sourceTree = "<group>"; };
+		2AD4217017043513005BB8AD /* filewritestream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filewritestream.h; path = rapidjson/include/rapidjson/filewritestream.h; sourceTree = "<group>"; };
+		2AD4217117043513005BB8AD /* prettywriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prettywriter.h; path = rapidjson/include/rapidjson/prettywriter.h; sourceTree = "<group>"; };
+		2AD4217217043513005BB8AD /* rapidjson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rapidjson.h; path = rapidjson/include/rapidjson/rapidjson.h; sourceTree = "<group>"; };
+		2AD4217317043513005BB8AD /* reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = reader.h; path = rapidjson/include/rapidjson/reader.h; sourceTree = "<group>"; };
+		2AD4217417043513005BB8AD /* stringbuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stringbuffer.h; path = rapidjson/include/rapidjson/stringbuffer.h; sourceTree = "<group>"; };
+		2AD4217517043513005BB8AD /* writer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = writer.h; path = rapidjson/include/rapidjson/writer.h; sourceTree = "<group>"; };
+		2AD4217617043524005BB8AD /* pow10.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pow10.h; path = rapidjson/include/rapidjson/internal/pow10.h; sourceTree = "<group>"; };
+		2AD4217717043524005BB8AD /* stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stack.h; path = rapidjson/include/rapidjson/internal/stack.h; sourceTree = "<group>"; };
+		2AD4217817043524005BB8AD /* strfunc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = strfunc.h; path = rapidjson/include/rapidjson/internal/strfunc.h; sourceTree = "<group>"; };
 		2AE2938816EF4C480015E200 /* WaveComposite_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WaveComposite_ScriptBinding.h; path = experimental/composites/WaveComposite_ScriptBinding.h; sourceTree = "<group>"; };
 		2AE2938816EF4C480015E200 /* WaveComposite_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WaveComposite_ScriptBinding.h; path = experimental/composites/WaveComposite_ScriptBinding.h; sourceTree = "<group>"; };
 		2AE2938916EF4C480015E200 /* WaveComposite.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WaveComposite.cc; path = experimental/composites/WaveComposite.cc; sourceTree = "<group>"; };
 		2AE2938916EF4C480015E200 /* WaveComposite.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WaveComposite.cc; path = experimental/composites/WaveComposite.cc; sourceTree = "<group>"; };
 		2AE2938A16EF4C480015E200 /* WaveComposite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WaveComposite.h; path = experimental/composites/WaveComposite.h; sourceTree = "<group>"; };
 		2AE2938A16EF4C480015E200 /* WaveComposite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WaveComposite.h; path = experimental/composites/WaveComposite.h; sourceTree = "<group>"; };
@@ -1110,21 +1142,10 @@
 		867BAF5716AEC9050033868F /* taml.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = taml.cc; sourceTree = "<group>"; };
 		867BAF5716AEC9050033868F /* taml.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = taml.cc; sourceTree = "<group>"; };
 		867BAF5816AEC9050033868F /* taml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml.h; sourceTree = "<group>"; };
 		867BAF5816AEC9050033868F /* taml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml.h; sourceTree = "<group>"; };
 		867BAF5916AEC9050033868F /* taml_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml_ScriptBinding.h; sourceTree = "<group>"; };
 		867BAF5916AEC9050033868F /* taml_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml_ScriptBinding.h; sourceTree = "<group>"; };
-		867BAF5A16AEC9050033868F /* tamlBinaryReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlBinaryReader.cc; sourceTree = "<group>"; };
-		867BAF5B16AEC9050033868F /* tamlBinaryReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlBinaryReader.h; sourceTree = "<group>"; };
-		867BAF5C16AEC9050033868F /* tamlBinaryWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlBinaryWriter.cc; sourceTree = "<group>"; };
-		867BAF5D16AEC9050033868F /* tamlBinaryWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlBinaryWriter.h; sourceTree = "<group>"; };
 		867BAF5E16AEC9050033868F /* tamlCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlCallbacks.h; sourceTree = "<group>"; };
 		867BAF5E16AEC9050033868F /* tamlCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlCallbacks.h; sourceTree = "<group>"; };
 		867BAF5F16AEC9050033868F /* tamlChildren.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlChildren.h; sourceTree = "<group>"; };
 		867BAF5F16AEC9050033868F /* tamlChildren.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlChildren.h; sourceTree = "<group>"; };
 		867BAF6216AEC9050033868F /* tamlWriteNode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlWriteNode.cc; sourceTree = "<group>"; };
 		867BAF6216AEC9050033868F /* tamlWriteNode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlWriteNode.cc; sourceTree = "<group>"; };
 		867BAF6316AEC9050033868F /* tamlWriteNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlWriteNode.h; sourceTree = "<group>"; };
 		867BAF6316AEC9050033868F /* tamlWriteNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlWriteNode.h; sourceTree = "<group>"; };
-		867BAF6416AEC9050033868F /* tamlXmlParser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlXmlParser.cc; sourceTree = "<group>"; };
-		867BAF6516AEC9050033868F /* tamlXmlParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlParser.h; sourceTree = "<group>"; };
-		867BAF6616AEC9050033868F /* tamlXmlReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlXmlReader.cc; sourceTree = "<group>"; };
-		867BAF6716AEC9050033868F /* tamlXmlReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlReader.h; sourceTree = "<group>"; };
-		867BAF6816AEC9050033868F /* tamlXmlVisitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlVisitor.h; sourceTree = "<group>"; };
-		867BAF6916AEC9050033868F /* tamlXmlWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlXmlWriter.cc; sourceTree = "<group>"; };
-		867BAF6A16AEC9050033868F /* tamlXmlWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlWriter.h; sourceTree = "<group>"; };
 		867BAF6C16AEC9050033868F /* tinystr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinystr.cpp; sourceTree = "<group>"; };
 		867BAF6C16AEC9050033868F /* tinystr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinystr.cpp; sourceTree = "<group>"; };
 		867BAF6D16AEC9050033868F /* tinystr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinystr.h; sourceTree = "<group>"; };
 		867BAF6D16AEC9050033868F /* tinystr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinystr.h; sourceTree = "<group>"; };
 		867BAF6E16AEC9050033868F /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = "<group>"; };
 		867BAF6E16AEC9050033868F /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = "<group>"; };
@@ -1478,6 +1499,72 @@
 			name = controllers;
 			name = controllers;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
 		};
 		};
+		2AD4214F170434A9005BB8AD /* binary */ = {
+			isa = PBXGroup;
+			children = (
+				2AD42152170434C2005BB8AD /* tamlBinaryReader.cc */,
+				2AD42153170434C2005BB8AD /* tamlBinaryReader.h */,
+				2AD42154170434C2005BB8AD /* tamlBinaryWriter.cc */,
+				2AD42155170434C2005BB8AD /* tamlBinaryWriter.h */,
+			);
+			name = binary;
+			sourceTree = "<group>";
+		};
+		2AD42150170434AF005BB8AD /* json */ = {
+			isa = PBXGroup;
+			children = (
+				2AD42162170434F0005BB8AD /* tamlJSONReader.cc */,
+				2AD42163170434F0005BB8AD /* tamlJSONReader.h */,
+				2AD42164170434F0005BB8AD /* tamlJSONWriter.cc */,
+				2AD42165170434F0005BB8AD /* tamlJSONWriter.h */,
+			);
+			name = json;
+			sourceTree = "<group>";
+		};
+		2AD42151170434B5005BB8AD /* xml */ = {
+			isa = PBXGroup;
+			children = (
+				2AD42158170434E1005BB8AD /* tamlXmlParser.cc */,
+				2AD42159170434E1005BB8AD /* tamlXmlParser.h */,
+				2AD4215A170434E1005BB8AD /* tamlXmlReader.cc */,
+				2AD4215B170434E1005BB8AD /* tamlXmlReader.h */,
+				2AD4215C170434E1005BB8AD /* tamlXmlVisitor.h */,
+				2AD4215D170434E1005BB8AD /* tamlXmlWriter.cc */,
+				2AD4215E170434E1005BB8AD /* tamlXmlWriter.h */,
+			);
+			name = xml;
+			sourceTree = "<group>";
+		};
+		2AD42168170434F9005BB8AD /* rapidjson */ = {
+			isa = PBXGroup;
+			children = (
+				2AD4216A17043513005BB8AD /* allocators.h */,
+				2AD4216B17043513005BB8AD /* document.h */,
+				2AD4216C17043513005BB8AD /* encodedstream.h */,
+				2AD4216D17043513005BB8AD /* encodings.h */,
+				2AD4216E17043513005BB8AD /* filereadstream.h */,
+				2AD4216F17043513005BB8AD /* filestream.h */,
+				2AD4217017043513005BB8AD /* filewritestream.h */,
+				2AD4217117043513005BB8AD /* prettywriter.h */,
+				2AD4217217043513005BB8AD /* rapidjson.h */,
+				2AD4217317043513005BB8AD /* reader.h */,
+				2AD4217417043513005BB8AD /* stringbuffer.h */,
+				2AD4217517043513005BB8AD /* writer.h */,
+				2AD4216917043501005BB8AD /* internal */,
+			);
+			name = rapidjson;
+			sourceTree = "<group>";
+		};
+		2AD4216917043501005BB8AD /* internal */ = {
+			isa = PBXGroup;
+			children = (
+				2AD4217617043524005BB8AD /* pow10.h */,
+				2AD4217717043524005BB8AD /* stack.h */,
+				2AD4217817043524005BB8AD /* strfunc.h */,
+			);
+			name = internal;
+			sourceTree = "<group>";
+		};
 		2AE2938616EF4C310015E200 /* experimental */ = {
 		2AE2938616EF4C310015E200 /* experimental */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
@@ -2368,6 +2455,7 @@
 		867BAF5316AEC9050033868F /* persistence */ = {
 		867BAF5316AEC9050033868F /* persistence */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				2AD42168170434F9005BB8AD /* rapidjson */,
 				867BAF5416AEC9050033868F /* SimXMLDocument.cpp */,
 				867BAF5416AEC9050033868F /* SimXMLDocument.cpp */,
 				867BAF5516AEC9050033868F /* SimXMLDocument.h */,
 				867BAF5516AEC9050033868F /* SimXMLDocument.h */,
 				867BAF5616AEC9050033868F /* taml */,
 				867BAF5616AEC9050033868F /* taml */,
@@ -2380,26 +2468,18 @@
 		867BAF5616AEC9050033868F /* taml */ = {
 		867BAF5616AEC9050033868F /* taml */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				2AD42151170434B5005BB8AD /* xml */,
+				2AD42150170434AF005BB8AD /* json */,
+				2AD4214F170434A9005BB8AD /* binary */,
 				2AB97A1F16B66BE50080F940 /* tamlCustom.cc */,
 				2AB97A1F16B66BE50080F940 /* tamlCustom.cc */,
 				2AB97A2016B66BE50080F940 /* tamlCustom.h */,
 				2AB97A2016B66BE50080F940 /* tamlCustom.h */,
 				867BAF5716AEC9050033868F /* taml.cc */,
 				867BAF5716AEC9050033868F /* taml.cc */,
 				867BAF5816AEC9050033868F /* taml.h */,
 				867BAF5816AEC9050033868F /* taml.h */,
 				867BAF5916AEC9050033868F /* taml_ScriptBinding.h */,
 				867BAF5916AEC9050033868F /* taml_ScriptBinding.h */,
-				867BAF5A16AEC9050033868F /* tamlBinaryReader.cc */,
-				867BAF5B16AEC9050033868F /* tamlBinaryReader.h */,
-				867BAF5C16AEC9050033868F /* tamlBinaryWriter.cc */,
-				867BAF5D16AEC9050033868F /* tamlBinaryWriter.h */,
 				867BAF5E16AEC9050033868F /* tamlCallbacks.h */,
 				867BAF5E16AEC9050033868F /* tamlCallbacks.h */,
 				867BAF5F16AEC9050033868F /* tamlChildren.h */,
 				867BAF5F16AEC9050033868F /* tamlChildren.h */,
 				867BAF6216AEC9050033868F /* tamlWriteNode.cc */,
 				867BAF6216AEC9050033868F /* tamlWriteNode.cc */,
 				867BAF6316AEC9050033868F /* tamlWriteNode.h */,
 				867BAF6316AEC9050033868F /* tamlWriteNode.h */,
-				867BAF6416AEC9050033868F /* tamlXmlParser.cc */,
-				867BAF6516AEC9050033868F /* tamlXmlParser.h */,
-				867BAF6616AEC9050033868F /* tamlXmlReader.cc */,
-				867BAF6716AEC9050033868F /* tamlXmlReader.h */,
-				867BAF6816AEC9050033868F /* tamlXmlVisitor.h */,
-				867BAF6916AEC9050033868F /* tamlXmlWriter.cc */,
-				867BAF6A16AEC9050033868F /* tamlXmlWriter.h */,
 			);
 			);
 			path = taml;
 			path = taml;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -3261,12 +3341,7 @@
 				867BB0E316AEC9050033868F /* telnetConsole.cc in Sources */,
 				867BB0E316AEC9050033868F /* telnetConsole.cc in Sources */,
 				867BB0E416AEC9050033868F /* SimXMLDocument.cpp in Sources */,
 				867BB0E416AEC9050033868F /* SimXMLDocument.cpp in Sources */,
 				867BB0E516AEC9050033868F /* taml.cc in Sources */,
 				867BB0E516AEC9050033868F /* taml.cc in Sources */,
-				867BB0E616AEC9050033868F /* tamlBinaryReader.cc in Sources */,
-				867BB0E716AEC9050033868F /* tamlBinaryWriter.cc in Sources */,
 				867BB0E916AEC9050033868F /* tamlWriteNode.cc in Sources */,
 				867BB0E916AEC9050033868F /* tamlWriteNode.cc in Sources */,
-				867BB0EA16AEC9050033868F /* tamlXmlParser.cc in Sources */,
-				867BB0EB16AEC9050033868F /* tamlXmlReader.cc in Sources */,
-				867BB0EC16AEC9050033868F /* tamlXmlWriter.cc in Sources */,
 				867BB0ED16AEC9050033868F /* tinystr.cpp in Sources */,
 				867BB0ED16AEC9050033868F /* tinystr.cpp in Sources */,
 				867BB0EE16AEC9050033868F /* tinyxml.cpp in Sources */,
 				867BB0EE16AEC9050033868F /* tinyxml.cpp in Sources */,
 				867BB0EF16AEC9050033868F /* tinyxmlerror.cpp in Sources */,
 				867BB0EF16AEC9050033868F /* tinyxmlerror.cpp in Sources */,
@@ -3432,6 +3507,13 @@
 				2AE2938B16EF4C480015E200 /* WaveComposite.cc in Sources */,
 				2AE2938B16EF4C480015E200 /* WaveComposite.cc in Sources */,
 				2AA3655F16F3553E00E7A900 /* ImageFrameProvider.cc in Sources */,
 				2AA3655F16F3553E00E7A900 /* ImageFrameProvider.cc in Sources */,
 				2AA3656016F3553E00E7A900 /* ImageFrameProviderCore.cc in Sources */,
 				2AA3656016F3553E00E7A900 /* ImageFrameProviderCore.cc in Sources */,
+				2AD42156170434C2005BB8AD /* tamlBinaryReader.cc in Sources */,
+				2AD42157170434C2005BB8AD /* tamlBinaryWriter.cc in Sources */,
+				2AD4215F170434E1005BB8AD /* tamlXmlParser.cc in Sources */,
+				2AD42160170434E1005BB8AD /* tamlXmlReader.cc in Sources */,
+				2AD42161170434E1005BB8AD /* tamlXmlWriter.cc in Sources */,
+				2AD42166170434F0005BB8AD /* tamlJSONReader.cc in Sources */,
+				2AD42167170434F0005BB8AD /* tamlJSONWriter.cc in Sources */,
 			);
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 		};
@@ -3533,6 +3615,7 @@
 					../../lib/lpng,
 					../../lib/lpng,
 					../../lib/ljpeg,
 					../../lib/ljpeg,
 					../../lib/lungif,
 					../../lib/lungif,
+					../../source/persistence/rapidjson/include,
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
 				);
 				);
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
@@ -3556,6 +3639,7 @@
 					../../lib/lpng,
 					../../lib/lpng,
 					../../lib/ljpeg,
 					../../lib/ljpeg,
 					../../lib/lungif,
 					../../lib/lungif,
+					../../source/persistence/rapidjson/include,
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
 				);
 				);
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";

+ 1 - 1
engine/source/assets/tamlAssetReferencedUpdateVisitor.h

@@ -24,7 +24,7 @@
 #define _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_
 #define _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_
 
 
 #ifndef _TAML_XMLPARSER_H_
 #ifndef _TAML_XMLPARSER_H_
-#include "persistence//taml/tamlXmlParser.h"
+#include "persistence//taml/xml/tamlXmlParser.h"
 #endif
 #endif
 
 
 #ifndef _STRINGUNIT_H_
 #ifndef _STRINGUNIT_H_

+ 1 - 1
engine/source/assets/tamlAssetReferencedVisitor.h

@@ -24,7 +24,7 @@
 #define _TAML_ASSET_REFERENCED_VISITOR_H_
 #define _TAML_ASSET_REFERENCED_VISITOR_H_
 
 
 #ifndef _TAML_XMLPARSER_H_
 #ifndef _TAML_XMLPARSER_H_
-#include "persistence//taml/tamlXmlParser.h"
+#include "persistence//taml/xml/tamlXmlParser.h"
 #endif
 #endif
 
 
 #ifndef _ASSET_FIELD_TYPES_H_
 #ifndef _ASSET_FIELD_TYPES_H_

+ 1 - 1
engine/source/module/tamlModuleIdUpdateVisitor.h

@@ -24,7 +24,7 @@
 #define _TAML_MODULE_ID_UPDATE_VISITOR_H_
 #define _TAML_MODULE_ID_UPDATE_VISITOR_H_
 
 
 #ifndef _TAML_XMLPARSER_H_
 #ifndef _TAML_XMLPARSER_H_
-#include "persistence//taml/tamlXmlParser.h"
+#include "persistence//taml/xml/tamlXmlParser.h"
 #endif
 #endif
 
 
 #ifndef _STRINGTABLE_H_
 #ifndef _STRINGTABLE_H_

+ 199 - 0
engine/source/persistence/rapidjson/.gitattributes

@@ -0,0 +1,199 @@
+* text=auto !eol
+bin/data/glossary.json -text
+bin/data/menu.json -text
+bin/data/readme.txt -text
+bin/data/sample.json -text
+bin/data/webapp.json -text
+bin/data/widget.json -text
+bin/encodings/utf16be.json -text
+bin/encodings/utf16bebom.json -text
+bin/encodings/utf16le.json -text
+bin/encodings/utf16lebom.json -text
+bin/encodings/utf32be.json -text
+bin/encodings/utf32bebom.json -text
+bin/encodings/utf32le.json -text
+bin/encodings/utf32lebom.json -text
+bin/encodings/utf8.json -text
+bin/encodings/utf8bom.json -text
+bin/jsonchecker/fail1.json -text
+bin/jsonchecker/fail10.json -text
+bin/jsonchecker/fail11.json -text
+bin/jsonchecker/fail12.json -text
+bin/jsonchecker/fail13.json -text
+bin/jsonchecker/fail14.json -text
+bin/jsonchecker/fail15.json -text
+bin/jsonchecker/fail16.json -text
+bin/jsonchecker/fail17.json -text
+bin/jsonchecker/fail18.json -text
+bin/jsonchecker/fail19.json -text
+bin/jsonchecker/fail2.json -text
+bin/jsonchecker/fail20.json -text
+bin/jsonchecker/fail21.json -text
+bin/jsonchecker/fail22.json -text
+bin/jsonchecker/fail23.json -text
+bin/jsonchecker/fail24.json -text
+bin/jsonchecker/fail25.json -text
+bin/jsonchecker/fail26.json -text
+bin/jsonchecker/fail27.json -text
+bin/jsonchecker/fail28.json -text
+bin/jsonchecker/fail29.json -text
+bin/jsonchecker/fail3.json -text
+bin/jsonchecker/fail30.json -text
+bin/jsonchecker/fail31.json -text
+bin/jsonchecker/fail32.json -text
+bin/jsonchecker/fail33.json -text
+bin/jsonchecker/fail4.json -text
+bin/jsonchecker/fail5.json -text
+bin/jsonchecker/fail6.json -text
+bin/jsonchecker/fail7.json -text
+bin/jsonchecker/fail8.json -text
+bin/jsonchecker/fail9.json -text
+bin/jsonchecker/pass1.json -text
+bin/jsonchecker/pass2.json -text
+bin/jsonchecker/pass3.json -text
+bin/jsonchecker/readme.txt -text
+build/Doxyfile -text
+build/premake -text
+build/premake.bat -text
+build/premake4.lua -text
+example/condense/condense.cpp -text
+example/pretty/pretty.cpp -text
+example/prettyauto/prettyauto.cpp -text
+example/serialize/serialize.cpp -text
+example/tutorial/tutorial.cpp -text
+include/rapidjson/allocators.h -text
+include/rapidjson/document.h -text
+include/rapidjson/encodedstream.h -text
+include/rapidjson/encodings.h -text
+include/rapidjson/filereadstream.h -text
+include/rapidjson/filestream.h -text
+include/rapidjson/filewritestream.h -text
+include/rapidjson/internal/pow10.h -text
+include/rapidjson/internal/stack.h -text
+include/rapidjson/internal/strfunc.h -text
+include/rapidjson/prettywriter.h -text
+include/rapidjson/rapidjson.h -text
+include/rapidjson/reader.h -text
+include/rapidjson/stringbuffer.h -text
+include/rapidjson/writer.h -text
+/license.txt -text
+/readme.txt -text
+test/perftest/jsoncpptest.cpp -text
+test/perftest/misctest.cpp -text
+test/perftest/perftest.cpp -text
+test/perftest/perftest.h -text
+test/perftest/platformtest.cpp -text
+test/perftest/rapidjsontest.cpp -text
+test/perftest/ultrajsontest.cpp -text
+test/perftest/yajl_all.c -text
+test/perftest/yajltest.cpp -text
+test/unittest/documenttest.cpp -text
+test/unittest/encodedstreamtest.cpp -text
+test/unittest/encodingstest.cpp -text
+test/unittest/filestreamtest.cpp -text
+test/unittest/jsoncheckertest.cpp -text
+test/unittest/readertest.cpp -text
+test/unittest/unittest.cpp -text
+test/unittest/unittest.h -text
+test/unittest/valuetest.cpp -text
+test/unittest/writertest.cpp -text
+thirdparty/gtest/CHANGES -text
+thirdparty/gtest/CONTRIBUTORS -text
+thirdparty/gtest/COPYING -text
+thirdparty/gtest/README -text
+thirdparty/gtest/include/gtest/gtest-death-test.h -text
+thirdparty/gtest/include/gtest/gtest-message.h -text
+thirdparty/gtest/include/gtest/gtest-param-test.h -text
+thirdparty/gtest/include/gtest/gtest-param-test.h.pump -text
+thirdparty/gtest/include/gtest/gtest-printers.h -text
+thirdparty/gtest/include/gtest/gtest-spi.h -text
+thirdparty/gtest/include/gtest/gtest-test-part.h -text
+thirdparty/gtest/include/gtest/gtest-typed-test.h -text
+thirdparty/gtest/include/gtest/gtest.h -text
+thirdparty/gtest/include/gtest/gtest_pred_impl.h -text
+thirdparty/gtest/include/gtest/gtest_prod.h -text
+thirdparty/gtest/include/gtest/internal/gtest-death-test-internal.h -text
+thirdparty/gtest/include/gtest/internal/gtest-filepath.h -text
+thirdparty/gtest/include/gtest/internal/gtest-internal.h -text
+thirdparty/gtest/include/gtest/internal/gtest-linked_ptr.h -text
+thirdparty/gtest/include/gtest/internal/gtest-param-util-generated.h -text
+thirdparty/gtest/include/gtest/internal/gtest-param-util-generated.h.pump -text
+thirdparty/gtest/include/gtest/internal/gtest-param-util.h -text
+thirdparty/gtest/include/gtest/internal/gtest-port.h -text
+thirdparty/gtest/include/gtest/internal/gtest-string.h -text
+thirdparty/gtest/include/gtest/internal/gtest-tuple.h -text
+thirdparty/gtest/include/gtest/internal/gtest-tuple.h.pump -text
+thirdparty/gtest/include/gtest/internal/gtest-type-util.h -text
+thirdparty/gtest/include/gtest/internal/gtest-type-util.h.pump -text
+thirdparty/gtest/src/gtest-all.cc -text
+thirdparty/gtest/src/gtest-death-test.cc -text
+thirdparty/gtest/src/gtest-filepath.cc -text
+thirdparty/gtest/src/gtest-internal-inl.h -text
+thirdparty/gtest/src/gtest-port.cc -text
+thirdparty/gtest/src/gtest-printers.cc -text
+thirdparty/gtest/src/gtest-test-part.cc -text
+thirdparty/gtest/src/gtest-typed-test.cc -text
+thirdparty/gtest/src/gtest.cc -text
+thirdparty/gtest/src/gtest_main.cc -text
+thirdparty/jsoncpp/AUTHORS -text
+thirdparty/jsoncpp/LICENSE -text
+thirdparty/jsoncpp/README.txt -text
+thirdparty/jsoncpp/include/json/autolink.h -text
+thirdparty/jsoncpp/include/json/config.h -text
+thirdparty/jsoncpp/include/json/features.h -text
+thirdparty/jsoncpp/include/json/forwards.h -text
+thirdparty/jsoncpp/include/json/json.h -text
+thirdparty/jsoncpp/include/json/reader.h -text
+thirdparty/jsoncpp/include/json/value.h -text
+thirdparty/jsoncpp/include/json/writer.h -text
+thirdparty/jsoncpp/src/jsontestrunner/main.cpp -text
+thirdparty/jsoncpp/src/jsontestrunner/sconscript -text
+thirdparty/jsoncpp/src/lib_json/json_batchallocator.h -text
+thirdparty/jsoncpp/src/lib_json/json_internalarray.inl -text
+thirdparty/jsoncpp/src/lib_json/json_internalmap.inl -text
+thirdparty/jsoncpp/src/lib_json/json_reader.cpp -text
+thirdparty/jsoncpp/src/lib_json/json_value.cpp -text
+thirdparty/jsoncpp/src/lib_json/json_valueiterator.inl -text
+thirdparty/jsoncpp/src/lib_json/json_writer.cpp -text
+thirdparty/jsoncpp/src/lib_json/sconscript -text
+thirdparty/jsoncpp/src/test_lib_json/jsontest.cpp -text
+thirdparty/jsoncpp/src/test_lib_json/jsontest.h -text
+thirdparty/jsoncpp/src/test_lib_json/main.cpp -text
+thirdparty/jsoncpp/src/test_lib_json/sconscript -text
+thirdparty/jsoncpp/version -text
+thirdparty/ultrajson/README -text
+thirdparty/ultrajson/ultrajson.h -text
+thirdparty/ultrajson/ultrajsondec.c -text
+thirdparty/ultrajson/ultrajsonenc.c -text
+thirdparty/yajl/COPYING -text
+thirdparty/yajl/ChangeLog -text
+thirdparty/yajl/README -text
+thirdparty/yajl/TODO -text
+thirdparty/yajl/include/yajl/yajl_common.h -text
+thirdparty/yajl/include/yajl/yajl_gen.h -text
+thirdparty/yajl/include/yajl/yajl_parse.h -text
+thirdparty/yajl/include/yajl/yajl_tree.h -text
+thirdparty/yajl/include/yajl/yajl_version.h -text
+thirdparty/yajl/src/CMakeLists.txt -text
+thirdparty/yajl/src/YAJL.dxy -text
+thirdparty/yajl/src/api/yajl_common.h -text
+thirdparty/yajl/src/api/yajl_gen.h -text
+thirdparty/yajl/src/api/yajl_parse.h -text
+thirdparty/yajl/src/api/yajl_tree.h -text
+thirdparty/yajl/src/api/yajl_version.h.cmake -text
+thirdparty/yajl/src/yajl -text
+thirdparty/yajl/src/yajl.c -text
+thirdparty/yajl/src/yajl_alloc.c -text
+thirdparty/yajl/src/yajl_alloc.h -text
+thirdparty/yajl/src/yajl_buf.c -text
+thirdparty/yajl/src/yajl_buf.h -text
+thirdparty/yajl/src/yajl_bytestack.h -text
+thirdparty/yajl/src/yajl_encode.c -text
+thirdparty/yajl/src/yajl_encode.h -text
+thirdparty/yajl/src/yajl_gen.c -text
+thirdparty/yajl/src/yajl_lex.c -text
+thirdparty/yajl/src/yajl_lex.h -text
+thirdparty/yajl/src/yajl_parser.c -text
+thirdparty/yajl/src/yajl_parser.h -text
+thirdparty/yajl/src/yajl_tree.c -text
+thirdparty/yajl/src/yajl_version.c -text

+ 22 - 0
engine/source/persistence/rapidjson/bin/data/glossary.json

@@ -0,0 +1,22 @@
+{
+    "glossary": {
+        "title": "example glossary",
+		"GlossDiv": {
+            "title": "S",
+			"GlossList": {
+                "GlossEntry": {
+                    "ID": "SGML",
+					"SortAs": "SGML",
+					"GlossTerm": "Standard Generalized Markup Language",
+					"Acronym": "SGML",
+					"Abbrev": "ISO 8879:1986",
+					"GlossDef": {
+                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
+						"GlossSeeAlso": ["GML", "XML"]
+                    },
+					"GlossSee": "markup"
+                }
+            }
+        }
+    }
+}

+ 27 - 0
engine/source/persistence/rapidjson/bin/data/menu.json

@@ -0,0 +1,27 @@
+{"menu": {
+    "header": "SVG Viewer",
+    "items": [
+        {"id": "Open"},
+        {"id": "OpenNew", "label": "Open New"},
+        null,
+        {"id": "ZoomIn", "label": "Zoom In"},
+        {"id": "ZoomOut", "label": "Zoom Out"},
+        {"id": "OriginalView", "label": "Original View"},
+        null,
+        {"id": "Quality"},
+        {"id": "Pause"},
+        {"id": "Mute"},
+        null,
+        {"id": "Find", "label": "Find..."},
+        {"id": "FindAgain", "label": "Find Again"},
+        {"id": "Copy"},
+        {"id": "CopyAgain", "label": "Copy Again"},
+        {"id": "CopySVG", "label": "Copy SVG"},
+        {"id": "ViewSVG", "label": "View SVG"},
+        {"id": "ViewSource", "label": "View Source"},
+        {"id": "SaveAs", "label": "Save As"},
+        null,
+        {"id": "Help"},
+        {"id": "About", "label": "About Adobe CVG Viewer..."}
+    ]
+}}

+ 1 - 0
engine/source/persistence/rapidjson/bin/data/readme.txt

@@ -0,0 +1 @@
+sample.json is obtained from http://code.google.com/p/json-test-suite/downloads/detail?name=sample.zip

+ 3315 - 0
engine/source/persistence/rapidjson/bin/data/sample.json

@@ -0,0 +1,3315 @@
+{
+ "a": {
+  "6U閆崬밺뀫颒myj츥휘:$薈mY햚#rz飏+玭V㭢뾿愴YꖚX亥ᮉ푊\u0006垡㐭룝\"厓ᔧḅ^Sqpv媫\"⤽걒\"˽Ἆ?ꇆ䬔未tv{DV鯀Tἆl凸g\\㈭ĭ즿UH㽤": null,
+  "b茤z\\.N": [[
+   "ZL:ᅣዎ*Y|猫劁櫕荾Oj为1糕쪥泏S룂w࡛Ᏺ⸥蚙)",
+   {
+    "\"䬰ỐwD捾V`邀⠕VD㺝sH6[칑.:醥葹*뻵倻aD\"": true,
+    "e浱up蔽Cr෠JK軵xCʨ<뜡癙Y獩ケ齈X/螗唻?<蘡+뷄㩤쳖3偑犾&\\첊xz坍崦ݻ鍴\"嵥B3㰃詤豺嚼aqJ⑆∥韼@\u000b㢊\u0015L臯.샥": false,
+    "l?Ǩ喳e6㔡$M꼄I,(3᝝縢,䊀疅뉲B㴔傳䂴\u0088㮰钘ꜵ!ᅛ韽>": -5514085325291784739,
+    "o㮚?\"춛㵉<\/﬊ࠃ䃪䝣wp6ἀ䱄[s*S嬈貒pᛥ㰉'돀": [{
+     "(QP윤懊FI<ꃣ『䕷[\"珒嶮?%Ḭ壍಻䇟0荤!藲끹bd浶tl\u2049#쯀@僞": {"i妾8홫": {
+      ",M맃䞛K5nAㆴVN㒊햬$n꩑&ꎝ椞阫?/ṏ세뉪1x쥼㻤㪙`\"$쟒薟B煌܀쨝ଢ଼2掳7㙟鴙X婢\u0002": "Vዉ菈᧷⦌kﮞఈnz*<?੃'ahhCFX(\u0007⮊E㭍䱾Gxꥩr❣.洎",
+      "뻴5bDD큯O傆盓왻U?ꞅꐊN鐭᧢τ\"迳豲8\u001b䃥ꂻ䴺ྸH筴,": {
+       "\"L鸔SE㬡XV&~͎'놅蔞눶l匛?'.K氁\\ƢẨ疇mΊ'꽳&!鹠m'|{P痊 秄쒿u\u00111䋧gϩx7t丗D䊨䠻z0.A0": -1.50139930144708198E18,
+       "8鋂뛷?첒B☚>﷜FM\"荭7ꍀ-VR<\/';䁙E9$䩉\f @s?퍪o3^衴cඎ䧪aK鼟q䆨c{䳠5mᒲՙ蘹ᮩ": {
+        "F㲷JGo⯍P덵x뒳p䘧☔\"+ꨲ吿JfR㔹)4n紬G练Q፞!C|": true,
+        "p^㫮솎oc.೚A㤠??r\u000f)⾽⌲們M2.䴘䩳:⫭胃\\፾@Fᭌ\\K": false,
+        "蟌Tk愙潦伩": {
+         "a<\/@ᾛ慂侇瘎": -7271305752851720826,
+         "艓藬/>၄ṯ,XW~㲆w": {"E痧郶)㜓ha朗!N赻瞉駠uC\u20ad辠<Ve?폱!Im䁎搄:*s 9諚Prᵾ뒰髶B̌qWA8梸vS⫊⢳{t㺲q㺈랊뮣RqK밢쳪": [
+          false,
+          {
+           "\u000b=>x퓮⣫P1ࠫLMMX'M刼唳됤": null,
+           "P쓫晥%k覛ዩIUᇸ滨:噐혲lMR5䋈V梗>%幽u頖\\)쟟": null,
+           "eg+昉~矠䧞难\b?gQ쭷筝\\eꮠNl{ಢ哭|]Mn銌╥zꖘzⱷ⭤ᮜ^": [
+            -1.30142114406914976E17,
+            -1.7555215491128452E-19,
+            null,
+            "渾㨝ߏ牄귛r?돌?w[⚞ӻ~廩輫㼧/",
+            -4.5737191805302129E18,
+            null,
+            "xy࿑M[oc셒竓Ⓔx?뜓y䊦>-D켍(&&?XKkc꩖ﺸᏋ뵞K伕6ী)딀P朁yW揙?훻魢傎EG碸9類៌g踲C⟌aEX舲:z꒸许",
+            3808159498143417627,
+            null,
+            {"m試\u20df1{G8&뚈h홯J<\/": {
+             "3ஸ厠zs#1K7:rᥞoꅔꯧ&띇鵼鞫6跜#赿5l'8{7㕳(b/j\"厢aq籀ꏚ\u0015厼稥": [
+              -2226135764510113982,
+              true,
+              null,
+              {
+               "h%'맞S싅Hs&dl슾W0j鿏MםD놯L~S-㇡R쭬%": null,
+               "⟓咔謡칲\u0000孺ꛭx旑檉㶆?": null,
+               "恇I転;￸B2Y`z\\獓w,놏濐撐埵䂄)!䶢D=ഭ㴟jyY": {
+                "$ࡘt厛毣ൢI芁<겿骫⫦6tr惺a": [
+                 6.385779736989334E-20,
+                 false,
+                 true,
+                 true,
+                 [
+                  -6.891946211462334E-19,
+                  null,
+                  {
+                   "]-\\Ꟑ1/薓❧Ὂ\\l牑\u0007A郃)阜ᇒᓌ-塯`W峬G}SDb㬨Q臉⮻빌O鞟톴첂B㺱<ƈmu챑J㴹㷳픷Oㆩs": {
+                    "\"◉B\"pᶉt骔J꩸ᄇᛐi╰栛K쉷㉯鐩!㈐n칍䟅難>盥y铿e୔蒏M貹ヅ8嘋퀯䉶ጥ㏢殊뻳\"絧╿ꉑ䠥?∃蓊{}㣣Gk긔H1哵峱": false,
+                    "6.瀫cN䇮F㧺?\\椯=ڈT䘆4␘8qv": -3.5687501019676885E-19,
+                    "Q?yऴr혴{஀䳘p惭f1ﹸ䅷䕋贲<ྃᄊ繲hq\\b|#QSTs1c-7(䵢\u2069匏絘ꯉ:l毴汞t戀oෟᵶ뮱፣-醇Jx䙬䐁햢0࣫ᡁgrㄛ": "\u0011_xM/蘇Chv;dhA5.嗀绱V爤ﰦi뵲M",
+                    "⏑[\"ugoy^儣횎~U\\섯겜論l2jw஌yD腅̂\u0019": true,
+                    "ⵯɇ䐲᫿࢚!㯢l샅笶戮1꣖0Xe": null,
+                    "劅f넀識b宁焊E찓橵G!ʱ獓뭔雩괛": [{"p⹣켙[q>燣䍃㞽ᩲx:쓤삘7玑퇼0<\/q璂ᑁ[Z\\3䅵䧳\u0011㤧|妱緒C['췓Yꞟ3Z鳱雼P錻BU씧U`ᢶg蓱>.1ӧ譫'L_5V䏵Ц": [
+                     false,
+                     false,
+                     {"22䂍盥N霂얢<F8꼵7Gసyh뀍g᦭ꄢx硴嬢\u001a?E괆T|;7犟\"Wt%䐩O⨵t&#ᬋK'蜍Ძ揔⾠鲂T멷靃\u0018䓞cE": {"f=䏏츜瞾zw?孡鏣\\铀᫞yẆg(\u0011M6(s2]`ਫ": [[[{
+                      "'y몱纣4S@\\,i㷯럹Ua充Tᣢ9躘Zଞ쥿䐊s<\/刎\\\"뉦-8/": "蜑.X0꭛낢륹i젨ꚁ<8?s볕蝡|Q✬᯦@\\G㑢屿Mn졾J굤⥟JW뤵苑r쁕툄嵵?⾥O",
+                      "^1挲~[n귆誈央碠멪gI洷": -8214236471236116548,
+                      "sሣ%娌暡clr蟜㑓2\u000bS❟_X㨔⚴5~蔷ꀇ|Xu㬖,꤭卹r(g믇쩍%췸앙|栣U\\2]䤉+啠菡ꯎT鉹m\n/`SzDᅼ鞶": 1.1217523390167132E-19,
+                      "u톇=黚\\ ꂮ췵L>躰e9⑩_뵜斌n@B}$괻Yᐱ@䧋V\"☒-諯cV돯ʠ": true,
+                      "Ű螧ᔼ檍鍎땒딜qꄃH뜣<獧ूCY吓⸏>XQ㵡趌o끬k픀빯a(ܵ甏끆୯/6Nᪧ}搚ᆚ짌P牰泱鈷^d꣟#L삀\"㕹襻;k㸊\\f+": true,
+                      "쎣\",|⫝̸阊x庿k잣v庅$鈏괎炔k쬪O_": [
+                       "잩AzZGz3v愠ꉈⵎ?㊱}S尳௏p\r2>췝IP䘈M)w|\u000eE",
+                       -9222726055990423201,
+                       null,
+                       [
+                        false,
+                        {"´킮'뮤쯽Wx讐V,6ᩪ1紲aႈ\u205czD": [
+                         -930994432421097536,
+                         3157232031581030121,
+                         "l貚PY䃛5@䭄<nW\u001e",
+                         [
+                          3.801747732605161E18,
+                          [
+                           null,
+                           false,
+                           {
+                            "": 4.0442013775147072E16,
+                            "2J[sᡪ㞿|n'#廲꯬乞": true,
+                            "B[繰`\\㏏a̼㨀偛㽓<\/꥖ᵈO让\r43⡩徑ﬓ๨ﮕx:㣜o玐ꉟぢC珵὆ᓞ쇓Qs氯였9駵q혃Ljꂔ<\/昺+t䐋༻猙c沪~櫆bpJ9UᏐ:칣妙!皗F4㑄탎䕀櫳振讓": 7.3924182188256287E18,
+                            "H磵ai委曷n柋T<\/勿F&:ꣴfU@㿗榻Lb+?퍄sp\"᪟~>귻m㎮琸f": 1.0318894506812084E-19,
+                            "࢜⩢Ш䧔1肽씮+༎ᣰ闺馺窃䕨8Mƶq腽xc(៯夐J5굄䕁Qj_훨/~価.䢵慯틠퇱豠㼇Qﵘ$DuSp(8Uญ<\/ಟ룴𥳐ݩ$": 8350772684161555590,
+                            "ㆎQ䄾\u001bpᩭ${[諟^^骴᤮b^ㅥI┧T㉇⾞\"绦<AYJ⒃-oF<\/蛎mm;obh婃ᦢ": false,
+                            "䔤䣈?汝.p襟&d㱅\\Jᚠ@?O첁ࢽ휔VR蔩|㒢柺": [[
+                             "-ꕨ岓棻r@鿆^3~䪤Ѐ狼︌ﹲ\\᝸MlE쵠Q+",
+                             null,
+                             false,
+                             3346674396990536343,
+                             null,
+                             {
+                              "": null,
+                              "/䏨S쨑,&繷㉥8C엮赸3馢|뇲{鄎ꗇqFﶉ雕UD躢?Ꟛအ꽡[hᕱᗅ㦋쭞Mユ茍?L槽암V#성唐%㣕嘵\\ڹ(嘏躿&q": [
+                               -1364715155337673920,
+                               false,
+                               -8197733031775379251,
+                               "E팗鮲JwH\\觡܈᜝\"+뉞娂N휗v噙၂깼\u001dD帒l%-斔N",
+                               -3.844267973858711E-20,
+                               [{"쬯(褈Q 蟚뿢 /ⱖ㻥\u0017/?v邘䃡0U.Z1x?鯔V尠8Em<": [[[
+                                null,
+                                [
+                                 null,
+                                 -5841406347577698873,
+                                 "킷\"S⋄籞繗솸ᵣ浵w쑿ퟗ7nᎏx3앙z㘌쿸I葥覯㬏0ᆝb汆狺뷘ႀnꋋ",
+                                 -1227911573141158702,
+                                 {
+                                  "u㉮PᾺV鵸A\\g*ࡗ9슟晭+ͧↀ쿅H\u001c꾣犓}癇恛ᗬ黩䟘X梑鐆e>r䰂f矩'-7䡭桥Dz兔V9谶居㺍ᔊ䩯덲.\u001eL0ὅㅷ釣": [{
+                                   "<쯬J卷^숞u࠯䌗艞R9닪g㐾볎a䂈歖意:%鐔|ﵤ|y}>;2,覂⶚啵tb*仛8乒㓶B࿠㯉戩oX 貘5V嗆렽낁߼4h䧛ꍺM空\\b꿋貼": 8478577078537189402,
+                                   "VD*|吝z~h譺aᯒ": {
+                                    "YI췢K<\/濳xNne玗rJo쾘3핰鴊\"↱AR:ࢷ\"9?\"臁說)?誚ꊏe)_D翾W?&F6J@뺾ꍰNZ醊Z쾈വH嶿?炫㷱鬰M겈<bS}㎥l|刖k": {"H7鷮퇢_k": [
+                                     true,
+                                     "s㟑瀭좾쮀⑁Y찺k맢戲쀸俻ກ6儮끗扖puߖꜻ馶rꈞ痘?3ྚ畊惘䎗\"vv)*臔웅鿈䧲^v,껛㰙J <ᚶ5",
+                                     7950276470944656796,
+                                     4.9392301536234746E17,
+                                     -4796050478201554639,
+                                     "yꬴc<3㻚",
+                                     "o塁\u20a4蒵鮬裢CᴧnB㭱f.",
+                                     false,
+                                     [
+                                      false,
+                                      "㡐弑V?瀆䰺q!출㇞yᘪ꼼(IS~Ka 烿ꟿ샕桤\u0005HQҹ㯪罂q萾⚇懋⦕둡v",
+                                      1862560050083946970,
+                                      "\u20b6[|(뭹gꍒ펉O轄Dl묽]ﯨ髯QEbA㒾m@롴礠㕓2땫n6ْ엘঵篳R잷꙲m색摪|@㿫5aK设f胭r8/NI4춫栵\\꯬2]",
+                                      false,
+                                      {
+                                       "\u000b7*㙛燏.~?䔊p搕e_拺艿뷍f{ꔻ1s驙`$Ė戧?q⋬沭?塷᭚蹀unoa5": {
+                                        "S귯o紞㾕ᅶ侏銇12|ʟ畴iNAo?|Sw$M拲գ㭄紧螆+,梔": null,
+                                        "㭚0?xB疱敻ேBPwv뾃熉(ӠpJ]갢\"Bj'\u0016GE椱<\/zgៅx黢礇h},M9ﴦ?LḨ": "Si B%~㬒E",
+                                        "핇㉊살㍢숨~ȪRo䦅D桺0z]﬽蠆c9ᣨyPP㿷U~㞐?쯟퍸宒뉆U|}㉓郾ࣻ*櫎꼪䁗s?~7\u001e㘔h9{aឋ}:㶒P8": [{"\\R囡쐬nN柋琍؛7칾 :㶃衇徜V 深f1淍♠i?3S角폞^ᆞ\u20e8ṰD\u0007秡+躒臔&-6": {
+                                         "䨑g.fh㔗=8!\"狿ൻLU^뻱g䲚㻐'W}k欤?๒鲇S꧗䫾$ĥ피": -794055816303360636,
+                                         "外頮詋~텡竆繃䏩苨뾺朁꼃瘹f*㉀枙NH/\u2027ꢁ}j묎vペq︉식뜡Od5 N顯ି烅仟Qfㆤ嚢(i䬅c;맧?嶰㩼츱獡?-": {
+                                          "e݆㍡⬬'2㻒?U篲鿄\"隻Ҭ5NꭰꤺBꀈ拾᩺[刯5곑Na램ﴦ዆]㝓qw钄\u001b\"Y洊䗿祏塥迵[⼞⠳P$꠱5먃0轢`": [{"獰E賝﫚b먭N긆Ⰹ史2逶ꜛ?H짉~?P}jj}侷珿_T>᭨b,⻁鈵P䕡䀠८ⱄ홎鄣": {
+                                           "@?k2鶖㋮\"Oರ K㨇廪儲\u0017䍾J?);\b*묀㗠섳햭1MC V": null,
+                                           "UIICP!BUA`ᢈ㋸~袩㗪⾒=fB﮴l1ꡛ죘R辂여ҳ7쮡<䩲`熕8頁": 4481809488267626463,
+                                           "Y?+8먙ᚔ鋳蜩럶1㥔y璜౩`": [
+                                            null,
+                                            1.2850335807501874E-19,
+                                            "~V2",
+                                            2035406654801997866,
+                                            {
+                                             "<숻1>\"": -8062468865199390827,
+                                             "M㿣E]}qwG莎Gn᝶(ꔙ\\D⬲iꇲs寢t駇S뀡ꢜ": false,
+                                             "pꝤ㎏9W%>M;-U璏f(^j1?&RB隧 忓b똊E": "#G?C8.躬ꥯ'?냪#< 渟&헿란zpo왓Kj}鷧XﻘMツb䕖;㪻",
+                                             "vE풤幉xz뱕쫥Ug㦲aH} ᣟp:鬼Yᰟ<Fɋ잣緂頒⺏䉲瑑䅂,C~ޅG!f熢-B7~9Pqࡢ[츑#3ꕎ,Öඳ聁⩅㵧춀뿍xy䌏͂tdj!箧᳆|9蚡돬": -2.54467378964089632E17,
+                                             "䵈䅦5빖,궆-:໿댾仫0ᙚyᦝhqᚄ": null,
+                                             "侯Y\"湛졯劇U셎YX灍ⅸ2伴|筧\\䁒㶶᷏쁑Waᦵᗱ㜏늾膠<Jc63<G\u20fe䇹66僣k0O\"_@U": null,
+                                             "姪y$#s漴JH璌Ӊ脛J㝾펔ﹴoꈶ㚸PD:薠쏖%說ថ蹂1]⾕5튄": {
+                                              "᝾Huw3䮅如쿺䍟嫝]<鰨ݷ?꯯䫓傩|ᐶස媽\\澒≡闢": "Mm\"쏇ᯄ졽\"楇<\/ꥆ흭局n隴@鿣w⠊4P贈徎W㊋;䤞'.팇蒁䡴egpx嗎wஅ獗堮ᛐnˁ︖䀤4噙?໚郝᱋ޘॎt恑姫籕殥陃\"4[ꝬqL4Wꠎx",
+                                              "ℇj遌5B뒚\" U": "硄ꏘ{憠굏:&t䌨m Cઌ쿣鞛XFꠟs䝭ﶃ\"格a0x闊昵吲L\\杚聈aꁸj싹獅\"灟ﱡ馆*굖糠<ꔏ躎",
+                                              "톌賠弳ꟍb\"螖X50sĶ晠3f秂坯Iⓟ:萘": 5.573183333596288E18,
+                                              "%䴺": [[[[
+                                               -6957233336860166165,
+                                               false,
+                                               null,
+                                               {
+                                                "\"\\௮茒袀ᕥ23ୃ괶?䕎.嚲◉㏞L+ᵡ艱hL콇붆@": null,
+                                                "%螥9ꭌ<\/-t": true,
+                                                ",9|耢椸䁓Xk죱\u0015$Ώ鲞[?엢ᝲ혪즈ⴂ▂ℴ㗯\"g뺘\\ꍜ#\u0002ヮ}ሎ芲P[鹮轧@냲䃦=#(": 2.78562909315899616E17,
+                                                "R?H䧰ⵇ<,憰쮼Q總iR>H3镔ᴚ斦\\鏑r*2橱G⼔F/.j": true,
+                                                "RK좬뎂a홠f*f㱉ᮍ⦋潙㨋Gu곌SGI3I뿐\\F',)t`荁蘯囯ﮉ裲뇟쥼_ገ驪▵撏ᕤV": 1.52738225997956557E18,
+                                                "^k굲䪿꠹B逤%F㱢漥O披M㽯镞竇霒i꼂焅륓\u00059=皫之눃\u2047娤閍銤唫ၕb<\/w踲䔼u솆맚,䝒ᝳ'/it": "B餹饴is権ꖪ怯ꦂẉဎt\"!凢谵⧿0\\<=(uL䷍刨쑪>俆揓Cy襸Q힆䆭涷<\/ᐱ0ɧ䗾䚹\\ኜ?ꄢᇘ`䴢{囇}᠈䴥X4퓪檄]ꥷ/3謒ሴn+g騍X",
+                                                "GgG꽬[(嫓몍6\u0004궍宩㙻/>\u0011^辍dT腪hxǑ%ꊇk,8(W⧂結P鬜O": [{
+                                                 "M㴾c>\\ᓲ\u0019V{>ꤩ혙넪㭪躂TS-痴໸闓⍵/徯O.M㏥ʷD囎⧔쁳휤T??鉬뇙=#ꢫ숣BX䭼<\/d똬졬g榿)eꨋﯪ좇첻<?2K)": null,
+                                                 "Z17縬z]愀䖌 ᾋBCg5딒국憍꾓aⲷ턷u:U촳驿?雺楶\u0001\u001c{q*ᰗ苑B@k揰z.*蓗7ረIm\"Oᱍ@7?_": true,
+                                                 "㺃Z<": -4349275766673120695,
+                                                 "휃䠂fa塆ffixKe'덬鏗੄뺾w࠾鑎k땢m*႑햞鐮6攊&虜h黚,Y䱳Sﭼ둺pN6": [
+                                                  false,
+                                                  "IΎ䣲,\"ᬮ˪癘P~Qlnx喁Sᮔ༬˨I珌m䜛酛\u0003iꐸ㦧cQ帲晼D' \\(粋wQcN\\뵰跈",
+                                                  [
+                                                   "D0\\L?M1쥍Kaꏌsd+盌귤憊tz䌣댐בO坂wϢ%ὒgp,Ai⎧ᶆI餾ꦍ棩嘅᳉怴%m]ၶis纖D凜镧o심b U",
+                                                   {
+                                                    "?଼\u0011Rv&^[+匚I趈T媫\u0010.䥤ᆯ1q僤HydⲰl㒽K'ᅾiౕ豲초딨@\u0013J'쪪VD౼P4Ezg#8*㋤W馓]c쿯8": false,
+                                                    "c/擯X5~JmK䵶^쐎ച|B|u[솝(X뚤6v}W㤘⠛aR弌臌쾭諦eⒷ僡-;㩩⭖ⷴ徆龄갬{䱓ᥩ!﯏⊚ᇨ<v燡露`:볉癮꨽り★Ax7Ꮀ譥~舑\\Vꍋ\"$)v": "e&sFF쬘OBd슊寮f蠛জ봞mn~锆竒G脁\"趵G刕䕳&L唽붵<\/I,X팚B⍥X,kԇҗ眄_慡:U附ᓚA蕧>\u001a\u0011\";~쓆BH4坋攊7힪",
+                                                    "iT:L闞椕윚*滛gI≀Wਟඊ'ꢆ縺뱹鮚Nꩁ᧬蕼21줧\\䋯``⍐\\㏱鳨": 1927052677739832894,
+                                                    "쮁缦腃g]礿Y㬙 fヺSɪ꾾N㞈": [
+                                                     null,
+                                                     null,
+                                                     {
+                                                      "!t,灝Y 1䗉罵?c饃호䉂Cᐭ쒘z(즽sZG㬣sഖE4뢜㓕䏞丮Qp簍6EZឪ겛fx'ꩱQ0罣i{k锩*㤴㯞r迎jTⲤ渔m炅肳": [
+                                                       -3.3325685522591933E18,
+                                                       [{"㓁5]A䢕1룥BC?Ꙍ`r룔Ⳛ䙡u伲+\u0001്o": [
+                                                        null,
+                                                        4975309147809803991,
+                                                        null,
+                                                        null,
+                                                        {"T팘8Dﯲ稟MM☻㧚䥧/8ﻥ⥯aXLaH\"顾S☟耲ît7fS෉놁뮔/ꕼ䓈쁺4\\霶䠴ᩢ<\/t4?죵>uD5➶༆쉌럮⢀秙䘥\u20972ETR3濡恆vB? ~鸆\u0005": {
+                                                         "`閖m璝㥉b뜴?Wf;?DV콜\u2020퍉౓擝宏ZMj3mJ먡-傷뱙yח㸷꥿ ໘u=M읝!5吭L4v\\?ǎ7C홫": null,
+                                                         "|": false,
+                                                         "~Ztᛋ䚘\\擭㗝傪W陖+㗶qᵿ蘥ᙄp%䫎)}=⠔6ᮢS湟-螾-mXH?cp": 448751162044282216,
+                                                         "\u209fad놹j檋䇌ᶾ梕㉝bוּ<d䗱:줰M酄\u0000X#_r獢A饓ꍗُKo_跔?ᪧ嵜鼲<": null,
+                                                         "ꆘ)ubI@h@洭Ai㜎䏱k\u0003?T䉐3间%j6j棍j=❁\\U毮ᬹ*8䀔v6cpj⭬~Q꿾뺶펵悡!쩭厝l六㽫6퇓ޭ2>": {"?苴ꩠD䋓帘5騱qﱖPF?☸珗顒yU ᡫcb䫎 S@㥚gꮒ쎘泴멖\\:I鮱TZ듒ᶨQ3+f7캙\"?\f풾\\o杞紟﻽M.⏎靑OP": [
+                                                          -2.6990368911551596E18,
+                                                          [{"䒖@<᰿<\/⽬tTr腞&G%᳊秩蜰擻f㎳?S㵧\r*k뎾-乢겹隷j軛겷0룁鮁": {")DO0腦:춍逿:1㥨่!蛍樋2": [{
+                                                           ",ꌣf侴笾m๫ꆽ?1?U?\u0011ꌈꂇ": {
+                                                            "x捗甠nVq䅦w`CD⦂惺嘴0I#vỵ} \\귂S끴D얾?Ԓj溯\"v餄a": {
+                                                             "@翙c⢃趚痋i\u0015OQ⍝lq돆Y0pࢥ3쉨䜩^<8g懥0w)]䊑n洺o5쭝QL댊랖L镈Qnt⪟㒅십q헎鳒⮤眉ᔹ梠@O縠u泌ㄘb榚癸XޔFtj;iC": false,
+                                                             "I&뱋゘|蓔䔕측瓯%6ᗻHW\\N1貇#?僐ᗜgh᭪o'䗈꽹Rc욏/蔳迄༝!0邔䨷푪8疩)[쭶緄㇈୧ፐ": {
+                                                              "B+:ꉰ`s쾭)빼C羍A䫊pMgjdx䐝Hf9᥸W0!C樃'蘿f䫤סи\u0017Jve? 覝f둀⬣퓉Whk\"஼=չﳐ皆笁BIW虨쫓F廰饞": -642906201042308791,
+                                                              "sb,XcZ<\/m㉹ ;䑷@c䵀s奤⬷7`ꘖ蕘戚?Feb#輜}p4nH⬮eKL트}": [
+                                                               "RK鳗z=袤Pf|[,u욺",
+                                                               "Ẏᏻ罯뉋⺖锅젯㷻{H䰞쬙-쩓D]~\u0013O㳢gb@揶蔉|kᦂ❗!\u001ebM褐sca쨜襒y⺉룓",
+                                                               null,
+                                                               null,
+                                                               true,
+                                                               -1.650777344339075E-19,
+                                                               false,
+                                                               "☑lꄆs힨꤇]'uTന⌳농].1⋔괁沰\"IWഩ\u0019氜8쟇䔻;3衲恋,窌z펏喁횗?4?C넁问?ᥙ橭{稻Ⴗ_썔",
+                                                               "n?]讇빽嗁}1孅9#ꭨ靶v\u0014喈)vw祔}룼쮿I",
+                                                               -2.7033457331882025E18,
+                                                               {
+                                                                ";⚃^㱋x:饬ኡj'꧵T☽O㔬RO婎?향ᒭ搩$渣y4i;(Q>꿘e8q": "j~錘}0g;L萺*;ᕭꄮ0l潛烢5H▄쳂ꏒוֹꙶT犘≫x閦웧v",
+                                                                "~揯\u2018c4職렁E~ᑅቚꈂ?nq뎤.:慹`F햘+%鉎O瀜쟏敛菮⍌浢<\/㮺紿P鳆ࠉ8I-o?#jﮨ7v3Dt赻J9": null,
+                                                                "ࣝW䌈0ꍎqC逖,횅c၃swj;jJS櫍5槗OaB>D踾Y": {"㒰䵝F%?59.㍈cᕨ흕틎ḏ㋩B=9IېⓌ{:9.yw}呰ㆮ肒᎒tI㾴62\"ዃ抡C﹬B<\/<EO꽓ᇕu&鋫\\禞퐹u꒍.7훯ಶ2䩦͉ᶱf깵ᷣ늎": [
+                                                                 5.5099570884646902E18,
+                                                                 "uQN濿m臇<%?谣鮢s]]x0躩慌闋<;( 鋤.0ᠵd1#벘a:Gs?햷'.)ㅴ䞟琯崈FS@O㌛ᓬ抢큌ើ냷쿟툥IZn[惵ꐧ3뙍[&v憙J>촋jo朣",
+                                                                 [
+                                                                  -7675533242647793366,
+                                                                  {"ᙧ呃:[㒺쳀쌡쏂H稈㢤\u001dᶗGG-{GHྻຊꡃ哸䵬;$?&d\\⥬こN圴됤挨-'ꕮ$PU%?冕눖i魁q騎Q": [
+                                                                   false,
+                                                                   [[
+                                                                    7929823049157504248,
+                                                                    [[
+                                                                     true,
+                                                                     "Z菙\u0017'eꕤ᱕l,0\\X\u001c[=雿8蠬L<\/낲긯W99g톉4ퟋb㝺\u0007劁'!麕Q궈oW:@X၎z蘻m絙璩귓죉+3柚怫tS捇蒣䝠-擶D[0=퉿8)q0ٟ",
+                                                                     "唉\nFA椭穒巯\\䥴䅺鿤S#b迅獘 ﶗ꬘\\?q1qN犠pX꜅^䤊⛤㢌[⬛휖岺q唻ⳡ틍\"㙙Eh@oA賑㗠y必Nꊑᗘ",
+                                                                     -2154220236962890773,
+                                                                     -3.2442003245397908E18,
+                                                                     "Wᄿ筠:瘫퀩?o貸q⊻(᎞KWf宛尨h^残3[U(='橄",
+                                                                     -7857990034281549164,
+                                                                     1.44283696979059942E18,
+                                                                     null,
+                                                                     {"ꫯAw跭喀 ?_9\"Aty背F=9缉ྦྷ@;?^鞀w:uN㘢Rỏ": [
+                                                                      7.393662029337442E15,
+                                                                      3564680942654233068,
+                                                                      [
+                                                                       false,
+                                                                       -5253931502642112194,
+                                                                       "煉\\辎ೆ罍5⒭1䪁䃑s䎢:[e5}峳ﴱn騎3?腳Hyꏃ膼N潭錖,Yᝋ˜YAၓ㬠bG렣䰣:",
+                                                                       true,
+                                                                       null,
+                                                                       {
+                                                                        "⒛'P&%죮|:⫶춞": -3818336746965687085,
+                                                                        "钖m<\/0ݎMtF2Pk=瓰୮洽겎.": [[
+                                                                         -8757574841556350607,
+                                                                         -3045234949333270161,
+                                                                         null,
+                                                                         {
+                                                                          "Ꮬr輳>⫇9hU##w@귪A\\C 鋺㘓ꖐ梒뒬묹㹻+郸嬏윤'+g<\/碴,}ꙫ>손;情d齆J䬁ຩ撛챝탹/R澡7剌tꤼ?ặ!`⏲睤\u00002똥଴⟏": null,
+                                                                          "\u20f2ܹe\\tAꥍư\\x当뿖렉禛;G檳ﯪS૰3~㘠#[J<}{奲 5箉⨔{놁<\/釿抋,嚠/曳m&WaOvT赋皺璑텁": [[
+                                                                           false,
+                                                                           null,
+                                                                           true,
+                                                                           -5.7131445659795661E18,
+                                                                           "萭m䓪D5|3婁ఞ>蠇晼6nﴺPp禽羱DS<睓닫屚삏姿",
+                                                                           true,
+                                                                           [
+                                                                            -8759747687917306831,
+                                                                            {
+                                                                             ">ⓛ\t,odKr{䘠?b퓸C嶈=DyEᙬ@ᴔ쨺芛髿UT퓻春<\/yꏸ>豚W釺N뜨^?꽴﨟5殺ᗃ翐%>퍂ဿ䄸沂Ea;A_\u0005閹殀W+窊?Ꭼd\u0013P汴G5썓揘": 4.342729067882445E-18,
+                                                                             "Q^즾眆@AN\u0011Kb榰냎Y#䝀ꀒᳺ'q暇睵s\"!3#I⊆畼寤@HxJ9": false,
+                                                                             "⿾D[)袨㇩i]웪䀤ᛰMvR<蟏㣨": {"v퇓L㪱ꖣ豛톤\\곱#kDTN": [{
+                                                                              "(쾴䡣,寴ph(C\"㳶w\"憳2s馆E!n!&柄<\/0Pꈗſ?㿳Qd鵔": {"娇堰孹L錮h嵅⛤躏顒?CglN束+쨣ﺜ\\MrH": {"獞䎇둃ቲ弭팭^ꄞ踦涟XK錆쳞ឌ`;੶S炥騞ଋ褂B៎{ڒ䭷ᶼ靜pI荗虶K$": [{"◖S~躘蒉꫿輜譝Q㽙闐@ᢗ¥E榁iء5┄^B[絮跉ᰥ遙PWi3wㄾⵀDJ9!w㞣ᄎ{듒ꓓb6\\篴??c⼰鶹⟧\\鮇ꮇ": [[
+                                                                               654120831325413520,
+                                                                               -1.9562073916357608E-19,
+                                                                               {
+                                                                                "DC(昐衵ἡ긙갵姭|֛[t": 7.6979110359897907E18,
+                                                                                "J␅))嫼❳9Xfd飉j7猬ᩉ+⤻眗벎E鰉Zᄊ63zၝ69}ZᶐL崭ᦥ⡦靚⋛ꎨ~i㨃咊ꧭo䰠阀3C(": -3.5844809362512589E17,
+                                                                                "p꣑팱쒬ꎑ뛡Ꙩ挴恍胔&7ᔈ묒4Hd硶훐㎖zꢼ豍㿢aሃ=<\/湉鵲EӅ%$F!퍶棌孼{O駍਺geu+": ")\u001b잓kŀX쩫A밁®ڣ癦狢)扔弒p}k縕ꩋ,䃉tࣼi",
+                                                                                "ァF肿輸<솄G-䢹䛸ꊏl`Tqꕗ蒞a氷⸅ᴉ蠰]S/{J왲m5{9.uέ~㕚㣹u>x8U讁B덺襪盎QhVS맅킃i识{벂磄Iහ䙅xZy/抍૭Z鲁-霳V据挦ℒ": null,
+                                                                                "㯛|Nꐸb7ⵐb?拠O\u0014ކ?-(EꞨ4ꕷᄤYᯕOW瞺~螸\"욿ќ<u鵵઎⸊倾쑷෻rT⪄牤銱;W殆͢芄ਰ嚝훚샢⊿+㲽": null,
+                                                                                "単逆ົ%_맛d)zJ%3칧_릟#95䌨怡\u001ci턠ॣi冘4赖'ਐ䧐_栔!": {
+                                                                                 "*?2~4㲌᭳쯁ftႷ1#oJ\b䊇镇됔 \u2079x䛁㊝ᮂN;穽跖s휇ᣄ홄傷z⸷(霸!3y뺏M쒿햏۽v㳉tở心3黎v쭻 Rp཮Vr~T?&˴k糒븥쩩r*D": null,
+                                                                                 "8@~홟ꔘk1[": -5570970366240640754,
+                                                                                 "BZt鏦ꡬc餖  s(mᛴ\u0000◄d腑t84C⟐坯VṊ뉙'噱Ꝕ珽GC顀?허0ꞹ&돇䛭C䷫](": 2.4303828213012387E-20,
+                                                                                 "y撔Z외放+}ḑ骈ᙝ&\u0016`G便2|-e]঳?QF㜹YF\"㿒緄햷㈟塚䷦ୀጤlM蘸N㾆▛럪㞂tᕬ镈쇝喠l amcxPnm\u001a᱋<\/]_]ﻹ瞧?H": false,
+                                                                                 "ፏ氏묢뜚I[♺뽛x?0H봬Wpn꨹Ra䝿쌑{㴂ni祻윸A'y|⺴ᚘ庌9{$恲{톽=m#@6ᨧfgs44陎J#<Ễ쨓瀵❩a୛㷉㙉ܸ◠냔嬯~呄籁羥镳": false,
+                                                                                 "㘱{<頬22?IF@곊I겂嶻L᝛D{@r쒂?IAᣧ洪惒誸b徂z췺꾍㠭\\刊%禨쌐ⶣ仵\\P[:47;<ᇅ<\/": {
+                                                                                  "^U釳-v㢈ꗝ◄菘rᜨi;起kR犺䵫\u0000锍쁙m-ԙ!lḃ꛸뻾F(W귛y": "#ᠺH㸢5v8_洑C",
+                                                                                  "䔵໳$ᙠ6菞\u206e摎q圩P|慍sV4:㜾(I溞I?": -6569206717947549676,
+                                                                                  "透Ꞃ緵퇝8 >e㺰\"'㌢ƐW\u0004瞕>0?V鷵엳": true,
+                                                                                  "뤥G\\迋䠿[庩'꼡\u001aiᩮV쯁ᳪ䦪Ô;倱ନ뛁誈": null,
+                                                                                  "쥹䄆䚟Q榁䎐᢭<\/2㕣p}HW蟔|䃏꿈ꚉ锳2Pb7㙑Tⅹᵅ": {
+                                                                                   "Y?֭$>#cVBꩨ:>eL蒁務": {
+                                                                                    "86柡0po 䏚&-捑Ћ祌<\/휃-G*㶢הּ쩍s㶟餇c걺yu꽎還5*턧簕Og婥SꝐ": null,
+                                                                                    "a+葞h٥ࠆ裈嗫ﵢ5輙퀟ᛜ,QDﹼ⟶Y騠锪E_|x죗j侵;m蜫轘趥?븅w5+mi콛L": {
+                                                                                     ";⯭ﱢ!买F⽍柤鶂n䵣V㫚墱2렾ELEl⣆": [
+                                                                                      true,
+                                                                                      -3.6479311868339015E-18,
+                                                                                      -7270785619461995400,
+                                                                                      3.334081886177621E18,
+                                                                                      2.581457786298155E18,
+                                                                                      -6.605252412954115E-20,
+                                                                                      -3.9232347037744167E-20,
+                                                                                      {
+                                                                                       "B6㊕.k1": null,
+                                                                                       "ZAꄮJ鮷ᳱo갘硥鈠䠒츼": {
+                                                                                        "ᕅ}럡}.@y陪鶁r業'援퀉x䉴ﵴl퍘):씭脴ᥞhiꃰblﲂ䡲엕8߇M㶭0燋標挝-?PCwe⾕J碻Ᾱ䬈䈥뷰憵賣뵓痬+": {"a췩v礗X⋈耓ፊf罅靮!㔽YYᣓw澍33⎔芲F|\"䜏T↮輦挑6ᓘL侘?ᅥ]덆1R௯✎餘6ꏽ<\/௨\\?q喷ꁫj~@ulq": {"嗫欆뾔Xꆹ4H㌋F嵧]ࠎ]㠖1ꞤT<$m뫏O i댳0䲝i": {"?෩?\u20cd슮|ꯆjs{?d7?eNs⢚嫥氂䡮쎱:鑵롟2hJꎒﯭ鱢3춲亄:뼣v䊭諱Yj択cVmR䩃㘬T\"N홝*ै%x^F\\_s9보zz4淗?q": [
+                                                                                         null,
+                                                                                         "?",
+                                                                                         2941869570821073737,
+                                                                                         "{5{殇0䝾g6밖퍋臩綹R$䖭j紋釰7sXI繳漪행y",
+                                                                                         false,
+                                                                                         "aH磂?뛡#惇d婅?Fe,쐘+늵䍘\"3r瘆唊勐j⳧࠴ꇓ<\/唕윈x⬌讣䋵%拗ᛆⰿ妴᝔M2㳗必꧂淲?ゥ젯檢<8끒MidX䏒3᳻Q▮佐UT|⤪봦靏⊏",
+                                                                                         [[{
+                                                                                          "颉(&뜸귙{y^\"P퟉춝Ჟ䮭D顡9=?}Y誱<$b뱣RvO8cH煉@tk~4ǂ⤧⩝屋SS;J{vV#剤餓ᯅc?#a6D,s": [
+                                                                                           -7.8781018564821536E16,
+                                                                                           true,
+                                                                                           [
+                                                                                            -2.28770899315832371E18,
+                                                                                            false,
+                                                                                            -1.0863912140143876E-20,
+                                                                                            -6282721572097446995,
+                                                                                            6767121921199223078,
+                                                                                            -2545487755405567831,
+                                                                                            false,
+                                                                                            null,
+                                                                                            -9065970397975641765,
+                                                                                            [
+                                                                                             -5.928721243413937E-20,
+                                                                                             {"6촊\u001a홯kB0w撨燠룉{绎6⳹!턍贑y▾鱧ժ[;7ᨷ∀*땒䪮1x霆Hᩭ☔\"r䝐7毟ᝰr惃3ꉭE+>僒澐": [
+                                                                                              "Ta쎩aƝt쵯ⰪVb",
+                                                                                              [
+                                                                                               -5222472249213580702,
+                                                                                               null,
+                                                                                               -2851641861541559595,
+                                                                                               null,
+                                                                                               4808804630502809099,
+                                                                                               5657671602244269874,
+                                                                                               "5犲﨣4mᥣ?yf젫꾯|䋬잁$`Iⳉﴷ扳兝,'c",
+                                                                                               false,
+                                                                                               [
+                                                                                                null,
+                                                                                                {
+                                                                                                 "DyUIN쎾M仼惀⮥裎岶泭lh扠\u001e礼.tEC癯튻@_Qd4c5S熯A<\/\6U윲蹴Q=%푫汹\\\u20614b[௒C⒥Xe⊇囙b,服3ss땊뢍i~逇PA쇸1": -2.63273619193485312E17,
+                                                                                                 "Mq꺋貘k휕=nK硍뫞輩>㾆~἞ࡹ긐榵l⋙Hw뮢帋M엳뢯v⅃^": 1877913476688465125,
+                                                                                                 "ᶴ뻗`~筗免⚽টW˃⽝b犳䓺Iz篤p;乨A\u20ef쩏?疊m㝀컩뫡b탔鄃ᾈV(遢珳=뎲ିeF仢䆡谨8t0醄7㭧瘵⻰컆r厡궥d)a阄፷Ed&c﯄伮1p": null,
+                                                                                                 "⯁w4曢\"(欷輡": "\"M᭫]䣒頳B\\燧ࠃN㡇j姈g⊸⺌忉ꡥF矉স%^",
+                                                                                                 "㣡Oᄦ昵⫮Y祎S쐐級㭻撥>{I$": -378474210562741663,
+                                                                                                 "䛒掷留Q%쓗1*1J*끓헩ᦢ﫫哉쩧EↅIcꅡ\\?ⴊl귛顮4": false,
+                                                                                                 "寔愆샠5]䗄IH贈=d﯊/偶?ॊn%晥D視N򗘈'᫂⚦|X쵩넽z질tskxDQ莮Aoﱻ뛓": true,
+                                                                                                 "钣xp?&\u001e侉/y䴼~?U篔蘚缣/I畚?Q绊": -3034854258736382234,
+                                                                                                 "꺲໣眀)⿷J暘pИfAV삕쳭Nꯗ4々'唄ⶑ伻㷯騑倭D*Ok꧁3b␽_<\/챣Xm톰ၕ䆄`*fl㭀暮滠毡?": [
+                                                                                                  "D男p`V뙸擨忝븪9c麺`淂⢦Yw⡢+kzܖ\fY1䬡H歁)벾Z♤溊-혰셢?1<-\u0005;搢Tᐁle\\ᛵߓﭩ榩<QF;t=?Qꀞ",
+                                                                                                  [
+                                                                                                   null,
+                                                                                                   [{"-췫揲ᬨ墊臸<ࠒH跥 㔭쥃㫯W=z[wধ╌<~yW楄S!⑻h즓lĖN￧篌W듷튗乵᪪템먵Pf悥ᘀk䷭焼\\讄r擁鐬y6VF<\/6랿p)麡ꁠ㪁\"pழe": [
+                                                                                                    "#幎杴颒嶈)ㄛJ.嶤26_⋌东챯ꠉ⤋ؚ/⏚%秼Q룠QGztᄎ㎷អI翰Xp睔鍜ꨍ",
+                                                                                                    {",T?": [
+                                                                                                     false,
+                                                                                                     [[
+                                                                                                      true,
+                                                                                                      7974824014498027996,
+                                                                                                      false,
+                                                                                                      [
+                                                                                                       4.3305464880956252E18,
+                                                                                                       {
+                                                                                                        "᱿W^A]'rᮢ)鏥z餝;Hu\\Fk?ﴺ?IG浅-䙧>訝-xJ;巡8깊蠝ﻓU$K": {
+                                                                                                         "Vꕡ諅搓W=斸s︪vﲜ츧$)iꡟ싉e寳?ጭムVથ嵬i楝Fg<\/Z|៪ꩆ-5'@ꃱ80!燱R쇤t糳]罛逇dṌ֣XHiͦ{": true,
+                                                                                                         "Ya矲C멗Q9膲墅携휻c\\딶G甔<\/.齵휴": -1.1456247877031811E-19,
+                                                                                                         "z#.OO￝J": -8263224695871959017,
+                                                                                                         "崍_3夼ᮟ1F븍뽯ᦓ鴭V豈Ь": [{
+                                                                                                          "N蒬74": null,
+                                                                                                          "yuB?厅vK笗!ᔸcXQ旦컶P-녫mᄉ麟_": "1R@ 톘xa_|﩯遘s槞d!d껀筤⬫薐焵먑D{\\6k共倌☀G~AS_D\"딟쬚뮥馲렓쓠攥WTMܭ8nX㩴䕅檹E\u0007ﭨN 2 ℆涐ꥏ꠵3▙玽|됨_\u2048",
+                                                                                                          "恐A C䧩G": {":M큣5e들\\ꍀ恼ᔄ靸|I﨏$)n": {
+                                                                                                           "|U䬫㟯SKV6ꛤ㗮\bn봻䲄fXT:㾯쳤'笓0b/ೢC쳖?2浓uO.䰴": "ཐ꼋e?``,ᚇ慐^8ꜙNM䂱\u0001IᖙꝧM'vKdꌊH牮r\\O@䊷ᓵ쀆(fy聻i툺\"?<\/峧ࣞ⓺ᤤ쵒߯ꎺ騬?)刦\u2072l慪y꺜ﲖTj+u",
+                                                                                                           "뽫<G;稳UL⸙q2n쵿C396炿J蓡z⣁zဩSOU?<\/뙍oE큸O鿅෴ꍈEm#\"[瑦⤫ᝆgl⡗q8\"큘덥係@ᆤ=\u0001爖羝췀㸩b9\\jeqt㟿㮸龾m㳳긄": {
+                                                                                                            "9\"V霟釜{/o0嫲C咀-饷䈍[녩)\r䤴tMW\\龟ϣ^ي㪙忩䞞N湆Y笕)萨ꖤ誥煽:14⫻57U$擒䲐薡Qvↇ櫲현誧?nஷ6": {"l웾䌵.䅋䦝ic碳g[糲Ƿ-ឈᚱ4쑧\u0004C࿼\u0018&쬑?멲<\/fD_檼픃pd쪼n㕊渪V䛉m揈W儅톳뗳䓆7㭽諤T煠Ney?0᪵鈑&": [
+                                                                                                             false,
+                                                                                                             null,
+                                                                                                             {
+                                                                                                              "\r;鼶j᠂꼍RLz~♔9gf?ӡ浐": -1.4843072575250897E-19,
+                                                                                                              "&ꊒ\"ꋟ䝭E诮ﯚO?SW뒁훪mb旙⎕ᗕ⶙|ᷤ5y4甥": "j5|庠t铱?v 횋0\"'rxz䃢杺Ɜ!\u0002",
+                                                                                                              "Q ၩ㟧": {"Hﬔ\u2058䪠틙izZㅛ탟H^ﶲA??R6呠Z솋R.࿶g8": [
+                                                                                                               -8762672252886298799,
+                                                                                                               -1.9486830507000208E17,
+                                                                                                               null,
+                                                                                                               -7157359405410123024,
+                                                                                                               null,
+                                                                                                               null,
+                                                                                                               -995856734219489233,
+                                                                                                               "呧㫹A4!",
+                                                                                                               null,
+                                                                                                               -1.9105609358624648E-19,
+                                                                                                               5888184370445333848,
+                                                                                                               2.25460605078245E-19,
+                                                                                                               2.5302739297121987E18,
+                                                                                                               "뢹sbEf捵2丯?뗾耸(Wd띙SବꭖrtU?筤P똙QpbbKqaE$来V웰3i/lK퉜,8︸e= g螓t竦컼?.寋8鵗",
+                                                                                                               7377742975895263424,
+                                                                                                               2.4218442017790503E-19,
+                                                                                                               {
+                                                                                                                "y꒚ཫ쨘醬킃糟}yTSt䡀⇂뿽4ൢ戰U": [[
+                                                                                                                 3600537227234741875,
+                                                                                                                 4435474101760273035,
+                                                                                                                 -1.42274517007951795E18,
+                                                                                                                 -5567915915496026866,
+                                                                                                                 null,
+                                                                                                                 null,
+                                                                                                                 [
+                                                                                                                  -3204084299154861161,
+                                                                                                                  {
+                                                                                                                   "7梧慸憏.a瘎\u00041U鵮Ck֨d惥耍ⳡY,⭏써E垁FFI鱑ⳬ줢7⧵Bﴠ耘줕햸q컴~*瑍W.떛ࡆ@'᐀+轳": -961121410259132975,
+                                                                                                                   "⥅]l黭㣓绶;!!⎃=朼㐿e&ἂ繤C﯀l䝣㌀6TM쑮w懃ꡡ#ᤆ䰓,墼湼゙뽸㲿䧽쫨xᵖ듨<\/ T0峸iQ:溫脐\\\"쎪ὴ砇宖^M泼큥➅鈫@ᄟ༩\u2008⥼": true,
+                                                                                                                   "⩐\"籽汎P싯鲘蟼sRᐯ䅩\u0019R(kRᖁ&ಌ 0\"鳶!馼YH": null,
+                                                                                                                   "鮼ꚇ싋։刟\rRLd步Nⴗ5Eࡆ訛갚[I醵NC(郴ṉy5D뤺౳QY壯5苴y훨(W\\Cଇ姚C艄깹\u001c歷㋵ZC᥂": [
+                                                                                                                    -6806235313106257498,
+                                                                                                                    null,
+                                                                                                                    "}N⸿讽sꚪ;\\p繇j苄䫨\u20e7%5x?t#",
+                                                                                                                    {
+                                                                                                                     "O〗k<墻yV$ఁrs-c1ఌ唪.C7_Yobᦜ褷'b帰mㄑl⌅": {"qB뗗擄3隂5뺍櫂䱟e촸P/鏩,3掁ꗩ=冉棓㑉|˞F襴뿴,:㞦<퓂⧙礞♗g뚎ᛩ<\/뉽ⶳ⸻A?_x2I㽝勒*I홱鍧粿~曟㤙2绥Ly6+썃uu鿜בf큘|歍ࣖÉ": [
+                                                                                                                      ">hh䈵w>1ⲏ쐭V[ⅎ\\헑벑F_㖝⠗㫇h恽;῝汰ᱼ瀖J옆9RR셏vsZ柺鶶툤r뢱橾/ꉇ囦FGm\"謗ꉦ⨶쒿⥡%]鵩#ᖣ_蹎 u5|祥?O",
+                                                                                                                      null,
+                                                                                                                      2.0150326776036215E-19,
+                                                                                                                      null,
+                                                                                                                      true,
+                                                                                                                      false,
+                                                                                                                      true,
+                                                                                                                      {"\fa᭶P捤WWc᠟f뚉ᬏ퓗ⳀW睹5:HXH=q7x찙X$)모r뚥ᆟ!Jﳸf": [
+                                                                                                                       -2995806398034583407,
+                                                                                                                       [
+                                                                                                                        6441377066589744683,
+                                                                                                                        "Mﶒ醹i)Gἦ廃s6몞 KJ౹礎VZ螺费힀\u0000冺업{谥'꡾뱻:.ꘘ굄奉攼Di᷑K鶲y繈욊阓v㻘}枭캗e矮1c?휐\"4\u0005厑莔뀾墓낝⽴洗ṹ䇃糞@b1\u0016즽Y轹",
+                                                                                                                        {
+                                                                                                                         "1⽕⌰鉟픏M㤭n⧴ỼD#%鐘⊯쿼稁븣몐紧ᅇ㓕ᛖcw嬀~ഌ㖓(0r⧦Q䑕髍ര铂㓻R儮\"@ꇱm❈௿᦯頌8}㿹犴?xn잆꥽R": 2.07321075750427366E18,
+                                                                                                                         "˳b18㗈䃟柵Z曆VTAu7+㛂cb0﯑Wp執<\/臋뭡뚋刼틮荋벲TLP预庰܈G\\O@VD'鱃#乖끺*鑪ꬳ?Mޞdﭹ{␇圯쇜㼞顄︖Y홡g": [{
+                                                                                                                          "0a,FZ": true,
+                                                                                                                          "2z̬蝣ꧦ驸\u0006L↛Ḣ4๚뿀'?lcwᄧ㐮!蓚䃦-|7.飑挴.樵*+1ﮊ\u0010ꛌ%貨啺/JdM:똍!FBe?鰴㨗0O财I藻ʔWA᫓G쳛u`<\/I": [{
+                                                                                                                           "$τ5V鴐a뾆両環iZp頻යn븃v": -4869131188151215571,
+                                                                                                                           "*즢[⦃b礞R◚nΰꕢH=귰燙[yc誘g䆌?ଜ臛": {
+                                                                                                                            "洤湌鲒)⟻\\䥳va}PeAMnN[": "㐳ɪ/(軆lZR,Cp殍ȮN啷\"3B婴?i=r$펽ᤐ쀸",
+                                                                                                                            "阄R4㒿㯔ڀ69ZᲦ2癁핌噗P崜#\\-쭍袛&鐑/$4童V꩑_ZHA澢fZ3": {"x;P{긳:G閉:9?活H": [
+                                                                                                                             "繺漮6?z犞焃슳\">ỏ[Ⳛ䌜녏䂹>聵⼶煜Y桥[泥뚩MvK$4jtロ",
+                                                                                                                             "E#갶霠좭㦻ୗ먵F+䪀o蝒ba쮎4X㣵 h",
+                                                                                                                             -335836610224228782,
+                                                                                                                             null,
+                                                                                                                             null,
+                                                                                                                             [
+                                                                                                                              "r1᫩0>danjY짿bs{",
+                                                                                                                              [
+                                                                                                                               -9.594464059325631E-23,
+                                                                                                                               1.0456894622831624E-20,
+                                                                                                                               null,
+                                                                                                                               5.803973284253454E-20,
+                                                                                                                               -8141787905188892123,
+                                                                                                                               true,
+                                                                                                                               -4735305442504973382,
+                                                                                                                               9.513150514479281E-20,
+                                                                                                                               "7넳$螔忷㶪}䪪l짴\u0007鹁P鰚HF銏ZJﳴ/⍎1ᷓ忉睇ᜋ쓈x뵠m䷐窥Ꮤ^\u0019ᶌ偭#ヂt☆၃pᎍ臶䟱5$䰵&๵分숝]䝈뉍♂坎\u0011<>",
+                                                                                                                               "C蒑貑藁lﰰ}X喇몛;t밿O7/᯹f\u0015kI嘦<ዴ㟮ᗎZ`GWퟩ瑹࡮ᅴB꿊칈??R校s脚",
+                                                                                                                               {
+                                                                                                                                "9珵戬+AU^洘拻ቒy柭床'粙XG鞕᠜繀伪%]hC,$輙?Ut乖Qm떚W8઼}~q⠪rU䤶CQ痗ig@#≲t샌f㈥酧l;y闥ZH斦e⸬]j⸗?ঢ拻퀆滌": null,
+                                                                                                                                "畯}㧢J罚帐VX㨑>1ꢶkT⿄蘥㝑o|<嗸層沈挄GEOM@-䞚䧰$만峬輏䠱V✩5宸-揂D'㗪yP掶7b⠟J㕻SfP?d}v㼂Ꮕ'猘": {
+                                                                                                                                 "陓y잀v>╪": null,
+                                                                                                                                 "鬿L+7:됑Y=焠U;킻䯌잫!韎ஔ\f": {
+                                                                                                                                  "駫WmGጶ": {
+                                                                                                                                   "\\~m6狩K": -2586304199791962143,
+                                                                                                                                   "ႜࠀ%͑l⿅D.瑢Dk%0紪dḨTI픸%뗜☓s榗኉\"?V籄7w髄♲쟗翛歂E䤓皹t ?)ᄟ鬲鐜6C": {
+                                                                                                                                    "_췤a圷1\u000eB-XOy缿請∎$`쳌eZ~杁튻/蜞`塣৙\"⪰\"沒l}蕌\\롃荫氌.望wZ|o!)Hn獝qg}": null,
+                                                                                                                                    "kOSܧ䖨钨:಼鉝ꭝO醧S`십`ꓭ쭁ﯢN&Et㺪馻㍢ⅳ㢺崡ຊ蜚锫\\%ahx켨|ż劻ꎄ㢄쐟A躊᰹p譞綨Ir쿯\u0016ﵚOd럂*僨郀N*b㕷63z": {
+                                                                                                                                     ":L5r+T㡲": [{
+                                                                                                                                      "VK泓돲ᮙRy㓤➙Ⱗ38oi}LJቨ7Ó㹡৘*q)1豢⛃e᫛뙪壥镇枝7G藯g㨛oI䄽 孂L缊ꋕ'EN`": -2148138481412096818,
+                                                                                                                                      "`⛝ᘑ$(खꊲ⤖ᄁꤒ䦦3=)]Y㢌跨NĴ驳줟秠++d孳>8ᎊ떩EꡣSv룃 쯫أ?#E|᭙㎐?zv:5祉^⋑V": [
+                                                                                                                                       -1.4691944435285607E-19,
+                                                                                                                                       3.4128661569395795E17,
+                                                                                                                                       "㐃촗^G9佭龶n募8R厞eEw⺡_ㆱ%⼨D뉄퉠2ꩵᛅⳍ搿L팹Lවn=\"慉념ᛮy>!`g!풲晴[/;?[v겁軇}⤳⤁핏∌T㽲R홓遉㓥",
+                                                                                                                                       "愰_⮹T䓒妒閤둥?0aB@㈧g焻-#~跬x<\/舁P݄ꐡ=\\׳P\u0015jᳪᢁq;㯏l%᭗;砢觨▝,謁ꍰGy?躤O黩퍋Y㒝a擯\n7覌똟_䔡]fJ晋IAS",
+                                                                                                                                       4367930106786121250,
+                                                                                                                                       -4.9421193149720582E17,
+                                                                                                                                       null,
+                                                                                                                                       {
+                                                                                                                                        ";ᄌ똾柉곟ⰺKpፇ䱻ฺ䖝{o~h!eꁿ઻욄ښ\u0002y?xUd\u207c悜ꌭ": [
+                                                                                                                                         1.6010824122815255E-19,
+                                                                                                                                         [
+                                                                                                                                          "宨︩9앉檥pr쇷?WxLb",
+                                                                                                                                          "氇9】J玚\u000f옛呲~ 輠1D嬛,*mW3?n휂糊γ虻*ᴫ꾠?q凐趗Ko↦GT铮",
+                                                                                                                                          "㶢ថmO㍔k'诔栀Z蛟}GZ钹D",
+                                                                                                                                          false,
+                                                                                                                                          -6.366995517736813E-20,
+                                                                                                                                          -4894479530745302899,
+                                                                                                                                          null,
+                                                                                                                                          "V%᫡II璅䅛䓎풹ﱢ/pU9se되뛞x梔~C)䨧䩻蜺(g㘚R?/Ự[忓C뾠ࢤc왈邠买?嫥挤풜隊枕",
+                                                                                                                                          ",v碍喔㌲쟚蔚톬៓ꭶ",
+                                                                                                                                          3.9625444752577524E-19,
+                                                                                                                                          null,
+                                                                                                                                          [
+                                                                                                                                           "kO8란뿒䱕馔b臻⍟隨\"㜮鲣Yq5m퐔<u뷆c譆\u001bN?<",
+                                                                                                                                           [{
+                                                                                                                                            ";涉c蒀ᴧN䘱䤳 ÿꭷ,핉dSTDB>K#ꢘug㼈ᝦ=P^6탲@䧔%$CqSw铜랊0&m⟭<\/a逎ym\u0013vᯗ": true,
+                                                                                                                                            "洫`|XN뤮\u0018詞=紩鴘_sX)㯅鿻Ố싹": 7.168252736947373E-20,
+                                                                                                                                            "ꛊ饤ﴏ袁(逊+~⽫얢鈮艬O힉7D筗S곯w操I斞᠈븘蓷x": [[[[
+                                                                                                                                             -7.3136069426336952E18,
+                                                                                                                                             -2.13572396712722688E18,
+                                                                                                                                             {
+                                                                                                                                              "硢3㇩R:o칢行E<=\u0018ၬYuH!\u00044U%卝炼2>\u001eSi$⓷ꒈ'렢gᙫ番ꯒ㛹럥嶀澈v;葷鄕x蓎\\惩+稘UEᖸﳊ㊈壋N嫿⏾挎,袯苷ኢ\\x|3c": 7540762493381776411,
+                                                                                                                                              "?!*^ᢏ窯?\u0001ڔꙃw虜돳FgJ?&⨫*uo籤:?}ꃹ=ٴ惨瓜Z媊@ત戹㔏똩Ԛ耦Wt轁\\枒^\\ꩵ}}}ꀣD\\]6M_⌫)H豣:36섘㑜": {
+                                                                                                                                               ";홗ᰰU஋㙛`D왔ཿЃS회爁\u001b-㢈`봆?盂㛣듿ᦾ蒽_AD~EEຆ㊋(eNwk=Rɠ峭q\"5Ἠ婾^>'ls\n8QAK<l_⭨穟": [
+                                                                                                                                                true,
+                                                                                                                                                true,
+                                                                                                                                                {"ﳷm箅6qⷈ?ﲈ憟b۷⫉἞V뚴少U呡瓴ꉆs~嘵得㌶4XR漊": [
+                                                                                                                                                 "폆介fM暪$9K[ㄇ샍큳撦g撟恸jҐF㹹aj bHᘀ踉ꎐC粄 a?\u000fK즉郝 幨9D舢槷Xh뵎u훩Ꜿ턾ƅ埂P埆k멀{䢹~?D<\/꼢XR\u001b〱䝽꼨i㘀ḟ㚺A-挸",
+                                                                                                                                                 false,
+                                                                                                                                                 null,
+                                                                                                                                                 -1.1710758021294953E-20,
+                                                                                                                                                 3996737830256461142,
+                                                                                                                                                 true,
+                                                                                                                                                 null,
+                                                                                                                                                 -8271596984134071193,
+                                                                                                                                                 "_1G퉁텑m䮔鰼6멲Nmꇩſt쓟튍N许FDj+3^ﶜ⎸\u0019⤕橥!\"s-뾞lz北׸ꍚ랬)?l⻮고i䑰\u001f䪬",
+                                                                                                                                                 4.459124464204517E-19,
+                                                                                                                                                 -4.0967172848578447E18,
+                                                                                                                                                 5643211135841796287,
+                                                                                                                                                 -9.482336221192844E-19,
+                                                                                                                                                 "౪冏釶9D?s螭X榈枸j2秀v]泌鰚岒聵轀쌶i텽qMbL]R,",
+                                                                                                                                                 null,
+                                                                                                                                                 [
+                                                                                                                                                  null,
+                                                                                                                                                  {"M쪊ꯪ@;\u0011罙ꕅ<e᝺|爑Yⵝ<\/&ᩎ<腊ሑᮔ੃F豭": [
+                                                                                                                                                   "^0࡟1볏P폋ፏ杈F⨥Iꂴ\"z磣VⅡ=8퀝2]䢹h1\u0017{jT<I煛5%D셍S⑙⅏J*샐 巙ດ;᧡䙞",
+                                                                                                                                                   [{
+                                                                                                                                                    "'㶡큾鄧`跊\"gV[?u᭒Ʊ髷%葉굵a띦N켧Qﯳy%y䩟髒L䯜S䵳r絅肾킂ၐ'ꔦg긓a'@혔যW谁ᝬF栩ŷ+7w鞚": 6.3544416675584832E17,
+                                                                                                                                                    "苎脷v改hm쏵|㋊g_ᔐ 뒨蹨峟썎㷸|Ο刢?Gͨ옛-?GꦱIEYUX4?%ꘋᆊ㱺": -2.8418378709165287E-19,
+                                                                                                                                                    "誰?(H]N맘]k洳\"q蒧蘞!R퐫\\(Q$T5N堍⫣윿6|럦속︅ﭗ(": [
+                                                                                                                                                     "峩_\u0003A瘘?✓[硫䎯ၽuጭ\"@Y綅첞m榾=贮9R벿῜Z",
+                                                                                                                                                     null,
+                                                                                                                                                     "䰉㗹㷾Iaᝃqcp쓘὾൫Q|ﵓ<\/ḙ>)- Q䲌mo펹L_칍樖庫9꩝쪹ᘹ䑖瀍aK ?*趤f뭓廝p=磕",
+                                                                                                                                                     "哑z懅ᤏ-ꍹux쀭",
+                                                                                                                                                     [
+                                                                                                                                                      true,
+                                                                                                                                                      3998739591332339511,
+                                                                                                                                                      "ጻ㙙?᳸aK<\/囩U`B3袗ﱱ?\"/k鏔䍧2l@쿎VZ쨎/6ꃭ脥|B?31+on颼-ꮧ,O嫚m ࡭`KH葦:粘i]aSU쓙$쐂f+詛頖b",
+                                                                                                                                                      [{"^<9<箝&絡;%i﫡2攑紴\\켉h쓙-柂䚝ven\u20f7浯-Ꮏ\r^훁䓚헬\u000e?\\ㅡֺJ떷VOt": [{
+                                                                                                                                                       "-௄卶k㘆혐஽y⎱㢬sS઄+^瞥h;ᾷj;抭\u0003밫f<\/5Ⱗ裏_朻%*[-撵䷮彈-芈": {
+                                                                                                                                                        "㩩p3篊G|宮hz䑊o곥j^Co0": [
+                                                                                                                                                         653239109285256503,
+                                                                                                                                                         {"궲?|\":N1ۿ氃NZ#깩:쇡o8킗ࡊ[\"됸Po핇1(6鰏$膓}⽐*)渽J'DN<썙긘毦끲Ys칖": {
+                                                                                                                                                          "2Pr?Xjㆠ?搮/?㓦柖馃5뚣Nᦼ|铢r衴㩖\"甝湗ܝ憍": "\"뾯i띇筝牻$珲/4ka $匝휴译zbAᩁꇸ瑅&뵲衯ꎀᆿ7@ꈋ'ᶨH@ᠴl+",
+                                                                                                                                                          "7뢽뚐v?4^ꊥ_⪛.>pởr渲<\/⢕疻c\"g䇘vU剺dஔ鮥꒚(dv祴X⼹\\a8y5坆": true,
+                                                                                                                                                          "o뼄B욞羁hr﷔폘뒚⿛U5pꪴfg!6\\\"爑쏍䢱W<ﶕ\\텣珇oI/BK뺡'谑♟[Ut븷亮g(\"t⡎有?ꬊ躺翁艩nl F⤿蠜": 1695826030502619742,
+                                                                                                                                                          "ۊ깖>ࡹ햹^ⵕ쌾BnN〳2C䌕tʬ]찠?ݾ2饺蹳ぶꌭ訍\"◹ᬁD鯎4e滨T輀ﵣ੃3\u20f3킙D瘮g\\擦+泙ၧ 鬹ﯨַ肋7놷郟lP冝{ߒhড়r5,꓋": null,
+                                                                                                                                                          "ΉN$y{}2\\N﹯ⱙK'8ɜͣwt,.钟廣䎘ꆚk媄_": null,
+                                                                                                                                                          "䎥eᾆᝦ읉,Jުn岪㥐s搖謽䚔5t㯏㰳㱊ZhD䃭f絕s鋡篟a`Q鬃┦鸳n_靂(E4迠_觅뷝_宪D(NL疶hL追V熑%]v肫=惂!㇫5⬒\u001f喺4랪옑": {
+                                                                                                                                                           "2a輍85먙R㮧㚪Sm}E2yꆣꫨrRym㐱膶ᔨ\\t綾A☰.焄뙗9<쫷챻䒵셴᭛䮜.<\/慌꽒9叻Ok䰊Z㥪幸k": [
+                                                                                                                                                            null,
+                                                                                                                                                            true,
+                                                                                                                                                            {"쌞쐍": {
+                                                                                                                                                             "▟GL K2i뛱iQ\"̠.옛1X$}涺]靎懠ڦ늷?tf灟ݞゟ{": 1.227740268699265E-19,
+                                                                                                                                                             "꒶]퓚%ฬK❅": [{
+                                                                                                                                                              "(ෛ@Ǯっ䧼䵤[aテൖvEnAdU렖뗈@볓yꈪ,mԴ|꟢캁(而첸죕CX4Y믅": "2⯩㳿ꢚ훀~迯?᪑\\啚;4X\u20c2襏B箹)俣eỻw䇄",
+                                                                                                                                                              "75༂f詳䅫ꐧ鏿 }3\u20b5'∓䝱虀f菼Iq鈆﨤g퍩)BFa왢d0뮪痮M鋡nw∵謊;ꝧf美箈ḋ*\u001c`퇚퐋䳫$!V#N㹲抗ⱉ珎(V嵟鬒_b㳅\u0019": null,
+                                                                                                                                                              "e_m@(i㜀3ꦗ䕯䭰Oc+-련0뭦⢹苿蟰ꂏSV䰭勢덥.ྈ爑Vd,ᕥ=퀍)vz뱊ꈊB_6듯\"?{㒲&㵞뵫疝돡믈%Qw限,?\r枮\"? N~癃ruࡗdn&": null,
+                                                                                                                                                              "㉹&'Pfs䑜공j<\/?|8oc᧨L7\\pXᭁ 9᪘": -2.423073789014103E18,
+                                                                                                                                                              "䝄瑄䢸穊f盈᥸,B뾧푗횵B1쟢f\u001f凄": "魖⚝2儉j꼂긾껢嗎0ࢇ纬xI4](੓`蕞;픬\fC\"斒\")2櫷I﹥迧",
+                                                                                                                                                              "ퟯ詔x悝령+T?Bg⥄섅kOeQ큼㻴*{E靼6氿L缋\u001c둌๶-㥂2==-츫I즃㠐Lg踞ꙂEG貨鞠\"\u0014d'.缗gI-lIb䋱ᎂDy缦?": null,
+                                                                                                                                                              "紝M㦁犿w浴詟棓쵫G:䜁?V2ힽ7N*n&㖊Nd-'ຊ?-樹DIv⊜)g䑜9뉂ㄹ푍阉~ꅐ쵃#R^\u000bB䌎䦾]p.䀳": [{"ϒ爛\"ꄱ︗竒G䃓-ま帳あ.j)qgu扐徣ਁZ鼗A9A鸦甈!k蔁喙:3T%&㠘+,䷞|챽v䚞문H<\/醯r셓㶾\\a볜卺zE䝷_죤ဵ뿰᎟CB": [
+                                                                                                                                                               6233512720017661219,
+                                                                                                                                                               null,
+                                                                                                                                                               -1638543730522713294,
+                                                                                                                                                               false,
+                                                                                                                                                               -8901187771615024724,
+                                                                                                                                                               [
+                                                                                                                                                                3891351109509829590,
+                                                                                                                                                                true,
+                                                                                                                                                                false,
+                                                                                                                                                                -1.03836679125188032E18,
+                                                                                                                                                                {
+                                                                                                                                                                 "<?起HCᷭ죎劐莇逰/{gs\u0014⽛㰾愫tᅱ<솞ڢ됌煲膺਻9x닳x࡭Q訽,ᶭඦtt掾\"秧㺌d˪䙻꫗:ᭈh4緞痐䤴c뫚떩త<?ᕢ謚6]폛O鰐鋛镠贩赟\"<G♷1'": true,
+                                                                                                                                                                 "቙ht4ߝBqꦤ+\u0006멲趫灔)椾": -1100102890585798710,
+                                                                                                                                                                 "総兎곇뇸粟F醇;朠?厱楛㶆ⶏ7r⾛o꯬᳡F\\머幖 㜦\f[搦᥽㮣0䕊?J㊳뀄e㔔+?<n↴复": [
+                                                                                                                                                                  "4~ꉍ羁\\偮(泤叕빜\u0014>j랎:g曞ѕᘼ}链N",
+                                                                                                                                                                  -1.1103819473845426E-19,
+                                                                                                                                                                  true,
+                                                                                                                                                                  [
+                                                                                                                                                                   true,
+                                                                                                                                                                   null,
+                                                                                                                                                                   -7.9091791735309888E17,
+                                                                                                                                                                   true,
+                                                                                                                                                                   {"}蔰鋈+ꐨ啵0?g*사%`J?*": [{
+                                                                                                                                                                    "\"2wG?yn,癷BK\\龞䑞x?蠢": -3.7220345009853505E-19,
+                                                                                                                                                                    ";饹়❀)皋`噿焒j(3⿏w>偍5X<np?<줯<Y]捘!J೸UⳂNे7v௸㛃ᄧ톿䨷鯻v焇=烻TQ!F⦰䣣눿K鷚눁'⭲m捠(䚻": [
+                                                                                                                                                                     "蹕 淜੃b\"+몾ⴕ",
+                                                                                                                                                                     null,
+                                                                                                                                                                     35892237756161615,
+                                                                                                                                                                     {
+                                                                                                                                                                      " 듹㏝)5慁箱&$~:遰쮐<\/堋?% \\勽唅z손帋䘺H髀麡M퇖uz\u0012m諦d᳤콌樝\rX싹̡Ო": -433791617729505482,
+                                                                                                                                                                      "-j溗ࢵcz!:}✽5ഇ,욨ݏs#덫=南浺^}E\\Y\\T*뼈cd꺐cۘ뎁䨸됱K䠴㉿恿逳@wf쏢<\/[L[": -9.3228549642908109E17,
+                                                                                                                                                                      "Ms킭u஗%\\u⍎/家欲ἅ答㓽/꯳齳|㭘Pr\"v<\/禇䔆$GA䊻˔-:틊[h?倬荤ᾞ৳.Gw\u000b": [
+                                                                                                                                                                       "0宜塙I@䏴蝉\\Uy뒅=2<h暒K._贡璐Yi檻_⮵uᐝ㘗聠[f\u0015힢Hꔮ}጑;誏yf0\"\u20cc?(=q斠➽5ꎾ鞘kⲃ",
+                                                                                                                                                                       -2.9234211354411E-19,
+                                                                                                                                                                       false,
+                                                                                                                                                                       true,
+                                                                                                                                                                       {
+                                                                                                                                                                        "\u0011⟴GH_;#怵:\u001c\u0002n1U\\p/왔(┫]hꐚ7\r0䵷첗岷O௷?㝎[殇|J=?韷pᶟ儜犆?5კ1kꍖiH竧뛈ପdmk游y(콪팱꾍k慧 y辣": [
+                                                                                                                                                                         false,
+                                                                                                                                                                         "O\"끍p覈ykv磂㢠㝵~뀬튍lC&4솎䇃:Mj",
+                                                                                                                                                                         -7.009964654003924E-20,
+                                                                                                                                                                         false,
+                                                                                                                                                                         -49306078522414046,
+                                                                                                                                                                         null,
+                                                                                                                                                                         null,
+                                                                                                                                                                         2160432477732354319,
+                                                                                                                                                                         true,
+                                                                                                                                                                         "4횡h+!踹ꐬP鮄{0&뱥M?샍鞅n㮞ᨹ?쒆毪l'箅^ꚥ頛`e㻨52柳⮙嫪࡟딯a.~䵮1f吘N&zȭL榓ۃ鳠5d㟆M@㣥ӋA΍q0縶$",
+                                                                                                                                                                         -3.848996532974368E16,
+                                                                                                                                                                         true,
+                                                                                                                                                                         null,
+                                                                                                                                                                         -3.5240055580952525E18,
+                                                                                                                                                                         {
+                                                                                                                                                                          " vﭷၵ#ce乃5僞?Z D`묨粇ᐔ绠vWL譢u뽀\\J|tⓙt№\"ꨋnT凮ᒩ蝂篝b騩:䢭Hbv읻峨z㹚T趗햆귣학津XiY@ᖥK": true,
+                                                                                                                                                                          "!F 醌y䉸W2ꇬ\u0006/䒏7~%9擛햀徉9⛰+?㌘;ꠓX䇻Dfi뼧쒒\u0012F謞՝絺+臕kऍLSQ쌁X쎬幦HZ98蒊枳": "澤令#\u001d抍⛳@N搕퀂[5,✄ꘇ~䘷?\u0011Xꈺ[硸⠘⛯X醪聡x\u0007쌇MiX/|ミ뚁K8䁡W)銀q僞綂蔕E",
+                                                                                                                                                                          "6␲䣖R৞@ငg?<\/೴x陙Xꈺ崸⠅ᇾ\\0X,H쟴셭A稂ힿゝF\\쑞\u0012懦(Aᯕ灭~\u0001껮X?逊": 5.7566819207732864E17,
+                                                                                                                                                                          "[c?椓": false,
+                                                                                                                                                                          "k䒇": 2583824107104166717,
+                                                                                                                                                                          "꙯N훙㏅ﮒ燣㨊瞯咽jMxby뻭뵫װ[\"1畈?ৱL": "띣ᔂ魠羓犴ꚃ+|rY",
+                                                                                                                                                                          "녺Z?䬝鉉:?ⳙ瘏Cኯ.Vs[釿䨉쐧\\\\*쵢猒$\\y溔^,㑳": {"藶꺟": [{
+                                                                                                                                                                           "\"d훣N2zq]?'檿죸忷篇ﮟ擤m'9!죶≓p뭻\\ᇷ\f퇶_䰸h๐Q嵃訾㘑従ꯦ䞶jL틊r澵Omᾫ!H䱤팼/;|᭺I7슎YhuXi⚼": -1.352716906472438E-19,
+                                                                                                                                                                           "M⽇倻5J䂫औ᝔楸#J[Fﹱ쫮W誻bWz?}1\"9硪뻶fe": "盬:Ѹ砿획땣T凊(m灦呜ﻝR㿎艴䂵h",
+                                                                                                                                                                           "R띾k힪CH钙_i苮ⰵoᾨ紑퉎7h؉\"柀蝽z0့\"<?嘭$蜝?礲7岇槀묡?V钿T⣜v+솒灚ԛ2米mH?>薙婏聿3aFÆÝ": "2,ꓴg?_섦_>Y쪥션钺;=趘F~?D㨫\bX?㹤+>/믟kᠪ멅쬂Uzỵ]$珧`m雁瑊ඖ鯬cꙉ梢f묛bB",
+                                                                                                                                                                           "♽n$YjKiXX*GO贩鏃豮祴遞K醞眡}ꗨv嵎꼷0୸+M菋eH徸J꣆:⼐悥B켽迚㯃b諂\u000bjꠜ碱逮m8": [
+                                                                                                                                                                            "푷᣺ﻯd8ﱖ嬇ភH鹎⡱᱅0g:果6$GQ췎{vᷧYy-脕x偹砡館⮸C蓼ꏚ=軄H犠G谖ES詤Z蠂3l봟hᅭ7䦹1GPQG癸숟~[#駥8zQ뛣J소obg,",
+                                                                                                                                                                            null,
+                                                                                                                                                                            1513751096373485652,
+                                                                                                                                                                            null,
+                                                                                                                                                                            -6.851466660824754E-19,
+                                                                                                                                                                            {"䩂-⴮2ٰK솖풄꾚ႻP앳1H鷛wmR䗂皎칄?醜<\/&ࠧ㬍X濬䵈K`vJ륒Q/IC묛!;$vϑ": {
+                                                                                                                                                                             "@-ꚗxྐྵ@m瘬\u0010U絨ﮌ驐\\켑寛넆T=tQ㭤L연@脸삯e-:⩼u㎳VQ㋱襗ຓ<Ⅶ䌸cML3+\u001e_C)r\\9+Jn\\Pﺔ8蠱檾萅Pq鐳话T䄐I": -1.80683891195530061E18,
+                                                                                                                                                                             "ᷭዻU~ཷsgSJ`᪅'%㖔n5픆桪砳峣3獮枾䌷⊰呀": {
+                                                                                                                                                                              "Ş੉䓰邟自~X耤pl7间懑徛s첦5ਕXexh⬖鎥᐀nNr(J컗|ૃF\"Q겮葲놔엞^겄+㈆话〾희紐G'E?飕1f❼텬悚泬먐U睬훶Qs": false,
+                                                                                                                                                                              "(\u20dag8큽튣>^Y{뤋.袊䂓;_g]S\u202a꽬L;^'#땏bႌ?C緡<䝲䲝断ꏏ6\u001asD7IK5Wxo8\u0006p弊⼂ꯍ扵\u0003`뵂픋%ꄰ⫙됶l囏尛+䗅E쟇\\": [
+                                                                                                                                                                               true,
+                                                                                                                                                                               {
+                                                                                                                                                                                "\n鱿aK㝡␒㼙2촹f;`쾏qIࡔG}㝷䐍瓰w늮*粅9뒪ㄊCj倡翑閳R渚MiUO~仨䜶RꙀA僈㉋⦋n{㖥0딿벑逦⥻0h薓쯴Ꝼ": [
+                                                                                                                                                                                 5188716534221998369,
+                                                                                                                                                                                 2579413015347802508,
+                                                                                                                                                                                 9.010794400256652E-21,
+                                                                                                                                                                                 -6.5327297761238093E17,
+                                                                                                                                                                                 1.11635352494065523E18,
+                                                                                                                                                                                 -6656281618760253655,
+                                                                                                                                                                                 {
+                                                                                                                                                                                  "": ")?",
+                                                                                                                                                                                  "TWKLꑙ裑꺔UE俸塑炌Ũ᜕-o\"徚#": {"M/癟6!oI51ni퐚=댡>xꍨ\u0004 ?": {
+                                                                                                                                                                                   "皭": {"⢫䋖>u%w잼<䕏꘍P䋵$魋拝U䮎緧皇Y훂&|羋ꋕ잿cJ䨈跓齳5\u001a삱籷I꿾뤔S8㌷繖_Yឯ䲱B턼O歵F\\l醴o_欬6籏=D": [
+                                                                                                                                                                                    false,
+                                                                                                                                                                                    true,
+                                                                                                                                                                                    {"Mt|ꏞD|F궣MQ뵕T,띺k+?㍵i": [
+                                                                                                                                                                                     7828094884540988137,
+                                                                                                                                                                                     false,
+                                                                                                                                                                                     {
+                                                                                                                                                                                      "!༦鯠,&aﳑ>[euJꏽ綷搐B.h": -7648546591767075632,
+                                                                                                                                                                                      "-n켧嘰{7挐毄Y,>❏螵煫乌pv醑Q嶚!|⌝責0왾덢ꏅ蛨S\\)竰'舓Q}A釡5#v": 3344849660672723988,
+                                                                                                                                                                                      "8閪麁V=鈢1녈幬6棉⪮둌\u207d᚛驉ꛃ'r䆉惏ै|bἧﺢᒙ<=穊强s혧eꮿ慩⌡ \\槳W븧J檀C,ᘉ의0俯퀉M;筷ࣴ瓿{늊埂鄧_4揸Nn阼Jੵ˥(社": true,
+                                                                                                                                                                                      "o뼀vw)4A뢵(a䵢)p姃뛸\u000fK#KiQp\u0005ꅍ芅쏅": null,
+                                                                                                                                                                                      "砥$ꥸ┇耽u斮Gc{z빔깎밇\\숰\u001e괷各㶇쵿_ᴄ+h穢p촀Ნ䃬z䝁酳ӂ31xꔄ1_砚W렘G#2葊P ": [
+                                                                                                                                                                                       -3709692921720865059,
+                                                                                                                                                                                       null,
+                                                                                                                                                                                       [
+                                                                                                                                                                                        6669892810652602379,
+                                                                                                                                                                                        -135535375466621127,
+                                                                                                                                                                                        "뎴iO}Z? 馢녱稹ᄾ䐩rSt帤넆&7i騏멗畖9誧鄜'w{Ͻ^2窭외b㑎粖i矪ꦨ탪跣)KEㆹ\u0015V8[W?⽉>'kc$䨘ᮛ뉻٬M5",
+                                                                                                                                                                                        1.10439588726055846E18,
+                                                                                                                                                                                        false,
+                                                                                                                                                                                        -4349729830749729097,
+                                                                                                                                                                                        null,
+                                                                                                                                                                                        [
+                                                                                                                                                                                         false,
+                                                                                                                                                                                         "_蠢㠝^䟪/D녒㡋ỎC䒈판\u0006એq@O펢%;鹐쏌o戥~A[ꡉ濽ỳ&虃᩾荣唙藍茨Ig楡꒻M窓冉?",
+                                                                                                                                                                                         true,
+                                                                                                                                                                                         2.17220752996421728E17,
+                                                                                                                                                                                         -5079714907315156164,
+                                                                                                                                                                                         -9.960375974658589E-20,
+                                                                                                                                                                                         "ᾎ戞༒",
+                                                                                                                                                                                         true,
+                                                                                                                                                                                         false,
+                                                                                                                                                                                         [[
+                                                                                                                                                                                          "ⶉᖌX⧕홇)g엃⹪x뚐癟\u0002",
+                                                                                                                                                                                          -5185853871623955469,
+                                                                                                                                                                                          {
+                                                                                                                                                                                           "L㜤9ợㇶK鐰⋓V뽋˖!斫as|9"፬䆪?7胜&n薑~": -2.11545634977136992E17,
+                                                                                                                                                                                           "O8뀩D}캖q萂6༣㏗䈓煮吽ਆᎼDᣘ폛;": false,
+                                                                                                                                                                                           "YTᡅ^L㗎cbY$pᣞ縿#fh!ꘂb삵玊颟샞ဢ$䁗鼒몁~rkH^:닮먖츸륈⪺쒉砉?㙓扫㆕꣒`R䢱B酂?C뇞<5Iޚ讳騕S瞦z": null,
+                                                                                                                                                                                           "\\RB?`mG댵鉡幐物䵎有5*e骄T㌓ᛪ琾駒Ku\u001a[柆jUq8⋈5鿋츿myﻗ?雍ux঴?": 5828963951918205428,
+                                                                                                                                                                                           "n0晅:黯 xu씪^퓞cB㎊ᬍ⺘٤փ~B岚3㥕擄vᲂ~F?C䶖@$m~忔S왖㲚?챴⊟W#벌{'㰝I䝠縁s樘\\X뢻9핡I6菍ㄛ8쯶]wॽ0L\"q": null,
+                                                                                                                                                                                           "x增줖j⦦t䏢᎙㛿Yf鼘~꫓恄4惊\u209c": "oOhbᤃ᛽z&Bi犑\\3B㩬劇䄑oŁ쨅孥멁ຖacA㖫借㞝vg싰샂㐜#譞⢤@k]鋰嘘䜾L熶塥_<\/⍾屈ﮊ_mY菹t뙺}Ox=w鮮4S1ꐩמּ'巑",
+                                                                                                                                                                                           "㗓蟵ꂾe蠅匳(JP䗏෸\u0089耀왲": [{
+                                                                                                                                                                                            "ᤃ㵥韎뤽\r?挥O쯡⇔㞚3伖\u0005P⋪\"D궣QLn(⚘罩䩢Ŏv䤘尗뼤됛O淽鋋闚r崩a{4箙{煷m6〈": {
+                                                                                                                                                                                             "l곺1L": {
+                                                                                                                                                                                              "T'ਤ?砅|੬Km]䄩\"(࿶<\/6U爢䫈倔郴l2㴱^줣k'L浖L鰄Rp今鎗⒗C얨M훁㡧ΘX粜뫈N꤇輊㌻켑#㮮샶-䍗룲蠝癜㱐V>=\\I尬癤t=": 7648082845323511446,
+                                                                                                                                                                                              "鋞EP:<\/_`ၧe混ㇹBd⯢㮂驋\\q碽饩跓྿ᴜ+j箿렏㗑yK毢宸p謹h䦹乕U媣\\炤": [[
+                                                                                                                                                                                               "3",
+                                                                                                                                                                                               [
+                                                                                                                                                                                                true,
+                                                                                                                                                                                                3.4058271399411134E-20,
+                                                                                                                                                                                                true,
+                                                                                                                                                                                                "揀+憱f逮@먻BpW曉\u001a㣐⎊$n劈D枤㡞좾\u001aᛁ苔౩闝1B䷒Ṋ݋➐ꀞꐃ磍$t੤_:蘺⮼(#N",
+                                                                                                                                                                                                697483894874368636,
+                                                                                                                                                                                                [
+                                                                                                                                                                                                 "vᘯ锴)0訶}䳅⩚0O壱韈ߜ\u0018*U鍾䏖=䧉뽑单휻ID쿇嘗?ꌸῬ07",
+                                                                                                                                                                                                 -5.4858784319382006E18,
+                                                                                                                                                                                                 7.5467775182251151E18,
+                                                                                                                                                                                                 -8911128589670029195,
+                                                                                                                                                                                                 -7531052386005780140,
+                                                                                                                                                                                                 null,
+                                                                                                                                                                                                 [
+                                                                                                                                                                                                  null,
+                                                                                                                                                                                                  true,
+                                                                                                                                                                                                  [[{
+                                                                                                                                                                                                   "1欯twG<u䝮␽ꇣ_ჟﱴଶ-쪋\"?홺k:莝Ꜫ*⺵꽹댅釔좵}P?=9렿46b\u001c\\S?(筈僦⇶爷谰1ྷa": true,
+                                                                                                                                                                                                   "TҫJYxڪ\\鰔℮혡)m_WVi眪1[71><\/Q:0怯押殃탷聫사<ỗꕧ蚨䡁nDꌕ\u001c녬~蓩<N蹑\"{䫥lKc혁뫖앺:vⵑ": "g槵?",
+                                                                                                                                                                                                   "aꨩ뻃싥렌1`롗}Yg>鲃g儊>ꏡl㻿/⑷*챳6㻜W毤緛ﹺᨪ4\u0013뺚J髬e3쳸䘦伧?恪&{L掾p+꬜M䏊d娘6": {
+                                                                                                                                                                                                    "2p첼양棜h䜢﮶aQ*c扦v︥뮓kC寵횂S銩&ǝ{O*य़iH`U큅ࡓr䩕5ꄸ?`\\᧫?ᮼ?t〟崾훈k薐ì/iy꤃뵰z1<\/AQ#뿩8jJ1z@u䕥": 1.82135747285215155E18,
+                                                                                                                                                                                                    "ZdN &=d년ᅆ'쑏ⅉ:烋5&៏ᄂ汎来L㯄固{钧u\\㊏튚e摑&t嗄ꖄUb❌?m䴘熚9EW": [{
+                                                                                                                                                                                                     "ଛ{i*a(": -8.0314147546006822E17,
+                                                                                                                                                                                                     "⫾ꃆY\u000e+W`௸ \"M뒶+\\뷐lKE}(NT킶Yj選篒쁶'jNQ硾(똡\\\"逌ⴍy? IRꜘ὞鄬﨧:M\\f⠋Cꚜ쫊ᚴNV^D䕗ㅖἔIao꿬C⍏8": [
+                                                                                                                                                                                                      287156137829026547,
+                                                                                                                                                                                                      {
+                                                                                                                                                                                                       "H丞N逕<rO䎗:텕<\/䶩샌Sd%^ᵯ눐엑者g䖩똭蕮1U驣?Pⰰ\u001fp(W]67\u0015﫣6굺OR羸#촐F蒈;嘙i✵@_撶y㤏⤍(:᧗뼢༌朆@⏰㤨ꭲ?-n>⯲": {"": {
+                                                                                                                                                                                                        "7-;枮阕梒9ᑄZ": [[[[
+                                                                                                                                                                                                         null,
+                                                                                                                                                                                                         {
+                                                                                                                                                                                                          "": [[[[
+                                                                                                                                                                                                           -7.365909561486078E-19,
+                                                                                                                                                                                                           2948694324944243408,
+                                                                                                                                                                                                           null,
+                                                                                                                                                                                                           [
+                                                                                                                                                                                                            true,
+                                                                                                                                                                                                            "荒\"并孷䂡쵼9o䀘F\u0002龬7⮹Wz%厖/*? a*R枈㌦됾g뒠䤈q딄㺿$쮸tᶎ릑弣^鏎<\/Y鷇驜L鿽<\/춋9Mᲆឨ^<\/庲3'l낢",
+                                                                                                                                                                                                            "c鮦\u001b두\\~?眾ಢu݆綑෪蘛轋◜gȃ<\/ⴃcpkDt誩܅\"Y",
+                                                                                                                                                                                                            [[
+                                                                                                                                                                                                             null,
+                                                                                                                                                                                                             null,
+                                                                                                                                                                                                             [
+                                                                                                                                                                                                              3113744396744005402,
+                                                                                                                                                                                                              true,
+                                                                                                                                                                                                              "v(y",
+                                                                                                                                                                                                              {
+                                                                                                                                                                                                               "AQ幆h쾜O+꺷铀ꛉ練A蚗⼺螔j㌍3꽂楎䥯뎸먩?": null,
+                                                                                                                                                                                                               "蠗渗iz鱖w]擪E": 1.2927828494783804E-17,
+                                                                                                                                                                                                               "튷|䀭n*曎b✿~杤U]Gz鄭kW|㴚#㟗ഠ8u擨": [[
+                                                                                                                                                                                                                true,
+                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                {"⾪壯톽g7?㥜ώQꑐ㦀恃㧽伓\\*᧰閖樧뢇赸N휶䎈pI氇镊maᬠ탷#X?A+kНM ༑᩟؝?5꧎鰜ṚY즫궔 =ঈ;ﳈ?*s|켦蜌wM笙莔": [
+                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                 -3808207793125626469,
+                                                                                                                                                                                                                 [
+                                                                                                                                                                                                                  -469910450345251234,
+                                                                                                                                                                                                                  7852761921290328872,
+                                                                                                                                                                                                                  -2.7979740127017492E18,
+                                                                                                                                                                                                                  1.4458504352519893E-20,
+                                                                                                                                                                                                                  true,
+                                                                                                                                                                                                                  "㽙깹?먏䆢:䴎ۻg殠JBTU⇞}ꄹꗣi#I뵣鉍r혯~脀쏃#釯:场:䔁>䰮o'㼽HZ擓௧nd",
+                                                                                                                                                                                                                  [
+                                                                                                                                                                                                                   974441101787238751,
+                                                                                                                                                                                                                   null,
+                                                                                                                                                                                                                   -2.1647718292441327E-19,
+                                                                                                                                                                                                                   1.03602824249831488E18,
+                                                                                                                                                                                                                   [
+                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                    1.0311977941822604E-17,
+                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                    true,
+                                                                                                                                                                                                                    {
+                                                                                                                                                                                                                     "": -3.7019778830816707E18,
+                                                                                                                                                                                                                     "E峾恆茍6xLIm縂0n2视֯J-ᤜz+ᨣ跐mYD豍繹⹺䊓몓ﴀE(@詮(!Y膽#᎙2䟓섣A䈀㟎,囪QbK插wcG湎ꤧtG엝x⥏俎j'A一ᯥ뛙6ㅑ鬀": 8999803005418087004,
+                                                                                                                                                                                                                     "よ殳\\zD⧅%Y泥簳Uꈩ*wRL{3#3FYHା[d岀䉯T稉駅䞘礄P:闈W怏ElB㤍喬赔bG䠼U଄Nw鰯闀楈ePsDꥷ꭬⊊": [
+                                                                                                                                                                                                                      6.77723657904486E-20,
+                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                      [
+                                                                                                                                                                                                                       "ཚ_뷎꾑蹝q'㾱ꂓ钚蘞慵렜떆`ⴹ⎼櫯]J?[t9Ⓢ !컶躔I᮸uz>3a㠕i,錃L$氰텰@7녫W㸮?羧W뇧ꃞ,N鋮숪2ɼ콏┍䁲6",
+                                                                                                                                                                                                                       "&y?뢶=킕올Za惻HZk>c\u20b58i?ꦶcfBv잉ET9j䡡",
+                                                                                                                                                                                                                       "im珊Ճb칧<D-諂*u2ꡜ췛~䬢(텸ﵦ>校\\뼾쯀",
+                                                                                                                                                                                                                       9.555715121193197E-20,
+                                                                                                                                                                                                                       true,
+                                                                                                                                                                                                                       {
+                                                                                                                                                                                                                        "<㫚v6腓㨭e1㕔&&V∌ᗈT奄5Lጥ>탤?튣瑦㳆ꉰ!(ᙪ㿬擇_n쌯IMΉ㕨␰櫈ᱷ5풔蟹&L.첽e鰷쯃劼﫭b#ﭶ퓀7뷄Wr㢈๧Tʴશ㶑澕鍍%": -1810142373373748101,
+                                                                                                                                                                                                                        "fg晌o?߲ꗄ;>C>?=鑰監侯Kt굅": true,
+                                                                                                                                                                                                                        "䫡蓺ꑷ]C蒹㦘\"1ః@呫\u0014NL䏾eg呮፳,r$裢k>/\\<z": [[
+                                                                                                                                                                                                                         null,
+                                                                                                                                                                                                                         "C䡏>?ㄤᇰﻛ쉕1஥'Ċ\" \\_?쨔\"ʾr: 9S䘏禺ᪧꄂ㲄",
+                                                                                                                                                                                                                         [[{
+                                                                                                                                                                                                                          "*硙^+E쌺I1䀖ju?:⦈Ꞓl๴竣迃xKC/饉:\fl\"XTFᄄ蟭,芢<\/骡軺띜hꏘ\u001f銿<棔햳▨(궆*=乥b8\\媦䷀뫝}닶ꇭ(Kej䤑M": [{
+                                                                                                                                                                                                                           "1Ꮼ?>옿I╅C<ގ?ꊌ冉SV5A㢊㶆z-๎玶绢2F뵨@㉌뀌o嶔f9-庒茪珓뷳4": null,
+                                                                                                                                                                                                                           ";lᰳ": "CbB+肻a䄷苝*/볳+/4fq=㰁h6瘉샴4铢Y骐.⌖@哼猎㦞+'gꋸ㒕ߤ㞑(䶒跲ti⑴a硂#No볔",
+                                                                                                                                                                                                                           "t?/jE幸YHT셵⩎K!Eq糦ꗣv刴w\"l$ο:=6:移": {
+                                                                                                                                                                                                                            "z]鑪醊嫗J-Xm銌翁絨c里됏炙Ep㣋鏣똼嚌䀓GP﹖cmf4鹭T䅿꣭姧␸wy6ꦶ;S&(}ᎧKxᾂQ|t뻳k\"d6\"|Ml췆hwLt꼼4$&8Պ褵婶鯀9": {"嵃닢ᒯ'd᧫䳳#NXe3-붋鸿ଢ떓%dK\u0013䲎ꖍYV.裸R⍉rR3蟛\\:젯:南ĺLʆ넕>|텩鴷矔ꋅⒹ{t孶㓑4_": [
+                                                                                                                                                                                                                             true,
+                                                                                                                                                                                                                             null,
+                                                                                                                                                                                                                             [
+                                                                                                                                                                                                                              false,
+                                                                                                                                                                                                                              "l怨콈lᏒ",
+                                                                                                                                                                                                                              {
+                                                                                                                                                                                                                               "0w䲏嬧-:`䉅쉇漧\\܂yㄨb%㽄j7ᦶ涶<": 3.7899452730383747E-19,
+                                                                                                                                                                                                                               "ꯛTẀq纤q嶏V⿣?\"g}ი艹(쥯B T騠I=仵및X": {"KX6颠+&ᅃ^f畒y[": {
+                                                                                                                                                                                                                                "H?뱜^?꤂-⦲1a㋞&ꍃ精Ii᤾챪咽쬘唂쫷<땡劈훫놡o㥂\\ KⴙD秼F氮[{'좴:례晰Iq+I쭥_T綺砸GO煝䟪ᚪ`↹l羉q쐼D꽁ᜅ훦: vUV": true,
+                                                                                                                                                                                                                                "u^yﳍ0㱓#[y뜌앸ꊬL㷩?蕶蘾⻍KӼ": -7931695755102841701,
+                                                                                                                                                                                                                                "䤬轉車>\u001c鴵惋\"$쯃྆⇻n뽀G氠S坪]ಲꨍ捇Qxኻ椕駔\\9ࣼ﫻읜磡煮뺪ᶚ볝l㕆t+sζ": [[[
+                                                                                                                                                                                                                                 true,
+                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                 [
+                                                                                                                                                                                                                                  null,
+                                                                                                                                                                                                                                  3363739578828074923,
+                                                                                                                                                                                                                                  true,
+                                                                                                                                                                                                                                  {
+                                                                                                                                                                                                                                   "\"鸣詩 볰㑵gL㯦῅춝旫}ED辗ﮈI쀤-ꧤ|㠦Z\"娑ᕸ4爏騍㣐\"]쳝Af]茛⬻싦o蚁k䢯䩐菽3廇喑ޅ": 4.5017999150704666E17,
+                                                                                                                                                                                                                                   "TYႇ7ʠ值4챳唤~Zo&ݛ": false,
+                                                                                                                                                                                                                                   "`塄J袛㭆끺㳀N㺣`꽐嶥KﯝSVᶔ∲퀠獾N딂X\"ᤏhNﬨvI": {"\u20bb㭘I䖵䰼?sw䂷쇪](泒f\"~;꼪Fԝsᝦ": {"p,'ꉂ軿=A蚶?bƉ㏵䅰諬'LYKL6B깯⋩겦뎙(ᜭ\u0006噣d꾆㗼Z;䄝䚔cd<情@䞂3苼㸲U{)<6&ꩻ钛\u001au〷N숨囖愙j=BXW욕^x芜堏Ῑ爂뛷꒻t✘Q\b": [[
+                                                                                                                                                                                                                                    "籛&ଃ䩹.ꃩ㦔\\C颫#暪&!勹ꇶ놽攺J堬镙~軌C'꾖䣹㮅岃ᙴ鵣",
+                                                                                                                                                                                                                                    4.317829988264744E15,
+                                                                                                                                                                                                                                    6.013585322002147E-20,
+                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                    true,
+                                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                                    -3.084633632357326E-20,
+                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                                    {
+                                                                                                                                                                                                                                     "\"짫愔昻  X\"藣j\"\"먁ཅѻ㘤㬯0晲DU꟒㸃d벀윒l䦾c੻*3": null,
+                                                                                                                                                                                                                                     "谈Wm陧阦咟ฯ歖擓N喴㋐銭rCCnVࢥ^♼Ⅾ젲씗刊S༝+_t赔\\b䚍뉨ꬫ6펛cL䊘᜼<\/澤pF懽&H": [
+                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                       "W\"HDUuΌ퀟M'P4࿰H똆ⰱﮯ<\/凐蘲\"C鴫ﭒж}ꭩ쥾t5yd诪ﮡ퍉ⴰ@?氐醳rj4I6Qt": 6.9090159359219891E17,
+                                                                                                                                                                                                                                       "絛ﳛ⺂": {"諰P㗮聦`ZQ?ꫦh*റcb⧱}埌茥h{棩렛툽o3钛5鮁l7Q榛6_g)ὄ\u0013kj뤬^爖eO4Ⱈ槞鉨ͺ订%qX0T썗嫷$?\\\"봅늆'%": [
+                                                                                                                                                                                                                                        -2.348150870600346E-19,
+                                                                                                                                                                                                                                        [[
+                                                                                                                                                                                                                                         true,
+                                                                                                                                                                                                                                         -6619392047819511778,
+                                                                                                                                                                                                                                         false,
+                                                                                                                                                                                                                                         [[
+                                                                                                                                                                                                                                          -1.2929189982356161E-20,
+                                                                                                                                                                                                                                          1.7417192219309838E-19,
+                                                                                                                                                                                                                                          {"?嵲2࿐2\u0001啑㷳c縯": [
+                                                                                                                                                                                                                                           null,
+                                                                                                                                                                                                                                           [
+                                                                                                                                                                                                                                            false,
+                                                                                                                                                                                                                                            true,
+                                                                                                                                                                                                                                            2578060295690793218,
+                                                                                                                                                                                                                                            {
+                                                                                                                                                                                                                                             "?\"殃呎#㑑F": true,
+                                                                                                                                                                                                                                             "}F炊_殛oU헢兔Ꝉ,赭9703.B数gTz3⏬": {
+                                                                                                                                                                                                                                              "5&t3,햓Mݸᵣ㴵;꣫䩍↳#@뫷䠅+W-ࣇzᓃ鿕ಔ梭?T䮑ꥬ旴]u뫵막bB讍:왳둛lEh=숾鱠p咐$짏#?g⹷ᗊv㷵.斈u頻\u0018-G.": "뽙m-ouࣤ஫牷\"`Ksꕞ筼3HlȨvC堈\"I]㖡玎r먞#'W賜鴇k'c룼髋䆿飉㗆xg巤9;芔cጐ/ax䊨♢큓r吓㸫೼䢗da᩾\"]屣`",
+                                                                                                                                                                                                                                              ":M딪<䢥喠\u0013㖅x9蕐㑂XO]f*Q呰瞊吭VP@9,㨣 D\\穎vˤƩs㜂-曱唅L걬/롬j㈹EB8g<\/섩o渀\"u0y&룣": ">氍緩L/䕑돯Ꟙ蕞^aB뒣+0jK⪄瑨痜LXK^힦1qK{淚t츔X:Vm{2r獁B뾄H첚7氥?쉟䨗ꠂv팳圎踁齀\\",
+                                                                                                                                                                                                                                              "D彤5㢷Gꪻ[lㄆ@὜⓰絳[ଃ獽쮹☒[*0ꑚ㜳": 9022717159376231865,
+                                                                                                                                                                                                                                              "ҖaV銣tW+$魿\u20c3亜~뫡ᙰ禿쨽㏡fṼzE/h": "5臐㋇Ჯ쮺? 昨탰Wム밎#'\"崲钅U?幫뺀⍾@4kh>騧\\0ҾEV=爐͌U捀%ꉼ 㮋<{j]{R>:gԩL\u001c瀈锌ﯲﳡꚒ'⫿E4暍㌗뵉X\"H᝜",
+                                                                                                                                                                                                                                              "ᱚגּ;s醒}犍SἿ㦣&{T$jkB\\\tḮ앾䤹o<避(tW": "vb⯽䴪䮢@|)",
+                                                                                                                                                                                                                                              "⥒퐁껉%惀뗌+녣迺顀q條g⚯i⤭룐M琹j̈́⽜A": -8385214638503106917,
+                                                                                                                                                                                                                                              "逨ꊶZ<\/W⫟솪㎮ᘇb?ꠔi\"H㧺x෷韒Xꫨฟ|]窽\u001a熑}Agn?Mᶖa<rఄ4Ů䢤슲Axģe곖㴤x竾郍B謉鸵k薽M)\"芣眜`菉ꉛ䴺": "鹏^ె캫?3耲]|Ü1䡒㝮]8e?䶍^",
+                                                                                                                                                                                                                                              "뿸樅#P㡊1M룮Uꪭ绢ꑮZ9꽸": {"\nJ^є|3袄ㅐ7⨆銦y睝⋷仴ct?[,<\/ㅬ`?갔髞%揁A೚C": {
+                                                                                                                                                                                                                                               " 䇞3갫䅪": [{
+                                                                                                                                                                                                                                                "0|⩁㑂砕ㅻ": null,
+                                                                                                                                                                                                                                                "D箳᠉`|=⼭)\"*࣊㦏LjO誋": "",
+                                                                                                                                                                                                                                                "ࠚDZmꗥ}ᷴ╈r7헴ȥ4Kp5a)o}鎘门L搰䆓'✎k俎c#T68ӏ⩶6L鎴<r൦$黊BQY㼳\\跿F慮⡨拵贀!甶V喅/": null,
+                                                                                                                                                                                                                                                "ⵣq⳹ﻨLk]晩1*y\\$%}䖶P煑㇆䈦E嫁櫕Y࣓嫨䓏OL낮梚㸇洛洚BYtgl∛S☕䉓宑⋢粚ꔯ꠼붠": ")ꬑ윤`\"Ⱓ<\/婽*Y䔸ᓰ_ﳍt슲坩隥&S糧䛮闵诌豐sh쯽邴*섴؏͎=㯨\"RVힳ,^t\"ac?䤒ꉀxHa=Uꛕ㐙TkF껾",
+                                                                                                                                                                                                                                                "弾cUAF?暤c덽.欀nK앭]r傊䀓ﯳ馽垃[䥛oI0N砊鈥헅Co쟋钄ㅷ㊌뷚7": [
+                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                 "૓鏨?^䆏{\u0006`X䧵儱&롡尙砡\u0006뻝쑬sj▻XfᬶgcㄢV >9韲4$3Ỵ^=쏍煤ፐ돷2䣃%鷠/eQ9頸쥎",
+                                                                                                                                                                                                                                                 2398360204813891033,
+                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                 3.2658897259932633E-19,
+                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                 "?ꚃ8Nn㞷幵d䲳䱲뀙ꪛQ瑓鎴]䩋-鰾捡䳡??掊",
+                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                 -1309779089385483661,
+                                                                                                                                                                                                                                                 "ᦲxu_/yecR.6芏.ᜇ過 ~",
+                                                                                                                                                                                                                                                 -5658779764160586501,
+                                                                                                                                                                                                                                                 "쒌:曠=l썜䢜wk#s蕚\"互㮉m䉤~0듐䋙#G;h숄옥顇෤勹(C7㢅雚㐯L⠅VV簅<",
+                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                 -4.664877097240962E18,
+                                                                                                                                                                                                                                                 -4.1931322262828017E18,
+                                                                                                                                                                                                                                                 {
+                                                                                                                                                                                                                                                  ",": {
+                                                                                                                                                                                                                                                   "v㮟麑䄠뤵g{M띮.\u001bzt뢜뵡0Ǥ龍떟Ᾰ怷ϓRT@Lꀌ樂U㏠⾕e扉|bJg(뵒㠶唺~ꂿ(땉x⻫싉쁊;%0鎻V(o\f,N鏊%nk郼螺": -1.73631993428376141E18,
+                                                                                                                                                                                                                                                   "쟧摑繮Q@Rᕾ㭚㾣4隅待㓎3蒟": [
+                                                                                                                                                                                                                                                    4971487283312058201,
+                                                                                                                                                                                                                                                    8973067552274458613,
+                                                                                                                                                                                                                                                    {
+                                                                                                                                                                                                                                                     "`a揙ᣗ\u0015i<S幼訃锭B0&槩✨[Wp皩[g≊k葾x2ᡆ橲䲢W": true,
+                                                                                                                                                                                                                                                     "kH皈Sꁱq傑u?솹풑~o^F=劣N*reJ沤wW苯7p㼹䎐a=ꮧL㷩냴nWꌑ㞱uu谁lVN珿᤻(e豶5#L쪉ᅄ઄\u0015숟봊P瀚X蓎": false,
+                                                                                                                                                                                                                                                     "䫯דּ〖Sc䛭점L뵾pCꙞ\"엇즓_ﰛ톣ꫀ먩㺣㮠⭴!\\W┏t䖰軅y\u0014~ᇰ렢E7*俜䥪W䀩䷐h봆vjஉ묣༏G39.뼳輼:㮿ᐦA饕TUL}~": [
+                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                      8.8648298810470003E17,
+                                                                                                                                                                                                                                                      5.735561205600924E-20,
+                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                      -102555823658171644,
+                                                                                                                                                                                                                                                      1.2674932032973067E-19,
+                                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                                       "D胣O㯨\u0017Ku눓㒏텁nᨊ!Ꚇ廫_>Bo¸": 4.3236479112537999E18,
+                                                                                                                                                                                                                                                       "HW&퉡ぁ圍<W)6悰ꠑHEp14xy峑ft\u0005s亘V튉䢮ꦈX嵐꬝?lI_덝춇-6Ss噺Nk-ﮥ큃܁郪*PR(S6╋@仙V懸뺵ﯜV粹": "9䗌斀4㐈^Qs隄硏j\u0003",
+                                                                                                                                                                                                                                                       "Vk鶅C泹筁HX훉朗*r\\z顊誌儖4?n7᏾6몋䎡ﳈ],H頢p蚐㑄P4满E䏩V䬕ญL廂쒬쑨ꆷh迡ꍰ譖墎 ]鹿ฌ7ﶽ冭༽<ꈓS\\l䋮?_ユ檒?": -8598528325153980065,
+                                                                                                                                                                                                                                                       "t=q퍣疻тZ\\錅J.镎|nfḷ鴒1厰L灯纜E]୦⥪]Ꮾ'羝p/咩0닳ﳁqﳖཽk ?X1Ft%ś뭢v鋋⺃爵⒗": [[
+                                                                                                                                                                                                                                                        5.0824756359232045E-19,
+                                                                                                                                                                                                                                                        [
+                                                                                                                                                                                                                                                         7.268480839079619E-19,
+                                                                                                                                                                                                                                                         {"탿^굞⧕iј덊ꀛw껩6ꟳXs酚\\>Y?瑡Qy훍q!帰敏s舠㫸zꚗaS歲v`G株巷Jp6킼 (귶鍔⾏⡈>M汐㞍ቴ꙲dv@i㳓ᇆ?黍": [
+                                                                                                                                                                                                                                                          null,
+                                                                                                                                                                                                                                                          4997607199327183467,
+                                                                                                                                                                                                                                                          "E㻎蠫ᐾ高䙟蘬洼旾﫠텛㇛?'M$㣒蔸=A_亀绉앭rN帮",
+                                                                                                                                                                                                                                                          null,
+                                                                                                                                                                                                                                                          [{
+                                                                                                                                                                                                                                                           "Eᑞ)8<Z㡿W镀䛒C생V?0ꯦ+tL)`齳AjB姀XೳD빠㻲ƙgn9⑰ྍ῜&\"㚹>餧A5u&㗾q?": [
+                                                                                                                                                                                                                                                            -1.969987519306507E-19,
+                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                            [
+                                                                                                                                                                                                                                                             3.42437673373841E-20,
+                                                                                                                                                                                                                                                             true,
+                                                                                                                                                                                                                                                             "e걷M墁\"割P␛퍧厀R䱜3ﻴO퓫r﹉⹊",
+                                                                                                                                                                                                                                                             [
+                                                                                                                                                                                                                                                              -8164221302779285367,
+                                                                                                                                                                                                                                                              [
+                                                                                                                                                                                                                                                               true,
+                                                                                                                                                                                                                                                               null,
+                                                                                                                                                                                                                                                               "爘y^-?蘞Ⲽꪓa␅ꍨ}I",
+                                                                                                                                                                                                                                                               1.4645984996724427E-19,
+                                                                                                                                                                                                                                                               [{
+                                                                                                                                                                                                                                                                "tY좗⧑mrzﺝ㿥ⴖ᥷j諅\u0000q賋譁Ꞅ⮱S\nࡣB/큃굪3Zɑ复o<\/;롋": null,
+                                                                                                                                                                                                                                                                "彟h浠_|V4䦭Dᙣ♞u쿻=삮㍦\u001e哀鬌": [{"6횣楠,qʎꗇ鎆빙]㱭R굋鈌%栲j分僅ペ䇰w폦p蛃N溈ꡐꏀ?@(GI뉬$ﮄ9誁ꓚ2e甸ڋ[䁺,\u0011\u001cࢃ=\\+衪䷨ᯕ鬸K": [[
+                                                                                                                                                                                                                                                                 "ㅩ拏鈩勥\u000etgWVXs陂規p狵w퓼{뮵_i\u0002ퟑႢ⬐d6鋫F~챿搟\u0096䚼1ۼ칥0꣯儏=鋷牋ⅈꍞ龐",
+                                                                                                                                                                                                                                                                 -7283717290969427831,
+                                                                                                                                                                                                                                                                 true,
+                                                                                                                                                                                                                                                                 [
+                                                                                                                                                                                                                                                                  4911644391234541055,
+                                                                                                                                                                                                                                                                  {
+                                                                                                                                                                                                                                                                   "I鈒첽P릜朸W徨觘-Hᎄ퐟⓺>8kr1{겵䍃〛ᬡ̨O귑o䝕'쿡鉕p5": "fv粖RN瞖蛐a?q꤄\u001d⸥}'ꣴ犿ꦼ?뤋?鵆쥴덋䡫s矷̄?ඣ/;괱絢oWfV<\/\u202cC,㖦0䑾%n賹g&T;|lj_欂N4w",
+                                                                                                                                                                                                                                                                   "짨䠗;䌕u i+r๏0": [{"9䥁\\఩8\"馇z䇔<\/ႡY3e狚쐡\"ุ6ﰆZ遖c\"Ll:ꮾ疣<\/᭙O◌납୕湞9⡳Und㫜\u0018^4pj1;䧐儂䗷ୗ>@e톬": {
+                                                                                                                                                                                                                                                                    "a⑂F鋻Q螰'<퇽Q贝瀧{ᘪ,cP&~䮃Z?gI彃": [
+                                                                                                                                                                                                                                                                     -1.69158726118025933E18,
+                                                                                                                                                                                                                                                                     [
+                                                                                                                                                                                                                                                                      "궂z簽㔛㮨瘥⤜䛖Gℤ逆Y⪾j08Sn昞ꘔ캻禀鴚P謦b{ꓮmN靐Mᥙ5\"睏2냑I\u0011.L&=?6ᄠ뻷X鸌t刑\"#z)o꫚n쳟줋",
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      7517598198523963704,
+                                                                                                                                                                                                                                                                      "ኑQp襟`uᩄr方]*F48ꔵn俺ሙ9뇒",
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      6645782462773449868,
+                                                                                                                                                                                                                                                                      1219168146640438184,
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                                                       ")ယ넌竀Sd䰾zq⫣⏌ʥ\u0010ΐ' |磪&p牢蔑mV蘸૰짬꺵;K": [
+                                                                                                                                                                                                                                                                        -7.539062290108008E-20,
+                                                                                                                                                                                                                                                                        [
+                                                                                                                                                                                                                                                                         true,
+                                                                                                                                                                                                                                                                         false,
+                                                                                                                                                                                                                                                                         null,
+                                                                                                                                                                                                                                                                         true,
+                                                                                                                                                                                                                                                                         6574577753576444630,
+                                                                                                                                                                                                                                                                         [[
+                                                                                                                                                                                                                                                                          1.2760162530699766E-19,
+                                                                                                                                                                                                                                                                          [
+                                                                                                                                                                                                                                                                           null,
+                                                                                                                                                                                                                                                                           [
+                                                                                                                                                                                                                                                                            "顊\\憎zXB,",
+                                                                                                                                                                                                                                                                            [{
+                                                                                                                                                                                                                                                                             "㇆{CVC9-MN㜋ઘR눽#{h@ퟨ!鼚׼XOvXS\u0017ᝣ=cS+梽៲綆16s덽휐y屬?ᇳG2ᴭ\u00054쫖y룇nKcW̭炦s/鰘ᬽ?J|퓀髣n勌\u0010홠P>j": false,
+                                                                                                                                                                                                                                                                             "箴": [
+                                                                                                                                                                                                                                                                              false,
+                                                                                                                                                                                                                                                                              "鍞j\"ꮾ*엇칬瘫xṬ⭽쩁䃳\"-⋵?ᦽ<cਔ↎⩧%鱩涎삧u9K⦈\"῝ᬑV绩킯愌ṱv@GꝾ跶Ꚇ(?䖃vI᧊xV\r哦j㠒?*=S굤紴ꊀ鹭쬈s<DrIu솹꧑?",
+                                                                                                                                                                                                                                                                              {
+                                                                                                                                                                                                                                                                               ".}S㸼L?t\u000fK⑤s~hU鱜꘦}쪍C滈4ꓗ蛌):ྦ\"顥이⢷ῳYLn\"?fꘌ>댎Ĝ": true,
+                                                                                                                                                                                                                                                                               "Pg帯佃籛n㔠⭹࠳뷏≻࿟3㞱!-쒾!}쭪䃕!籿n涻J5ਲ਼yvy;Rኂ%ᔡጀ裃;M⣼)쵂쑈": 1.80447711803435366E18,
+                                                                                                                                                                                                                                                                               "ꈑC⡂ᑆ㤉壂뎃Xub<\/쀆༈憓ق쨐ק\\": [
+                                                                                                                                                                                                                                                                                7706977185172797197,
+                                                                                                                                                                                                                                                                                {"": {"K╥踮砆NWࡆFy韣7ä밥{|紒︧䃀榫rᩛꦡTSy잺iH8}ퟴ,M?Ʂ勺ᴹ@T@~꾂=I㙕뾰_涀쑜嫴曣8IY?ҿo줫fऒ}\\S\"ᦨ뵼#nDX": {
+                                                                                                                                                                                                                                                                                 "♘k6?଱癫d68?㽚乳䬳-V顷\u0005蝕?\u0018䞊V{邾zじl]雏k臤~ൖH뒐iꢥ]g?.G碄懺䔛p<q꜉S岗_.%": 7688630934772863849,
+                                                                                                                                                                                                                                                                                 "溗摽嗙O㧀,⡢⼰呠ꅧ㓲/葇䢛icc@-r\b渂ꌳ뻨饑觝ᖜ\\鮭\u0014엙㥀᧺@浹W2꛵{W률G溮킀轡䬆g㨑'Q聨៪网Hd\"Q늴ᱢﶨ邮昕纚枑?▰hr羌驀[痹<\/": [
+                                                                                                                                                                                                                                                                                  -1.0189902027934687E-19,
+                                                                                                                                                                                                                                                                                  {"窶椸릎뚻shE\"ꪗႥꎳU矖佟{SJ": [{"-慜x櫹XY-澐ܨ⣷ઢ鯙%Fu\u0000迋▒}᥷L嗭臖oញc넨\u0016/迎1b꯸g뢱㐧蓤䒏8C散삭|\"컪輩鹩\"\\g$zG䥽긷?狸꿭扵㲐:URON&oU8": [
+                                                                                                                                                                                                                                                                                   null,
+                                                                                                                                                                                                                                                                                   true,
+                                                                                                                                                                                                                                                                                   null,
+                                                                                                                                                                                                                                                                                   -2.8907335031148883E17,
+                                                                                                                                                                                                                                                                                   -3864019407187144121,
+                                                                                                                                                                                                                                                                                   {
+                                                                                                                                                                                                                                                                                    "`빬d⵺4H뜳⧈쓑ohஸ*㶐ﻇ⸕䠵!i䝬﹑h夘▥ꗐ푹갇㵳TA鳠嚵\\B<X}3訒c⋝{*﫢w]璨-g捭\\j໵侠Ei层\u0011": 3.758356090089446E-19,
+                                                                                                                                                                                                                                                                                    "䄘ﮐ)Y놞씃㾱陰큁:{\u2059/S⓴": [[
+                                                                                                                                                                                                                                                                                     null,
+                                                                                                                                                                                                                                                                                     [[
+                                                                                                                                                                                                                                                                                      -3.8256602120220546E-20,
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      7202317607724472882,
+                                                                                                                                                                                                                                                                                      "CWQ뚿",
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      false,
+                                                                                                                                                                                                                                                                                      true,
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      2857038485417498625,
+                                                                                                                                                                                                                                                                                      6.191302233218633E-20,
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      -6795250594296208046,
+                                                                                                                                                                                                                                                                                      [
+                                                                                                                                                                                                                                                                                       true,
+                                                                                                                                                                                                                                                                                       {
+                                                                                                                                                                                                                                                                                        "%ዧ遰Yᚯ⚀x莰愒Vᔈ턗BN洝ꤟA1⍌l콹풪H;OX๫륞쪐ᰚц@͎黾a邬<L厒Xb龃7f웨窂二;": [[
+                                                                                                                                                                                                                                                                                         null,
+                                                                                                                                                                                                                                                                                         "耲?䙧㘓F6Xs틭멢.v뚌?鄟恠▽'묺競?WvᆾCtxo?dZ;䨸疎",
+                                                                                                                                                                                                                                                                                         {
+                                                                                                                                                                                                                                                                                          "@hWꉁ&\"빜4礚UO~C;う殩_ꀥ蘁奢^챟k→ᡱKMⵉ<\/Jㅲ붉L͟Q": false,
+                                                                                                                                                                                                                                                                                          "tU뢂8龰I먽7,.Y搽Z툼=&⨥覽K乫햶㠸%#@Z끖愓^⍊⾂몒3E_噆J(廊ឭyd䞜鈬Ћ档'⣘I": {
+                                                                                                                                                                                                                                                                                           "tK*ꔵ銂u艗ԃ쿏∳ꄂ霫X3♢9y?=ⲭdЊb&xy}": [
+                                                                                                                                                                                                                                                                                            -4.097346784534325E-20,
+                                                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                                                            6016848468610144624,
+                                                                                                                                                                                                                                                                                            -8194387253692332861,
+                                                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                                                            {
+                                                                                                                                                                                                                                                                                             "(祬诀譕쯠娣c봝r?畄kT뼾⌘⎨?noV䏘쥝硎n?": [
+                                                                                                                                                                                                                                                                                              1.82679422844617293E18,
+                                                                                                                                                                                                                                                                                              [
+                                                                                                                                                                                                                                                                                               false,
+                                                                                                                                                                                                                                                                                               2.6849944122427694E18,
+                                                                                                                                                                                                                                                                                               true,
+                                                                                                                                                                                                                                                                                               [
+                                                                                                                                                                                                                                                                                                false,
+                                                                                                                                                                                                                                                                                                {
+                                                                                                                                                                                                                                                                                                 ";0z⭆;화$bਔ瀓\"衱^?잢ᢛ⣿~`ꕉ薸⌳໿湘腌'&:ryБꋥၼ꒥筙꬜긨?X": -3536753685245791530,
+                                                                                                                                                                                                                                                                                                 "c;Y7釚Uꃣ割J༨Y戣w}c峰뢨㽑㫈0N>R$䅒X觨l봜A刊8R梒',}u邩퉕?;91Ea䈈믁G⊶芔h袪&廣㺄j;㡏綽\u001bN頸쳘橆": -2272208444812560733,
+                                                                                                                                                                                                                                                                                                 "拑Wﵚj鵼駳Oࣿ)#㾅顂N傓纝y僱栜'Bꐍ-!KF*ꭇK¦?䈴^:啤wG逭w᧯": "xᣱmYe1ۏ@霄F$ě꧘푫O䤕퀐Pq52憬ꀜ兴㑗ᡚ?L鷝ퟐ뭐zJꑙ}╆ᅨJB]\"袌㺲u8䯆f",
+                                                                                                                                                                                                                                                                                                 "꿽၅㔂긱Ǧ?SI": -1669030251960539193,
+                                                                                                                                                                                                                                                                                                 "쇝ɨ`!葎>瞺瘡驷錶❤ﻮ酜=": -6961311505642101651,
+                                                                                                                                                                                                                                                                                                 "?f7♄꫄Jᡔ훮e읇퍾፣䭴KhखT;Qty}O\\|뫁IῒNe(5惁ꥶㆷY9ﮡ\\ oy⭖-䆩婁m#x봉>Y鈕E疣s驇↙ᙰm<": {"퉻:dꂁ&efᅫ쫢[\"돈늖꺙|Ô剐1͖-K:ʚ᭕/;쏖㷛]I痐职4g<Oꗢ뫺N쯂륬J╆.`ᇵP轆&fd$?苅o궓vO侃沲⍩嚅沗 E%⿰얦wi\\*趫": [
+                                                                                                                                                                                                                                                                                                  3504362220185634767,
+                                                                                                                                                                                                                                                                                                  false,
+                                                                                                                                                                                                                                                                                                  "qzX朝qT3軞T垈ꮲQ览ᚻ⻑쎎b驌䵆ꬠ5Fୗ䲁缿ꝁ蒇潇Ltᆄ钯蜀W欥ሺ",
+                                                                                                                                                                                                                                                                                                  "볰ɐ霬)젝鶼kwoc엷荁r \u001d쒷⎹8{%澡K늒?iﺩd=&皼倚J9s@3偛twὡgj䁠흪5⭉⨺役&놎cﺉ㺡N5",
+                                                                                                                                                                                                                                                                                                  false,
+                                                                                                                                                                                                                                                                                                  null,
+                                                                                                                                                                                                                                                                                                  "D0st[ni锹r*0k6ꀎ덇UX2⽼৞䃚粭#)Z桷36P]<\/`",
+                                                                                                                                                                                                                                                                                                  4281410120849816730,
+                                                                                                                                                                                                                                                                                                  null,
+                                                                                                                                                                                                                                                                                                  -3256922126984394461,
+                                                                                                                                                                                                                                                                                                  1.16174580369801549E18,
+                                                                                                                                                                                                                                                                                                  {
+                                                                                                                                                                                                                                                                                                   " ᆼꤗ~*TN긂<㡴턱℃酰^蘒涯잰淭傛2rൡet쾣䐇m*㸏y\"\\糮᧺qv쌜镜T@yg1譬ﭧﳭ\f": null,
+                                                                                                                                                                                                                                                                                                   "圾ᨿ0xᮛ禵ਗ਼D-㟻ẵ錚e\"赜.˶m)鴑B(I$<\/轴퉯揷⋏⏺*)宓쓌?*橯Lx\\f쩂㞼⇸\"ﺧ軂遳V\\땒\"캘c:G": null,
+                                                                                                                                                                                                                                                                                                   "?﵁_곢翸폈8㿠h열Q2㭛}RY㯕YT놂⽻e^B<\/맫ﻇ繱\u0017Gц⟊ᢑﵩS:jt櫣嗒⟰W㴚搦ᅉe[w䋺?藂翙Ⲱ芮䍘╢囥lpdu7r볺I 近qFyᗊ": [
+                                                                                                                                                                                                                                                                                                    "$b脬aᅠ襬育Bگ嵺Pw+'M<\/כֿn䚚v螁bN⒂}褺%lቦ阤\"ꓺᏗM牏,۞Ҷ!矬?ke9銊X괦)䈽틁脽ṫ䈞ᴆ^=Yᗿ遛4I귺⋥%",
+                                                                                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                                                                                    2.9444482723232051E18,
+                                                                                                                                                                                                                                                                                                    2072621064799640026,
+                                                                                                                                                                                                                                                                                                    "/_뇴뫢j㍒=Nꡦ↍Ժ赒❬톥䨞珯su*媸瀳鷔抡o흺-៳辏勷f绔:䵢搢2",
+                                                                                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                                                                                    "쒜 E䌐/큁\u0018懺_<\\隺&{wF⤊谼(<죽遠8?@*rᶊGd뻻갇&Ⳇq᣿e࢔t_ꩄ梸O詬C᧧Kꩠ풤9눙醅됞}竸rw?滨ӽK⥿ཊG魲']`๖5㄰",
+                                                                                                                                                                                                                                                                                                    -2375253967958699084,
+                                                                                                                                                                                                                                                                                                    {"嗱⿲\"f億ᝬ": {"v?䚑킡`◤k3,骥曘뒤Oᒱ㲹^圮᠀YT껛&촮P:G/T⣝#튣k3炩蠏k@橈䏷S䧕,熜晬k1鮥玸먚7䤡f绝嗚샴ᥒ~0q拮垑a뻱LⰖ_": [{
+                                                                                                                                                                                                                                                                                                     ":p尢": -6.688985172863383E17,
+                                                                                                                                                                                                                                                                                                     "A0\u0001疠ﻵ爻鼀湶I~W^岀mZx#㍈7r拣$Ꜷ疕≛⦒痋盩Vꬷ᭝ΩQꍪ療鈑A(劽詗ꭅo-獶鑺\"Ⓠ@$j탥;": [
+                                                                                                                                                                                                                                                                                                      8565614620787930994,
+                                                                                                                                                                                                                                                                                                      [
+                                                                                                                                                                                                                                                                                                       "嶗PC?උQ㪣$&j幾㾷h慑 즊慧⪉霄M窊ꁷ'鮕)䊏铨m趦䗲(g罣ЮKVﯦ鏮5囗ﰼ鿦",
+                                                                                                                                                                                                                                                                                                       -7168038789747526632,
+                                                                                                                                                                                                                                                                                                       null,
+                                                                                                                                                                                                                                                                                                       -7.8069738975270288E16,
+                                                                                                                                                                                                                                                                                                       2.25819579241348352E17,
+                                                                                                                                                                                                                                                                                                       -6.5597416611655936E18,
+                                                                                                                                                                                                                                                                                                       {
+                                                                                                                                                                                                                                                                                                        "瘕멦핓+?フZ귢z鍛V": {
+                                                                                                                                                                                                                                                                                                         "ᕾ": 1.7363275204701887E-19,
+                                                                                                                                                                                                                                                                                                         "㭌s뎹㳉": {"\u00187FI6Yf靺+UC쬸麁␲䂿긕R\\ᆮC?Φ耭\rOத际핅홦*베W㸫㯼᡹cㅜ|G㮗\u0013[o`?jHV앝?蒪꩚!퍫ᜦ㌇䚇鿘:@": [
+                                                                                                                                                                                                                                                                                                          "}푛Г콲<䟏C藐呈#2㓋#ྕ፟尿9q竓gI%랙mꍬoa睕贿J咿D_熏Zz皳験I豼B扳ḢQ≖㻹㱣D䝦練2'ᗍ㗣▌砲8罿%హF姦;0悇<\/\"p嚧",
+                                                                                                                                                                                                                                                                                                          -710184373154164247,
+                                                                                                                                                                                                                                                                                                          "Vo쫬⬾ꝫⴷŻ\u0004靎HBꅸ_aVBHbN>Z4⍜kเꛘZ⥺\\Bʫᇩ鄨魢弞&幟ᓮ2̊盜",
+                                                                                                                                                                                                                                                                                                          -9006004849098116748,
+                                                                                                                                                                                                                                                                                                          -3118404930403695681,
+                                                                                                                                                                                                                                                                                                          {
+                                                                                                                                                                                                                                                                                                           "_彃Y艘-\"Xx㤩㳷瑃?%2䐡鵛o<A?\"顜ᘌΈ;ⷅC洺L蚴蚀voq:,Oo4쪂)": 5719065258177391842,
+                                                                                                                                                                                                                                                                                                           "l륪맽耞塻論倐E㗑/㲕QM辬I\"qi酨玑㖪5q]尾魨鲡ƞY}⮯蠇%衟Fsf윔䐚찤i腳": {"ꢪ'a䣊糈": {"밑/♋S8s㼴5瓹O{댞\"9XﰇlJ近8}q{긧ⓈI᱑꿋腸D瀬H\"ﺬ'3?}\u0014#?丙㑯ᥨ圦',g鑠(樴턇?": [
+                                                                                                                                                                                                                                                                                                            2.5879275511391145E18,
+                                                                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                                                                            [
+                                                                                                                                                                                                                                                                                                             "3㼮ꔌ1Gẃ2W龙j͊{1囐㦭9x宠㑝oR䐕犽",
+                                                                                                                                                                                                                                                                                                             1268729930083267852,
+                                                                                                                                                                                                                                                                                                             "땕軚⿦7C",
+                                                                                                                                                                                                                                                                                                             [
+                                                                                                                                                                                                                                                                                                              -3.757935946502082E18,
+                                                                                                                                                                                                                                                                                                              "\"赌'糬_2뭾᝝b",
+                                                                                                                                                                                                                                                                                                              {
+                                                                                                                                                                                                                                                                                                               "(a䕎ጽjҰD4.ᴡ66ԃ畮<\/l`k癸\\㇋ࣆ욯R㫜픉녬挛;ڴ맺`.;焓q淞뮕ٹ趴r蔞ꯔ䟩v粏u5<\/pZ埖Skrvj帛=\u0005aa": null,
+                                                                                                                                                                                                                                                                                                               "璄≩ v몛ᘮ%?:1頌챀H㷪뉮k滘e": [
+                                                                                                                                                                                                                                                                                                                "ꤾ{`c샬왌펡[俊络vmz㪀悫⸹ᷥ5o'㾵 L蹦qjYIYណԠW냁剫<\/W嗂0,}",
+                                                                                                                                                                                                                                                                                                                2.4817616702666762E18,
+                                                                                                                                                                                                                                                                                                                false,
+                                                                                                                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                                                                                                                -8.6036958071260979E17,
+                                                                                                                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                                                                                                                -1.2744078022652468E-19,
+                                                                                                                                                                                                                                                                                                                -4.4752020268429594E17,
+                                                                                                                                                                                                                                                                                                                1.13672865156637872E17,
+                                                                                                                                                                                                                                                                                                                [
+                                                                                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                                                                                 -4.178004168554046E-20,
+                                                                                                                                                                                                                                                                                                                 true,
+                                                                                                                                                                                                                                                                                                                 2927542512798605527,
+                                                                                                                                                                                                                                                                                                                 {
+                                                                                                                                                                                                                                                                                                                  ".ꔓ뉤1䵬cHy汼䊆賓ᐇƩ|樷❇醎㬅4\u0003赵}#yD5膏晹뱓9ꖁ虛J㺕 t䊛膎ؤ": {
+                                                                                                                                                                                                                                                                                                                   "rVtᓸ5^`েN⹻Yv᥋lꌫt拘?<鮰넿ZC?㒽^": {"␪k_:>귵옔夘v*탋职&㳈챗|O钧": [
+                                                                                                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                                                                                                    "daꧺdᗹ羞쯧H㍤鄳頳<型孒ン냆㹀f4㹰\u000f|C*ሟ鰠(O<ꨭ峹ipຠ*y೧4VQ蔔hV淬{?ᵌEfrI_",
+                                                                                                                                                                                                                                                                                                                    "j;ꗣ밷邍副]ᗓ",
+                                                                                                                                                                                                                                                                                                                    -4299029053086432759,
+                                                                                                                                                                                                                                                                                                                    -5610837526958786727,
+                                                                                                                                                                                                                                                                                                                    [
+                                                                                                                                                                                                                                                                                                                     null,
+                                                                                                                                                                                                                                                                                                                     [
+                                                                                                                                                                                                                                                                                                                      -1.3958390678662759E-19,
+                                                                                                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                                                                                                       "lh좈T_믝Y\"伨\u001cꔌG爔겕ꫳ晚踍⿻읐T䯎]~e#฽燇\"5hٔ嶰`泯r;ᗜ쮪Q):/t筑,榄&5懶뎫狝(": [{
+                                                                                                                                                                                                                                                                                                                        "2ፁⓛ]r3C攟וּ9賵s⛔6'ஂ|\"ⵈ鶆䐹禝3\"痰ࢤ霏䵩옆䌀?栕r7O簂Isd?K᫜`^讶}z8?z얰T:X倫⨎ꑹ": -6731128077618251511,
+                                                                                                                                                                                                                                                                                                                        "|︦僰~m漿햭\\Y1'Vvخ굇ቍ챢c趖": [null]
+                                                                                                                                                                                                                                                                                                                       }],
+                                                                                                                                                                                                                                                                                                                       "虌魿閆5⛔煊뎰㞤ᗴꥰF䮥蘦䂪樳-K᝷-(^\u20dd_": 2.11318679791770592E17
+                                                                                                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                                                                                                    ]
+                                                                                                                                                                                                                                                                                                                   ]},
+                                                                                                                                                                                                                                                                                                                   "묗E䀳㧯᳀逞GMc\b墹㓄끖Ơ&U??펌鑍 媋k))ᄊ": null,
+                                                                                                                                                                                                                                                                                                                   "묥7콽벼諌J_DɯﮪM殴䣏,煚ྼ`Y:씧<\/⩫%yf䦀!1Ჶk춎Q米W∠WC跉鬽*ᛱi<?,l<崣炂骵*?8푐៣ⰵ憉⎑.,Nw罣q+ο컆弎": false
+                                                                                                                                                                                                                                                                                                                  },
+                                                                                                                                                                                                                                                                                                                  "e[|଀+lꑸ㝈TT?뿿|ꫛ9`㱯䊸楋-곳賨?쳁k棽擋wQ餈⟐Nq[q霩䵀뷮锅ꚢ": 5753148631596678144,
+                                                                                                                                                                                                                                                                                                                  "sᓝ鴻߸d렶ὕ蜗ဟ툑!诉౿": false,
+                                                                                                                                                                                                                                                                                                                  "|4䕳鵻?䈔(]틍/Ui#湻{듲ーMዀt7潔泄Ch⸨}쏣`螧銚㋼壯kⰥQ戵峉갑x辙'첛": "jd䘯$䕌茷!auw眶ㅥ䁣ꆢ民i",
+                                                                                                                                                                                                                                                                                                                  "剖駰ꞫsM2]ᾴ2ࡷ祅拌Av狔꩛'ꓗ킧ꣁ0酜✘O'": false,
+                                                                                                                                                                                                                                                                                                                  "澩뢣ꀁeU~D\\ꮡ킠": "v^YC嚈ί\u0007죋h>㴕L꘻ꀏ쓪\"_g鿄'#t⽙?,Wg㥖|D鑆e⥏쪸僬h鯔咼ඡ;4TK聎졠嫞"
+                                                                                                                                                                                                                                                                                                                 }
+                                                                                                                                                                                                                                                                                                                ]
+                                                                                                                                                                                                                                                                                                               ]
+                                                                                                                                                                                                                                                                                                              }
+                                                                                                                                                                                                                                                                                                             ]
+                                                                                                                                                                                                                                                                                                            ]
+                                                                                                                                                                                                                                                                                                           ]}}
+                                                                                                                                                                                                                                                                                                          }
+                                                                                                                                                                                                                                                                                                         ]}
+                                                                                                                                                                                                                                                                                                        },
+                                                                                                                                                                                                                                                                                                        "뿋뀾淣截䔲踀&XJ펖꙯^Xb訅ꫥgᬐ>棟S\"혧騾밫겁7-": "擹8C憎W\"쵮yR뢩浗絆䠣簿9䏈引Wcy䤶孖ꯥ;퐌]輩䍐3@{叝 뽸0ᡈ쵡Ⲇ\u001dL匁꧐2F~ݕ㪂@W^靽L襒ᦘ~沦zZ棸!꒲栬R"
+                                                                                                                                                                                                                                                                                                       }
+                                                                                                                                                                                                                                                                                                      ]
+                                                                                                                                                                                                                                                                                                     ],
+                                                                                                                                                                                                                                                                                                     "Z:덃൛5Iz찇䅄駠㭧蓡K1": "e8᧤좱U%?ⵇ䯿鿝\u0013縮R∱骒EO\u000fg?幤@֗퉙vU`",
+                                                                                                                                                                                                                                                                                                     "䐃쪈埽້=Ij,쭗쓇చ": false
+                                                                                                                                                                                                                                                                                                    }]}}
+                                                                                                                                                                                                                                                                                                   ]
+                                                                                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                                                                                 ]}
+                                                                                                                                                                                                                                                                                                }
+                                                                                                                                                                                                                                                                                               ]
+                                                                                                                                                                                                                                                                                              ]
+                                                                                                                                                                                                                                                                                             ],
+                                                                                                                                                                                                                                                                                             "咰긖VM]᝼6䓑쇎琺etDҌ?㞏ꩄ퇫밉gj8蠃\"⩐5䛹1ࣚ㵪": "ക蹊?⎲⧘⾚̀I#\"䈈⦞돷`wo窭戕෱휾䃼)앷嵃꾞稧,Ⴆ윧9S?೗EMk3Მ3+e{⹔Te驨7䵒?타Ulg悳o43"
+                                                                                                                                                                                                                                                                                            }
+                                                                                                                                                                                                                                                                                           ],
+                                                                                                                                                                                                                                                                                           "zQᤚ纂땺6#ٽ﹧v￿#ࠫ휊冟蹧텈ꃊʆ?&a䥯De潝|쿓pt瓞㭻啹^盚2Ꝋf醪,얏T窧\\Di䕎谄nn父ꋊE": -2914269627845628872,
+                                                                                                                                                                                                                                                                                           "䉩跐|㨻ᷢ㝉B{蓧瞸`I!℄욃힕#ೲᙾ竛ᔺCjk췒늕貭词\u0017署?W딚%(pꍁ⤼띳^=on뺲l䆼bzrﳨ[&j狸䠠=ᜑꦦ\u2061յnj=牲攑)M\\龏": false,
+                                                                                                                                                                                                                                                                                           "뎕y絬᫡⥮Ϙᯑ㌔/NF*˓.,QEzvK!Iwz?|쥾\"ꩻL꼗Bꔧ賴緜s뉣隤茛>ロ?(?^`>冺飒=噸泥⺭Ᲊ婓鎔븜z^坷裮êⓅ໗jM7ﶕ找\\O": 1.376745434746303E-19
+                                                                                                                                                                                                                                                                                          },
+                                                                                                                                                                                                                                                                                          "䐛r滖w㏤<k;l8ꡔጵ⮂ny辶⋃퍼僮z\"﮲X@t5෼暧퓞猋♅䦖QC鹮|픨( ,>,|Nዜ": false
+                                                                                                                                                                                                                                                                                         }
+                                                                                                                                                                                                                                                                                        ]],
+                                                                                                                                                                                                                                                                                        "@꿙?薕尬 gd晆(띄5躕ﻫS蔺4)떒錸瓍?~": 1665108992286702624,
+                                                                                                                                                                                                                                                                                        "w믍nᏠ=`঺ᅥC>'從됐槷䤝眷螄㎻揰扰XᅧC贽uჍ낟jKD03T!lDV쀉Ӊy뢖,袛!终캨G?鉮Q)⑗1쾅庅O4ꁉH7?d\u0010蠈줘월ސ粯Q!낇껉6텝|{": null,
+                                                                                                                                                                                                                                                                                        "~˷jg쿤촖쉯y": -5.5527605669177098E18,
+                                                                                                                                                                                                                                                                                        "펅Wᶺzꐆと푭e?4j仪열[D<鈑皶婆䵽ehS?袪;HꍨM뗎ば[(嗏M3q퍟g4y╸鰧茀[Bi盤~﫝唎鋆彺⦊q?B4쉓癚O洙킋툈䶯_?ퟲ": null
+                                                                                                                                                                                                                                                                                       }
+                                                                                                                                                                                                                                                                                      ]
+                                                                                                                                                                                                                                                                                     ]]
+                                                                                                                                                                                                                                                                                    ]],
+                                                                                                                                                                                                                                                                                    "꟱Ԕ㍤7曁聯ಃ錐V䷰?v㪃૦~K\"$%请|ꇹn\"k䫛㏨鲨\u2023䄢\u0004[<S8ᐬ뭩脥7U.m࿹:D葍┆2蘸^U'w1젅;䠆ꋪB껮>︊VJ?䶟ាꮈ䗱=깘U빩": -4863152493797013264
+                                                                                                                                                                                                                                                                                   }
+                                                                                                                                                                                                                                                                                  ]}]}
+                                                                                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                                                                                }}}
+                                                                                                                                                                                                                                                                               ],
+                                                                                                                                                                                                                                                                               "쏷쐲۹퉃~aE唙a챑,9㮹gLHd'䔏|킗㍞䎥&KZYT맵7䥺N<Hp4ꕭ⹠꽐c~皽z": "课|ᖾ䡁廋萄䐪W\u0016&Jn괝b~摓M>ⱳ同莞鿧w\\༌疣n/+ꎥU\"封랾○ퟙAJᭌ?9䛝$?驔9讐짘魡T֯c藳`虉C읇쐦T"
+                                                                                                                                                                                                                                                                              }
+                                                                                                                                                                                                                                                                             ],
+                                                                                                                                                                                                                                                                             "谶개gTR￐>ၵ͚dt晑䉇陏滺}9㉸P漄": -3350307268584339381
+                                                                                                                                                                                                                                                                            }]
+                                                                                                                                                                                                                                                                           ]
+                                                                                                                                                                                                                                                                          ]
+                                                                                                                                                                                                                                                                         ]]
+                                                                                                                                                                                                                                                                        ]
+                                                                                                                                                                                                                                                                       ],
+                                                                                                                                                                                                                                                                       "0y꟭馋X뱔瑇:䌚￐廿jg-懲鸭䷭垤㒬茭u賚찶ಽ+\\mT땱\u20821殑㐄J쩩䭛ꬿNS潔*d\\X,壠뒦e殟%LxG9:摸": 3737064585881894882,
+                                                                                                                                                                                                                                                                       "풵O^-⧧ⅶvѪ8廸鉵㈉ר↝Q㿴뺟EႳvNM:磇>w/៻唎뷭୥!냹D䯙i뵱貁C#⼉NH6`柴ʗ#\\!2䂗Ⱨf?諳.P덈-返I꘶6?8ꐘ": -8934657287877777844,
+                                                                                                                                                                                                                                                                       "溎-蘍寃i诖ര\"汵\"\ftl,?d⼡쾪⺋h匱[,෩I8MҧF{k瓿PA'橸ꩯ綷퉲翓": null
+                                                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                                                    ],
+                                                                                                                                                                                                                                                                    "ោ係؁<元": 1.7926963090826924E-18
+                                                                                                                                                                                                                                                                   }}]
+                                                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                                                                ]]}]
+                                                                                                                                                                                                                                                               }]
+                                                                                                                                                                                                                                                              ]
+                                                                                                                                                                                                                                                             ]
+                                                                                                                                                                                                                                                            ]
+                                                                                                                                                                                                                                                           ],
+                                                                                                                                                                                                                                                           "ጩV<\"ڸsOᤘ": 2.0527167903723048E-19
+                                                                                                                                                                                                                                                          }]
+                                                                                                                                                                                                                                                         ]}
+                                                                                                                                                                                                                                                        ]
+                                                                                                                                                                                                                                                       ]],
+                                                                                                                                                                                                                                                       "∳㙰3젴p᧗䱙?`<U὇<\/意E[ᮚAj诂ᒽ阚uv徢ဎ떗尔Ᵹ훀쩑J䐴?⪏=륪ᆩ푰ஓ㐕?럽VK\"X?檨လ齿I/耉A(AWA~⏯稐蹫": false,
+                                                                                                                                                                                                                                                       "偒妝뾇}䀼链i⇃%⋜&璪Ix渥5涧qq棩ᥝ-⠫AA낇yY颕A*裦O|n?䭬혗F": null,
+                                                                                                                                                                                                                                                       "琭CL얭B혆Kॎ`鎃nrsZiժW砏)?p~K~A眱䲏QO妣\u001b\u001b]ᵆᆯ&㐋ᏹ豉뺘$ꭧ#j=C)祤⫢歑1o㒙諩": 7028426989382601021,
+                                                                                                                                                                                                                                                       "쳱冲&ဤ䌏앧h胺-齱H忱8왪RDKᅒ䬋ᔶS*J}ስ漵'㼹뮠9걢9p봋경ጕtởꚳT䶽瘙%춴`@nಆ4<d??#僜ᙤ钴=薔ꭂbLXNam蹈": "樭る蹿= Uurwkn뙧⌲%\"쑃牪\"cq윕o@",
+                                                                                                                                                                                                                                                       "溌[H]焎SLㅁ?뀼䫨災W": 1.1714289118497062E-19,
+                                                                                                                                                                                                                                                       "ﬢp븇剌燇kĔ尘㶿㴞睠꾘Ia;s❺^)$穮?sHᢥ폪l": null
+                                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                                                   ]
+                                                                                                                                                                                                                                                  },
+                                                                                                                                                                                                                                                  "TKnzj5o<\/K㊗ꗣ藠⦪駇>yZA8Ez0,^ᙛ4_0븢\u001ft:~䎼s.bb룦明yNP8弆C偯;⪾짍'蕴뮛": -6976654157771105701,
+                                                                                                                                                                                                                                                  "큵ꦀ\\㇑:nv+뒤燻䀪ﴣ﷍9ᚈ኷K㚊誦撪䚛,ꮪxሲ쳊\u0005HSf?asg昱dqꬌVꙇ㼺'k*'㈈": -5.937042203633044E-20
+                                                                                                                                                                                                                                                 }
+                                                                                                                                                                                                                                                ]
+                                                                                                                                                                                                                                               }],
+                                                                                                                                                                                                                                               "?}\u20e0],s嶳菋@#2u쒴sQS䩗=ꥮ;烌,|ꘔ䘆": "ᅩ영N璠kZ먕眻?2ቲ芋眑D륟渂⸑ﴃIRE]啗`K'"
+                                                                                                                                                                                                                                              }},
+                                                                                                                                                                                                                                              "쨀jmV賂ﰊ姐䂦玞㬙ᏪM᪟Վ씜~`uOn*ॠ8\u000ef6??\\@/?9見d筜ﳋB|S䝬葫㽁o": true
+                                                                                                                                                                                                                                             },
+                                                                                                                                                                                                                                             "즛ꄤ酳艚␂㺘봿㎨iG৕ࡿ?1\"䘓您\u001fSኝ⺿溏zៀ뻤B\u0019?윐a䳵᭱䉺膷d:<\/": 3935553551038864272
+                                                                                                                                                                                                                                            }
+                                                                                                                                                                                                                                           ]
+                                                                                                                                                                                                                                          ]}
+                                                                                                                                                                                                                                         ]]
+                                                                                                                                                                                                                                        ]]
+                                                                                                                                                                                                                                       ]}
+                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                                   ]]}},
+                                                                                                                                                                                                                                   "᥺3h↛!ꋰy\"攜(ெl䪕oUkc1A㘞ᡲ촾ᣫ<\/䒌E㛝潨i{v?W౾H\\RჅpz蝬R脾;v:碽✘↯삞鷱o㸧瑠jcmK7㶧뾥찲n": true,
+                                                                                                                                                                                                                                   "ⶸ?x䊺⬝-䰅≁!e쩆2ꎿ准G踌XXᩯ1߁}0?.헀Z馟;稄\baDꟹ{-寪⚈ꉷ鮸_L7ƽᾚ<\u001bጨA䧆송뇵⨔\\礍뗔d设룱㶉cq{HyぱR㥽吢ſtp": -7985372423148569301,
+                                                                                                                                                                                                                                   "緫#콮IB6<\/=5Eh礹\t8럭@饹韠r㰛斣$甝LV췐a갵'请o0g:^": "䔨(.",
+                                                                                                                                                                                                                                   "띳℡圤pン௄ĝ倧訜B쁟G䙔\"Sb⓮;$$▏S1J뢙SF|赡g*\"Vu䲌y": "䪈&틐),\\kT鬜1풥;뷴'Zေ䩹@J鞽NぼM?坥eWb6榀ƩZڮ淽⺞삳煳xჿ絯8eⶍ羷V}ჿ쎱䄫R뱃9Z>'\u20f1ⓕ䏜齮"
+                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                                ]]]
+                                                                                                                                                                                                                               }}
+                                                                                                                                                                                                                              }
+                                                                                                                                                                                                                             ]
+                                                                                                                                                                                                                            ]},
+                                                                                                                                                                                                                            "펮b.h粔폯2npX詫g錰鷇㇒<쐙S値bBi@?镬矉`剔}c2壧ଭfhY깨R()痩⺃a\\⍔?M&ﯟ<劜꺄멊ᄟA\"_=": null
+                                                                                                                                                                                                                           },
+                                                                                                                                                                                                                           "~潹Rqn榢㆓aR鬨侅?䜑亡V_翅㭔(䓷w劸ၳDp䀅<\/ﰎ鶊m䵱팱긽ꆘ<tD쇋>긓准D3掱;o:_ќ)껚콥8곤d矦8nP倥ꃸI": null,
+                                                                                                                                                                                                                           "뾎/Q㣩㫸벯➡㠦◕挮a鶧⋓偼\u00001뱓fm覞n?㛅\"": 2.8515592202045408E17
+                                                                                                                                                                                                                          }],
+                                                                                                                                                                                                                          ",": -5426918750465854828,
+                                                                                                                                                                                                                          "2櫫@0柡g䢻/gꆑ6演&D稒肩Y?艘/놘p{f투`飷ᒉ챻돎<늛䘍ﴡ줰쫄": false,
+                                                                                                                                                                                                                          "8(鸑嵀⵹ퟡ<9㣎Tߗ┘d슒ل蘯&㠦뮮eࠍk砝g 엻": false,
+                                                                                                                                                                                                                          "d-\u208b?0ﳮ嵙'(J`蔿d^踅⤔榥\\J⵲v7": 6.8002426206715341E17,
+                                                                                                                                                                                                                          "ཎ耰큓ꐕ㱷\u0013y=詽I\"盈xm{0쾽倻䉚ષso#鰑/8㸴짯%ꀄ떸b츟*\\鲷礬ZQ兩?np㋄椂榨kc᡹醅3": false,
+                                                                                                                                                                                                                          "싊j20": false
+                                                                                                                                                                                                                         }]]
+                                                                                                                                                                                                                        ]],
+                                                                                                                                                                                                                        "俛\u0017n緽Tu뫉蜍鼟烬.ꭠIⰓ\"Ἀ᜾uC쎆J@古%ꛍm뻨ᾀ画蛐휃T:錖㑸ዚ9죡$": true
+                                                                                                                                                                                                                       }
+                                                                                                                                                                                                                      ]
+                                                                                                                                                                                                                     ],
+                                                                                                                                                                                                                     "㍵⇘ꦖ辈s}㱮慀밒s`\"㞟j:`i픻Z<C1衽$\"-饧?℃\u0010⼒{p飗%R\"䲔\")칀\\%": true,
+                                                                                                                                                                                                                     "苧.8\u00120ݬ仓": 6912164821255417986,
+                                                                                                                                                                                                                     "떎顣俁X;.#Q틝.笂'p쟨唒퐏랩냆¦aⱍ{谐.b我$蜑SH\u000f琾=䟼⣼奔ᜏ攕B&挰繗㝔ꅂ-Qv\\0䶝䚥ぺio[㑮-ᇼ䬰컪ṼiY){데\u0010q螰掻~\n輚x\u0014罺)軴": 3.024364150712629E-20
+                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                   ]
+                                                                                                                                                                                                                  ]
+                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                ]}
+                                                                                                                                                                                                               ]]
+                                                                                                                                                                                                              }
+                                                                                                                                                                                                             ]
+                                                                                                                                                                                                            ]]
+                                                                                                                                                                                                           ]
+                                                                                                                                                                                                          ]]]],
+                                                                                                                                                                                                          "\"凲o肉Iz絾豉J8?i~傠᫽䇂!WD溊J?ᡒvs菆嵹➒淴>섫^諎0Ok{켿歁෣胰a2﨤[탳뚬쎼嫭뉮m": 409440660915023105,
+                                                                                                                                                                                                          "w墄#*ᢄ峠밮jLa`ㆪ꺊漓Lで끎!Agk'ꁛ뢃㯐岬D#㒦": false,
+                                                                                                                                                                                                          "ଦPGI䕺L몥罭ꃑ궩﮶#⮈ᢓӢ䚬p7웼臧%~S菠␌힀6&t䳙y㪘냏\\*;鉏ᅧ鿵'嗕pa\"oL쇿꬈Cg": "㶽1灸D⟸䴅ᆤ뉎﷛渤csx 䝔цꬃ锚捬?ຽ+x~꘩uI࡞\u0007栲5呚ẓem?袝\")=㥴䨃pac!/揎Y",
+                                                                                                                                                                                                          "ᷱo\\||뎂몷r篙|#X䦜I#딌媸픕叞RD斳X4t⯩夬=[뭲r=绥jh뷱츝⪘%]⚋܈㖴スH텹m(WO曝劉0~K3c柢Ր㏉着逳~": false,
+                                                                                                                                                                                                          "煽_qb[첑\\륌wE❽ZtCNﭝ+餌ᕜOꛭ": "{ﳾ쉌&s惧ᭁⵆ3䢫;䨞팑꒪흘褀࢖Q䠿V5뭀䎂澻%받u5텸oA⮥U㎦;B䳌wz䕙$ឿ\\௅婺돵⪾퐆\\`Kyौꋟ._\u0006L챯l뇠Hi䧈偒5",
+                                                                                                                                                                                                          "艊佁ࣃ롇䱠爬!*;⨣捎慓q靓|儑ᨋL+迥=6㒺딉6弄3辅J-㕎뛄듘SG㆛(\noAzQꝱ䰩X*ぢO퀌%펠낌mo틮a^<\/F&_눊ᾉ㨦ы4\"8H": 2974648459619059400,
+                                                                                                                                                                                                          "鬙@뎣䫳ၮ끡?){y?5K;TA*k溱䫜J汃ꂯ싔썍\u001dA}룖(<\/^,": false,
+                                                                                                                                                                                                          "몏@QꋦFꊩᒐ뎶lXl垨4^郣|ꮇ;䝴ᝓ}쵲z珖": null
+                                                                                                                                                                                                         }
+                                                                                                                                                                                                        ]]]],
+                                                                                                                                                                                                        ":_=닧弗D䙋暨鏛. 㱻붘䂍J儒&ZK/녩䪜r囁⽯D喠죥7⹌䪥c\u001a\u2076￞妈朹oLk菮F౟覛쐧㮏7T;}蛙2{9\"崓bB<\/⡷룀;즮鿹)丒툃୤뷠5W⊢嶜(fb뭳갣": "E{响1WM"
+                                                                                                                                                                                                       }},
+                                                                                                                                                                                                       "䘨tjJ驳豨?y輊M*᳑梵瞻઻ofQG瑮e": 2.222802939724948E-19,
+                                                                                                                                                                                                       "䮴=❑➶T෋w䞜\"垦ꃼUt\u001dx;B$뵣䙶E↌艣ᡥ!᧟;䱀[䔯k쬃`੍8饙른熏'2_'袻tGf蒭J땟as꯳╖&啒zWࡇᒫYSᏬ\u0014ℑ첥鈤|cG~Pᓮ\">\"": "ႆl\f7V儊㦬nHꄬꨧC{쐢~C⮃⛓嶦vꄎ1w鰠嘩뿠魄&\"_qMⵖ釔녮ꝇ 㝚{糍J哋 cv?-jkﻯྌ鹑L舟r",
+                                                                                                                                                                                                       "龧葆yB✱H盋夔ﶉ?n*0(": "ꧣኆ㢓氥qZZ酒ຜ)鮢樛)X䣆gTSґG텞k.J圬疝롫쯭z L:\\ྤ@w炋塜쿖ᾳy뢀䶃뱝N䥨㚔勇겁#p",
+                                                                                                                                                                                                       "도畎Q娡\"@S/뼋:䵏!P衅촚fVHQs✜ᐫi㻑殡B䜇%믚k*U#濨낄~": "ꍟዕ쳸ꍈ敋&l妏\u0005憡멗瘌uPgᅪm<\/To쯬锩h뒓k"
+                                                                                                                                                                                                      }
+                                                                                                                                                                                                     ]
+                                                                                                                                                                                                    }],
+                                                                                                                                                                                                    "墥홞r绚<\/⸹ⰃB}<躅\\Y;๑@䔸>韫䜲뱀X뗩鿥쩗SI%ﴞ㳕䛇?<\/\u00018x\\&侂9鋙a[LR㋭W胕)⡿8㞙0JF,}?허d1cDMᐃ␛鄝ⱕ%X)!XQ": "ⳍꗳ=橇a;3t⦾꼑仈ူaᚯ⯋ꕃAs鴷N⍕_䎃ꙎAz\u0016䯷\\<࿫>8q{}キ?ᣰ}'0ᴕ펓B┦lF#趤厃T?㕊#撹圂䆲"
+                                                                                                                                                                                                   },
+                                                                                                                                                                                                   "܋닐龫論c웑": false,
+                                                                                                                                                                                                   "ㇿ/q\"6-co髨휝C큦#\u001b4~?3䐹E삇<<": 7.600917488140322E-20,
+                                                                                                                                                                                                   "䁝E6?㣖ꃁ间t祗*鑠{ḣV(浾h逇큞=W?ૉ?nꇽ8ꅉຉj으쮺@Ꚅ㰤u]Oyr": "v≁᫸_*όAඤԆl)ۓᦇQ}폠z༏q滚",
+                                                                                                                                                                                                   "ソ᥊/넺I": true
+                                                                                                                                                                                                  }]]
+                                                                                                                                                                                                 ]
+                                                                                                                                                                                                ]
+                                                                                                                                                                                               ]
+                                                                                                                                                                                              ]]
+                                                                                                                                                                                             },
+                                                                                                                                                                                             "䭑Ik攑\u0002QV烄:芩.麑㟴㘨≕": true,
+                                                                                                                                                                                             "坄꿕C쇻풉~崍%碼\\8\"䬦꣙": null,
+                                                                                                                                                                                             "欌L圬䅘Y8c(♺2?ON}o椳s宥2䉀eJ%闹r冁O^K諭%凞⺉⡻,掜?$ꥉ?略焕찳㯊艼誜4?\"﯎<゛XፈINT:詓 +": -1.0750456770694562E-19,
+                                                                                                                                                                                             "獒àc뜭싼ﺳ뎤K`]p隨LtE": null,
+                                                                                                                                                                                             "甙8䵊神EIꩤ鐯ᢀ,ﵮU䝑u疒ử驺䚿≚ഋ梶秓F`覤譐#짾蔀묊4<媍쬦靪_Yzgcࡶ4k紥`kc[Lﮗ簐*I瀑[⾰L殽鑥_mGȠ<\/|囹灠g桰iri": true,
+                                                                                                                                                                                             "챓ꖙꟻ좝菇ou,嗠0\\jK핻뜠qwQ?ഩ㼕3Y彦b\u009bJ榶N棨f?됦鏖綃6鳵M[OE봨u햏.Ꮁ癜蟳뽲ꩌ뻾rM豈R嗀羫 uDꎚ%": null
+                                                                                                                                                                                            },
+                                                                                                                                                                                            "V傜2<": 7175127699521359521
+                                                                                                                                                                                           }],
+                                                                                                                                                                                           "铫aG切<\/\"ী⊆e<^g࢛)D顝nאַ饼\u008c猪繩嵿ﱚCꡬ㻊g엺A엦\u000f暿_f꿤볝㦕桦`蒦䎔j甬%岝rj 糏": "䚢偎눴Au<4箞7礦Iﱔ坠eȧ䪸u䵁p|逹$嗫쨘ꖾ﷐!胠z寓팢^㨔|u8Nሇe텔ꅦ抷]،鹎㳁#༔繁 ",
+                                                                                                                                                                                           "낂乕ꃻ볨ϱ-ꇋ㖍fs⿫)zꜦ/K?솞♞ꑌ宭hJ᤭瑥Fu": false,
+                                                                                                                                                                                           "쟰ぜ魛G\u0003u?`㾕ℾ㣭5螠烶這趩ꖢ:@咕ꐶx뒘느m䰨b痃렐0鳊喵熬딃$摉_~7*ⱦ녯1錾GKhJ惎秴6'H妈Tᧅ窹㺒疄矤铟wላ": null,
+                                                                                                                                                                                           "쯆q4!3錕㲏ⵆ㇛꘷Z瑩뭆\\◪NH\u001d\\㽰U~㯶<\"쑣낞3ᵤ'峉eꢬ;鬹o꣒木X*長PXᘱu\"䠹n惞": null,
+                                                                                                                                                                                           "ᅸ祊\"&ꥴCjࢼ﴿?䡉`U效5殼㮞V昽ꏪ#ﺸ\\&t6x꠹盥꣰a[\u001aꪍSpe鎿蠹": -1.1564713893659811E-19
+                                                                                                                                                                                          }
+                                                                                                                                                                                         ]]
+                                                                                                                                                                                        ]
+                                                                                                                                                                                       ]
+                                                                                                                                                                                      ],
+                                                                                                                                                                                      "羵䥳H,6ⱎ겾|@t\"#햊1|稃 섭)띜=뻔ꡜ???櫎~*ῡ꫌/繣ﻠq": null
+                                                                                                                                                                                     }
+                                                                                                                                                                                    ]}
+                                                                                                                                                                                   ]},
+                                                                                                                                                                                   "츤": false
+                                                                                                                                                                                  }},
+                                                                                                                                                                                  "s": 3.7339341963399598E18
+                                                                                                                                                                                 }
+                                                                                                                                                                                ],
+                                                                                                                                                                                "N,I?1+㢓|ࣱ嶃쩥V2\u0012(4EE虪朶$|w颇v步": "~읢~_,Mzr㐫YB溓E淚\"ⅹ䈔ᏺ抙 b,nt5V㐒J檶ꏨ⻔?",
+                                                                                                                                                                                "Q껑ꡡ}$넎qH煔惍/ez^!ẳF댙䝌馻剁8": "梲;yt钰$i冄}AL%a j뜐奷걳뚾d꿽*ሬuDY3?뮟鼯뮟w㍪틱V",
+                                                                                                                                                                                "o{Q/K O胟㍏zUdꀐm&⨺J舕⾏魸訟㌥[T籨櫉唐킝 aṭ뱫촙莛>碶覆⧬짙쭰ׯdAiH໥벤퐥_恸[ 0e:죃TC弼荎뵁DA:w唵ꣁ": null,
+                                                                                                                                                                                "὏樎䵮軧|?౗aWH쩃1 ꅭsu": null
+                                                                                                                                                                               }
+                                                                                                                                                                              ]
+                                                                                                                                                                             },
+                                                                                                                                                                             "勂\\&m鰈J釮=Ⲽ鳋+䂡郑": null,
+                                                                                                                                                                             "殣b綊倶5㥗惢⳷萢ᑀ䬄镧M^ﱴ3⣢翣n櫻1㨵}ኯ뗙顖Z.Q➷ꮨ뗇\u0004": "ꔙ䁼>n^[GीA䨟AM琢ᒊS쨲w?d㶣젊嘶纝麓+愣a%気ྞSc됓ᔘ:8bM7Xd8㶑臌]Ꙥ0ꐭ쒙䫣挵C薽Dfⵃ떼᷸",
+                                                                                                                                                                             "?紡.셪_෨j\u0013Ox┠$Xᶨ-ᅇo薹-}軫;y毝㪜K㣁?.EV쮱4둽⛻䤜'2盡\u001f60(|e쐰㼎ᦀ㒧-$l@ﻑ坳\u0003䭱响巗WFo5c㧆T턁Y맸♤(": -2.50917882560589088E17
+                                                                                                                                                                            }}
+                                                                                                                                                                           ],
+                                                                                                                                                                           "侸\\릩.᳠뎠狣살cs项䭩畳H1s瀉븇19?.w骴崖㤊h痠볭㞳㞳䁮Ql怠㦵": "@䟴-=7f",
+                                                                                                                                                                           "鹟1x௢+d ;vi䭴FSDS\u0004hꎹ㚍?⒍⦏ў6u,扩@됷Su)Pag휛TᒗV痩!瞏釀ꖞ蘥&ೞ蘐ꭰꞇᝎ": "ah懱Ժ&\u20f7䵅♎඀䞧鿪굛ౕ湚粎蚵ᯋ幌YOE)५襦㊝Y*^\"R+ඈ咷蝶9ꥂ榨艦멎헦閝돶v좛咊E)K㓷ྭr",
+                                                                                                                                                                           "搆q쮦4綱켙셁.f4<\/g<籽늷?#蚴픘:fF\u00051㹉뀭.ᰖ풎f֦Hv蔎㧤.!䭽=鞽]음H:?\"-4": 8.740133984938656E-20
+                                                                                                                                                                          }]}
+                                                                                                                                                                         }
+                                                                                                                                                                        ],
+                                                                                                                                                                        "tVKn딩꘥⊾蹓᤹{\u0003lR꼽ᄲQFᅏ傅ﱋ猢⤊ᔁ,E㓒秤nTතv`♛I\u0000]꫔ṞD\"麵c踝杰X&濿또꣹깳౥葂鿎\\aꡨ?": 3900062609292104525
+                                                                                                                                                                       }
+                                                                                                                                                                      ],
+                                                                                                                                                                      "ਉ샒⊩Lu@S䧰^g": -1.1487677090371648E18,
+                                                                                                                                                                      "⎢k⑊꬗yᏫ7^err糎Dt\u000bJ礯확ㆍ沑サꋽe赔㝢^J\u0004笲㿋idra剰-᪉C錇/Ĝ䂾ညS지?~콮gR敉⬹'䧭": 1901472137232418266,
+                                                                                                                                                                      "灗k䶥:?촽贍쓉꓈㒸g獘[뵎\\胕?\u0014_榙p.j稶,$`糉妋0>Fᡰly㘽$?": "]ꙛO赎&#㠃돱剳\"<◆>0誉齐_|z|裵씪>ᐌ㼍\"Z[琕}O?G뚇諦cs⠜撺5cu痑U圲\u001c?鴴計l춥/╓哼䄗茏ꮅ뫈댽A돌롖뤫V窗讬sHd&\nOi;_u"
+                                                                                                                                                                     }
+                                                                                                                                                                    ],
+                                                                                                                                                                    "Uﺗ\\Y\\梷䄬~\u0002": null,
+                                                                                                                                                                    "k\"Y磓ᗔ휎@U冈<\/w컑)[": false,
+                                                                                                                                                                    "曏J蝷⌻덦\u001f㙳s꥓⍟邫P늮쥄c∬ྡྷ舆렮칤Z趣5콡넛A쳨\\뀙骫(棻.*&輛LiIfi{@EA婳KᬰTXT": -4.3088230431977587E17
+                                                                                                                                                                   }]}
+                                                                                                                                                                  ]
+                                                                                                                                                                 ],
+                                                                                                                                                                 "곃㲧<\/dఓꂟs其ࡧ&N葶=?c㠤Ჴ'횠숄臼#\u001a~": false
+                                                                                                                                                                }
+                                                                                                                                                               ]
+                                                                                                                                                              ]}]
+                                                                                                                                                             }]
+                                                                                                                                                            }}
+                                                                                                                                                           ],
+                                                                                                                                                           "2f`⽰E쵟>J笂裭!〛觬囀ۺ쟰#桊l鹛ⲋ|RA_Vx፭gE됓h﵀mfỐ|?juTU档[d⢼⺻p濚7E峿": 5613688852456817133
+                                                                                                                                                          },
+                                                                                                                                                          "濘끶g忮7㏵殬W팕Q曁 뫰)惃廊5%-蹚zYZ樭ﴷQ锘쯤崫gg": true,
+                                                                                                                                                          "絥ᇑ⦏쒓븣爚H.㗊߄o蘵貆ꂚ(쎔O᥉ﮓ]姨Wꁓ!RMA|o퉢THx轮7M껁U즨'i뾘舯o": "跥f꜃?"
+                                                                                                                                                         }}
+                                                                                                                                                        ],
+                                                                                                                                                        "鷰鹮K-9k;ﰰ?_ݦѷ-ꅣ䩨Zꥱ\"mꠟ屎/콑Y╘2&鸞脇㏢ꀇ࠺ⰼ拾喭틮L꽩bt俸墶 [l/웄\"꾦\u20d3iও-&+\u000fQ+໱뵞": -1.296494662286671E-19
+                                                                                                                                                       },
+                                                                                                                                                       "HX੹/⨇୕붷Uﮘ旧\\쾜͔3l鄈磣糂̖䟎Eᐳw橖b῀_딕hu葰窳闹вU颵|染H죶.fP䗮:j䫢\\b뎖i燕ꜚG⮠W-≚뉗l趕": "ଊ칭Oa᡺$IV㷧L\u0019脴셀붿餲햪$迳向쐯켂PqfT\" ?I屉鴼쿕@硙z^鏕㊵M}㚛T젣쓌-W⩐-g%⺵<뮱~빅╴瑿浂脬\u0005왦燲4Ⴭb|D堧 <\/oEQh",
+                                                                                                                                                       "䘶#㥘੐캔f巋ἡAJ䢚쭈ࣨ뫒*mᇊK,ࣺAꑱ\u000bR<\/A\"1a6鵌㯀bh곿w(\"$ꘁ*rಐ趣.d࿩k/抶면䒎9W⊃9": "漩b挋Sw藎\u0000",
+                                                                                                                                                       "畀e㨼mK꙼HglKb,\"'䤜": null
+                                                                                                                                                      }]}]
+                                                                                                                                                     ]
+                                                                                                                                                    ]
+                                                                                                                                                   }]
+                                                                                                                                                  ]}
+                                                                                                                                                 ]
+                                                                                                                                                ]}
+                                                                                                                                               ],
+                                                                                                                                               "歙>駿ꣂ숰Q`J΋方樛(d鱾뼣(뫖턭\u20f9lচ9歌8o]8윶l얶?镖G摄탗6폋폵+g:䱫홊<멀뀿/س|ꭺs걐跶稚W々c㫣⎖": "㣮蔊깚Cꓔ舊|XRf遻㆚︆'쾉췝\\&言",
+                                                                                                                                               "殭\"cށɨꝙ䞘:嬮e潽Y펪㳅/\"O@ࠗ겴]췖YǞ(t>R\"N?梳LD恭=n氯T豰2R諸#N}*灧4}㶊G䍣b얚": null,
+                                                                                                                                               "襞<\/啧 B|싞W瓇)6簭鼡艆lN쩝`|펭佡\\間邝[z릶&쭟愱ꅅ\\T᰽1鯯偐栈4̸s윜R7⒝/똽?치X": "⏊躖Cﱰ2Qẫ脐&இ?%냝悊",
+                                                                                                                                               ",鰧偵셣싹xᎹ힨᯳EṬH㹖9": -4604276727380542356
+                                                                                                                                              }
+                                                                                                                                             }
+                                                                                                                                            ]]]],
+                                                                                                                                            "웺㚑xs}q䭵䪠馯8?LB犯zK'os䚛HZ\"L?셎s^㿧㴘Cv2": null
+                                                                                                                                           }]
+                                                                                                                                          ]
+                                                                                                                                         ]
+                                                                                                                                        ],
+                                                                                                                                        "Kd2Kv+|z": 7367845130646124107,
+                                                                                                                                        "ᦂⶨ?ᝢ 祂些ഷ牢㋇操\"腭䙾㖪\\(y4cE뽺ㆷ쫺ᔖ%zfۻ$ў1柦,㶢9r漢": -3.133230960444846E-20,
+                                                                                                                                        "琘M焀q%㢟f鸯O⣏蓑맕鯊$O噷|)z褫^㢦⠮ꚯ꫞`毕1qꢚ{ĭ䎀বώT\"뱘3G൴?^^of": null
+                                                                                                                                       }
+                                                                                                                                      ],
+                                                                                                                                      "a8V᯺?:ﺃ/8ꉿBq|9啓댚;*i2": null,
+                                                                                                                                      "cpT瀇H珰Ừpೃi鎪Rr␣숬-鹸ҩ䠚z脚цGoN8入y%趌I┽2ឪЀiJNcN)槣/▟6S숆牟\"箑X僛G殱娇葱T%杻:J諹昰qV쨰": 8331037591040855245
+                                                                                                                                     }],
+                                                                                                                                     "G5ᩜ䄗巢껳": true
+                                                                                                                                    }
+                                                                                                                                   },
+                                                                                                                                   "Ồ巢ゕ@_譙A`碫鄐㡥砄㠓(^K": "?܃B혢▦@犑ὺD~T⧁|醁;o=J牌9냚⢽㨘{4觍蚔9#$∺\u0016p囅\\3Xk阖⪚\"UzA穕롬✎➁㭒춺C㣌ဉ\"2瓑员ᅽꝶ뫍}꽚ꞇ鶂舟彺]ꍽJC蝧銉",
+                                                                                                                                   "␆Ě膝\"b-퉐ACR言J謈53~V튥x䜢?ꃽɄY뮩ꚜ": "K/↾e萃}]Bs⾿q룅鷦-膋?m+死^魊镲6",
+                                                                                                                                   "粡霦c枋AHퟁo礼Ke?qWcA趸㡔ꂏ?\u000e춂8iতᦜ婪\u0015㢼nﵿꍻ!ᐴ関\u001d5j㨻gfῩUK5Ju丝tかTI'?㓏t>⼟o a>i}ᰗ;뤕ܝ": false,
+                                                                                                                                   "ꄮ匴껢ꂰ涽+䜨B蛹H䛓-k蕞fu7kL谖,'涃V~챳逋穞cT\"vQ쓕ObaCRQ㓡Ⲯ?轭⫦輢墳?vA餽=h䮇킵n폲퉅喙?\"'1疬V嬗Qd灗'Lự": "6v!s믁㭟㣯獃!磸餠ቂh0C뿯봗F鷭gꖶ~コkK<ᦈTt\\跓w㭣횋钘ᆹ듡䑚W䟾X'ꅔ4FL勉Vܴ邨y)2'〚쭉⽵-鞣E,Q.?块",
+                                                                                                                                   "?(˧쩯@崟吋歄K": null
+                                                                                                                                  },
+                                                                                                                                  "Gc럃녧>?2DYI鴿\\륨)澔0ᔬlx'觔7젘⤡縷螩%Sv׫묈/]↱&S h\u0006歋ᑛxi̘}ひY蔯_醨鯘煑橾8?䵎쨋z儬ꁏ*@츾:": null
+                                                                                                                                 }
+                                                                                                                                }
+                                                                                                                               }
+                                                                                                                              ]
+                                                                                                                             ]
+                                                                                                                            ]}
+                                                                                                                           },
+                                                                                                                           "HO츧G": 3.694949578823609E17,
+                                                                                                                           "QC\u0012(翻曇Tf㷟bGBJ옉53\\嚇ᛎD/\u001b夾၉4\"핀@祎)쫆yD\"i먎Vn㿿V1W᨝䶀": -6150931500380982286,
+                                                                                                                           "Z㓮P翸鍱鉼K䋞꘺튿⭁Y": -7704503411315138850,
+                                                                                                                           "]모开ꬖP븣c霤<[3aΠ\"黁䖖䰑뮋ꤦ秽∼㑷冹T+YUt\"싳F↭䖏&鋌": -2.7231911483181824E18,
+                                                                                                                           "tꎖ": -4.9517948741799555E-19,
+                                                                                                                           "䋘즊.⬅IꬃۣQ챢ꄑ黐|f?C⾺|兕읯sC鬸섾整腨솷V": "旆柩l<K髝M戶鯮t:wR2ꉱ`9'l픪*폍芦㊢Pjjo堡^  읇얛嶅있ষ0?F",
+                                                                                                                           "下9T挞\\$yᮇk쌋⼇,ਉ": true,
+                                                                                                                           "櫨:ㆣ,邍lr崕祜㐮烜Z,XXD蕼㉴ kM꯽?P0﹉릗": null,
+                                                                                                                           "gv솠歽閘4镳䗄2澾>쪦sᖸMy㦅울썉瘗㎜檵9ꍂ駓ૉᚿ/u3씅徐拉[Z䞸ࡗ1ꆱ&Q풘?ǂ8\u0011BCDY2볨;鸏": null,
+                                                                                                                           "幫 n煥s쁇펇 왊-$C\"衝:\u0014㣯舼.3뙗Yl⋇\"K迎멎[꽵s}9鉳UK8쐥\"掄㹖h㙈!얄સ?Ꜳ봺R伕UTD媚I䜘W鏨蔮": -4.150842714188901E-17,
+                                                                                                                           "ﺯ^㄄\b죵@fྉkf颡팋Ꞧ{/Pm0V둳⻿/落韒ꊔᚬ@5螺G\\咸a谆⊪ቧ慷绖?财(鷇u錝F=r၍橢ឳn:^iᴵtD볠覅N赴": null
+                                                                                                                          }]
+                                                                                                                         }]
+                                                                                                                        }
+                                                                                                                       ]
+                                                                                                                      ]}
+                                                                                                                     ]},
+                                                                                                                     "謯?w厓奰T李헗聝ឍ貖o⪇弒L!캶$ᆅ": -4299324168507841322,
+                                                                                                                     "뺊奉_垐浸延몏孄Z舰2i$q붿좾껇d▵餏\"v暜Ҭ섁m￴g>": -1.60911932510533427E18
+                                                                                                                    }
+                                                                                                                   ]
+                                                                                                                  }
+                                                                                                                 ]
+                                                                                                                ]],
+                                                                                                                "퉝꺔㠦楶Pꅱ": 7517896876489142899,
+                                                                                                                "": false
+                                                                                                               }
+                                                                                                              ]},
+                                                                                                              "是u&I狻餼|谖j\"7c됮sסּ-踳鉷`䣷쉄_A艣鳞凃*m⯾☦椿q㎭N溔铉tlㆈ^": 1.93547720203604352E18,
+                                                                                                              "kⲨ\\%vr#\u000bⒺY\\t<\/3﬌R訤='﹠8蝤Ꞵ렴曔r": false
+                                                                                                             }
+                                                                                                            ]},
+                                                                                                            "阨{c?C\u001d~K?鎌Ԭ8烫#뙣P초遗t㭱E­돒䆺}甗[R*1!\\~h㕅᰺@<9JꏏષI䳖栭6綘걹ᅩM\"▯是∔v鬽顭⋊譬": "운ﶁK敂(欖C취پ℄爦賾"
+                                                                                                           }
+                                                                                                          }}
+                                                                                                         }],
+                                                                                                         "鷨赼鸙+\\䭣t圙ڹx᜾ČN<\/踘\"S_맶a鷺漇T彚⎲i㈥LT-xA캔$\u001cUH=a0츺l릦": "溣㣂0濕=鉵氬駘>Pꌢpb솇쬤h힊줎獪㪬CrQ矠a&脍꼬爼M茴/΅\u0017弝轼y#Ꞡc6둴=?R崏뷠麖w?"
+                                                                                                        },
+                                                                                                        "閕ᘜ]CT)䵞l9z'xZF{:ؐI/躅匽졁:䟇AGF૸\u001cퟗ9)駬慟ꡒꆒRS״툋A<>\u0010\"ꂔ炃7g덚E৏bꅰ輤]o㱏_뷕ܘ暂\"u": "芢+U^+㢩^鱆8*1鈶鮀\u0002뺰9⬳ꪮlL䃣괟,G8\u20a8DF㉪錖0ㄤ瓶8Nଷd?眡GLc陓\\_죌V쁰ल二?c띦捱 \u0019JC\u0011b⤉zẒT볕\"绣蘨뚋cꡉkI\u001e鳴",
+                                                                                                        "ꃣI'{6u^㡃#཰Kq4逹y൒䧠䵮!㱙/n??{L풓ZET㙠퍿X2᩟綳跠葿㚙w཮x캽扳B唕S|尾}촕%N?o䪨": null,
+                                                                                                        "ⰴFjෟ셈[\u0018辷px?椯\\1<ﲻ栘ᣁ봢憠뉴p": -5263694954586507640
+                                                                                                       }
+                                                                                                      ]
+                                                                                                     ]]
+                                                                                                    ]}
+                                                                                                   ]}]
+                                                                                                  ]
+                                                                                                 ],
+                                                                                                 "?#癘82禩鋆ꊝty?&": -1.9419029518535086E-19
+                                                                                                }
+                                                                                               ]
+                                                                                              ]
+                                                                                             ]}
+                                                                                            ]
+                                                                                           ]
+                                                                                          ],
+                                                                                          "훊榲.|῕戄&.㚏Zꛦ2\"䢥ሆ⤢fV_摕婔?≍Fji冀탆꜕i㏬_ẑKᅢ꫄蔻XWc|饡Siẘ^㲦?羡2ぴ1縁ᙅ?쐉Ou": false
+                                                                                         }]]
+                                                                                        ]}}},
+                                                                                        "慂뗄卓蓔ᐓ匐嚖/颹蘯/翻ㆼL?뇊,텵<\\獷ごCボ": null
+                                                                                       },
+                                                                                       "p溉ᑟi짣z:䒤棇r^٫%G9缑r砌롧.물农g?0׼ሩ4ƸO㣥㯄쩞ጩ": null,
+                                                                                       "껎繥YxK\"F젷쨹뤤1wq轫o?鱑뜀瘊?뎃h灑\\ꛣ}K峐^ኖ⤐林ꉓhy": null
+                                                                                      }
+                                                                                     ],
+                                                                                     "᱀n肓ㄛ\"堻2>m殮'1橌%Ꞵ군=Ӳ鯨9耛<\/n據0u彘8㬇៩f᏿诙]嚊": "䋯쪦S럶匏ㅛ#)O`ሀX_鐪渲⛀㨻宅闩➈ꢙஶDR⪍"
+                                                                                    },
+                                                                                    "tA썓龇 ⋥bj왎录r땽✒롰;羋^\\?툳*┎?썀ma䵳넅U䳆૘〹䆀LQ0\b疀U~u$M}(鵸g⳾i抦뛹?䤈땚검.鹆?ꩡtⶥGĒ;!ቹHS峻B츪켏f5≺": 2366175040075384032,
+                                                                                    "전pJjleb]ួ": -7.5418493141528422E18,
+                                                                                    "n.鎖ጲ\n?,$䪘": true
+                                                                                   },
+                                                                                   "欈Ar㉣螵᪚茩?O)": null
+                                                                                  },
+                                                                                  "쫸M#x}D秱欐K=侫们丐.KꕾxẠ\u001e㿯䣛F܍캗qq8꟞ṢFD훎⵳簕꭛^鳜\u205c٫~⑟~冫ऊ2쫰<\/戲윱o<\"": true
+                                                                                 },
+                                                                                 "㷝聥/T뱂\u0010锕|内䞇x侁≦㭖:M?iM᣿IJe煜dG࣯尃⚩gPt*辂.{磼럾䝪@a\\袛?}ᓺB珼": true
+                                                                                }
+                                                                               }
+                                                                              ]]}]}},
+                                                                              "tn\"6ꫤ샾䄄;銞^%VBPwu묪`Y僑N.↺Ws?3C⤻9唩S䠮ᐴm;sᇷ냞඘B/;툥B?lB∤)G+O9m裢0kC햪䪤": -4.5941249382502277E18,
+                                                                              "ᚔt'\\愫?鵀@\\びꂕP큠<<]煹G-b!S?\nꖽ鼫,ݛ&頺y踦?E揆릱H}햧캡b@手.p탻>췽㣬ꒅ`qe佭P>ᓂ&?u}毚ᜉ蟶頳졪ᎏzl2wO": -2.53561440423275936E17
+                                                                             }]}
+                                                                            }
+                                                                           ]
+                                                                          ]],
+                                                                          "潈촒⿂叡": 5495738871964062986
+                                                                         }
+                                                                        ]]
+                                                                       }
+                                                                      ]
+                                                                     ]}
+                                                                    ]]
+                                                                   ]]
+                                                                  ]}
+                                                                 ]
+                                                                ]},
+                                                                "ႁq킍蓅R`謈蟐ᦏ儂槐僻ﹶ9婌櫞釈~\"%匹躾ɢ뤥>࢟瀴愅?殕节/냔O✬H鲽엢?ᮈੁ⋧d␽㫐zCe*": 2.15062231586689536E17,
+                                                                "㶵Ui曚珰鋪ᾼ臧P{䍏䷪쨑̟A뼿T渠誈䏚D1!잶<\/㡍7?)2l≣穷᛾稝{:;㡹nemיּ訊`G": null,
+                                                                "䀕\"飕辭p圁f#뫆䶷뛮;⛴ᩍ3灚덏ᰝ쎓⦷詵%᜖Մfs⇫(\u001e~P|ﭗCⲾផv湟W첋(텪બT<บSꏉ੗⋲X婵i ӵ⇮?L䬇|ꈏ?졸": 1.548341247351782E-19
+                                                               }
+                                                              ]
+                                                             },
+                                                             "t;:N\u0015q鐦Rt缆{ꮐC?஛㷱敪\\+鲊㉫㓪몗릙竏(氵kYS": "XᰂT?൮ô",
+                                                             "碕飦幑|+ 㚦鏶`镥ꁩ B<\/加륙": -4314053432419755959,
+                                                             "秌孳(p!G?V傫%8ሽ8w;5鲗㦙LI檸\u2098": "zG N볞䆭鎍흘\\ONK3횙<\/樚立圌Q튅k쩎Ff쁋aׂJK銆ઘ즐狩6༥✙䩜篥CzP(聻駇HHퟲ讃%,ά{렍p而刲vy䦅ክ^톺M楒鍢㹳]Mdg2>䤉洞",
+                                                             "踛M젧>忔芿㌜Zk": 2215369545966507819,
+                                                             "씐A`$槭頰퍻^U覒\bG毲aᣴU;8!팲f꜇E⸃_卵{嫏羃X쀳C7뗮m(嚼u N܁谟D劯9]#": true,
+                                                             "ﻩ!뵸-筚P᭛}ἰ履lPh?౮ⶹꆛ穉뎃g萑㑓溢CX뾇G㖬A錟]RKaꄘ]Yo+@䘁's섎襠$^홰}F": null
+                                                            },
+                                                            "粘ꪒ4HXᕘ蹵.$區\r\u001d묁77pPc^y笲Q<\/ꖶ 訍䃍ᨕG?*": 1.73773035935040224E17
+                                                           },
+                                                           "婅拳?bkU;#D矠❴vVN쩆t㜷A풃갮娪a%鮏絪3dAv룒#tm쑬⌛qYwc4|L8KZ;xU⓭㳔밆拓EZ7襨eD|隰ऌ䧼u9Ԣ+]贴P荿": 2.9628516456987075E18
+                                                          }]}}]
+                                                         ]}
+                                                        }}
+                                                       ]}]
+                                                      ],
+                                                      "|g翉F*湹̶\u0005⏐1脉̀eI쩓ᖂ㫱0碞l䴨ꑅ㵽7AtἈ턧yq䳥塑:z:遀ᄐX눔擉)`N3昛oQ셖y-ڨ⾶恢ꈵq^<\/": null,
+                                                      "菹\\랓G^璬x৴뭸ゆUS겧﮷Bꮤ ┉銜᯻0%N7}~f洋坄Xꔼ<\/4妟Vꄟ9:౟곡t킅冩䧉笭裟炂4봋ⱳ叺怊t+怯涗\"0㖈Hq": false,
+                                                      "졬믟'ﺇফ圪쓬멤m邸QLব䗁愍4jvs翙 ྍ꧀艳H-|": null,
+                                                      "컮襱⣱뗠 R毪/鹙꾀%헳8&": -5770986448525107020
+                                                     }
+                                                    ],
+                                                    "B䔚bꐻ뙏姓展槰T-똌鷺tc灿᫽^㓟䏀o3o$꘭趙萬I顩)뇭Ἑ䓝\f@{ᣨ`x3蔛": null
+                                                   }
+                                                  ]
+                                                 ]
+                                                }],
+                                                "⦖扚vWꃱ꥙㾠壢輓{-⎳鹷贏璿䜑bG倛⋐磎c皇皩7a~ﳫU╣Q࠭ꎉS摅姽OW.홌ೞ.": null,
+                                                "蚪eVlH献r}ᮏ믠ﰩꔄ@瑄ⲱ": null,
+                                                "퀭$JWoꩢg역쁍䖔㑺h&ୢtXX愰㱇?㾫I_6 OaB瑈q裿": null,
+                                                "꽦ﲼLyr纛Zdu珍B絟쬴糔?㕂짹䏵e": "ḱ\u2009cX9멀i䶛簆㳀k"
+                                               }
+                                              ]]]],
+                                              "(_ꏮg່澮?ᩑyM<艷\u001aꪽ\\庼뙭Z맷㰩Vm\\lY筺]3㋲2㌩㄀Eਟ䝵⨄쐨ᔟgङHn鐖⤇놋瓇Q탚單oY\"♆臾jHᶈ征ቄ??uㇰA?#1侓": null
+                                             },
+                                             "觓^~ሢ&iI띆g륎ḱ캀.ᓡꀮ胙鈉": 1.0664523593012836E-19,
+                                             "y詭Gbᔶऽs댁U:杜⤎ϲ쁗⮼D醄诿q뙰I#즧v蔎xHᵿt᡽[**?崮耖p缫쿃L菝,봬ꤦC쯵#=X1瞻@OZc鱗CQTx": null
+                                            }
+                                           ]
+                                          }}],
+                                          "剘紁\u0004\\Xn⊠6,တױ;嵣崇}讃iႽ)d1\\䔓": null
+                                         },
+                                         "脨z\"{X,1u찜<'k&@?1}Yn$\u0015Rd輲ーa쮂굄+B$l": true,
+                                         "諳>*쭮괐䵟Ґ+<箁}빀䅱⡔檏臒hIH脟ꩪC핝ଗP좕\"0i<\/C褻D۞恗+^5?'ꂱ䚫^7}㡠cq6\\쨪ꔞꥢ?纖䫀氮蒫侲빦敶q{A煲G": -6880961710038544266
+                                        }}]
+                                       },
+                                       "5s⨲JvಽῶꭂᄢI.a৊": null,
+                                       "?1q꽏쿻ꛋDR%U娝>DgN乭G": -1.2105047302732358E-19
+                                      }
+                                     ]
+                                    ]},
+                                    "qZz`撋뙹둣j碇쁏\\ꆥ\u0018@藴疰Wz)O{F䶛l᷂绘訥$]뮍夻䢋䩇萿獰樧猵⣭j萶q)$꬚⵷0馢W:Ⱍ!Qoe": -1666634370862219540,
+                                    "t": "=wp|~碎Q鬳Ӎ\\l-<\/^ﳊhn퐖}䍔t碵ḛ혷?靻䊗",
+                                    "邙쇡㯇%#=,E4勃驆V繚q[Y댻XV㡸[逹ᰏ葢B@u=JS5?bLRn얮㍉⏅ﰳ?a6[&큟!藈": 1.2722786745736667E-19
+                                   },
+                                   "X블땨4{ph鵋ꉯ웸 5p簂䦭s_E徔濧d稝~No穔噕뽲)뉈c5M윅>⚋[岦䲟懷恁?鎐꓆ฬ爋獠䜔s{\u001bm鐚儸煛%bﯿXT>ꗘ@8G": 1157841540507770724,
+                                   "媤娪Q杸\u0011SAyᡈ쿯": true,
+                                   "灚^ಸ%걁<\/蛯<O\"-刷㏠R(kO=䢊䅎l䰓팪A絫픧": "譔\\㚄 ?R7㔪G㋉⣰渆?\\#|gN⤴;W칷A׫癮଼ೣ㏳뒜7d恓꾲0扬S0ᆵi/贎ྡn䆋武",
+                                   "萇砇Gこ朦켋Wq`㞲攊*冁~霓L剢zI腧튴T繙Cঅ뫬╈뮜ㄾ䦧촄椘B⊬츩r2f㶱厊8eϬ{挚␯OM焄覤\\(Kӡ>?\"祴坓\\\\'흍": -3.4614808555942579E18,
+                                   "釴U:O湛㴑䀣렑縓\ta)<D8ﭳ槁髭D.L|xs斋敠\"띋早7wᎍ": true,
+                                   "쵈+쬎簨up䓬?q+~\u0019仇뵈᫯3ᵣ恘枰劫㪢u珘-퀭:컙:u`⌿A(9鄦!<珚nj3:Hࣨ巋䀁旸뎈맻v\"\\(곘vO㤰aZe<\/W鹙鄜;l厮둝": null,
+                                   "": -1.2019926774977002E-18,
+                                   "%者O7.Nꪍs梇接z蕜綛<\/䜭\"죊y<曋漵@Ś⹝sD⟓jݗᢜ?z/9ၲMa쨮긗贎8ᔮ㦛;6p뾥໭䭊0B찛+)(Y㿠鸁䕒^옥": "鬃뫤&痽舎J콮藐󽸰ᨨMꈫ髿v<N\\.삒껅я1ꭼ5䴷5쳬臨wj덥"
+                                  }],
+                                  "鷎'㳗@帚妇OAj' 谬f94ǯ(횡ヒ%io쪖삐좛>(j:숾却䗌gCiB뽬Oyuq輥厁/7)?今hY︺Q": null
+                                 }
+                                ]
+                               ]]]}]
+                              ],
+                              "I笔趠Ph!<ཛྷ㸞诘X$畉F\u0005笷菟.Esr릙!W☆䲖뗷莾뒭U\"䀸犜Uo3Gꯌx4r蔇᡹㧪쨢準<䂀%ࡡꟼ瑍8炝Xs0䀝销?fi쥱ꆝલBB": -8571484181158525797,
+                              "L⦁o#J|\"⽩-㱢d㌛8d\\㶤傩儻E[Y熯)r噤὘勇 }": "e(濨쓌K䧚僒㘍蠤Vᛸ\"络QJL2,嬓왍伢㋒䴿考澰@(㏾`kX$끑эE斡,蜍&~y",
+                              "vj.|统圪ᵮPL?2oŶ`밧\"勃+0ue%⿥绬췈체$6:qa렐Q;~晘3㙘鹑": true,
+                              "ශؙ4獄⶿c︋i⚅:ん閝Ⳙ苆籦kw{䙞셕pC췃ꍬ␜꟯ꚓ酄b힝hwk꭭M鬋8B耳쑘WQ\\偙ac'唀x᪌\u2048*h짎#ፇ鮠뾏ឿ뀌": false,
+                              "⎀jꄒ牺3Ⓝ컴~?親ꕽぼܓ喏瘘!@<튋㐌꿱⩦{a?Yv%⪧笯Uܱ栅E搚i뚬:ꄃx7䙳ꦋ&䓹vq☶I䁘ᾘ涜\\썉뺌Lr%Bc㍜3?ꝭ砿裞]": null,
+                              "⭤뙓z(㡂%亳K䌽꫿AԾ岺㦦㼴輞낚Vꦴw냟鬓㹈뽈+o3譻K1잞": 2091209026076965894,
+                              "ㇲ\t⋇轑ꠤ룫X긒\"zoY읇희wj梐쐑l侸`e%s": -9.9240075473576563E17,
+                              "啸ꮑ㉰!ᚓ}銏": -4.0694813896301194E18,
+                              ">]囋੽EK뇜>_ꀣ緳碖{쐐裔[<ನ\"䇅\"5L?#xTwv#罐\u0005래t应\\N?빗;": "v쮽瞭p뭃"
+                             }
+                            ]],
+                            "斴槾?Z翁\"~慍弞ﻆ=꜡o5鐋dw\"?K蠡i샾ogDﲰ_C*⬟iㇷ4nય蟏[㟉U꽌娛苸 ঢ়操贻洞펻)쿗૊許X⨪VY츚Z䍾㶭~튃ᵦ<\/E臭tve猑x嚢": null,
+                            "锡⛩<\/칥ꈙᬙ蝀&Ꚑ籬■865?_>L詏쿨䈌浿弥爫̫lj&zx<\/C쉾?覯n?": null,
+                            "꾳鑤/꼩d=ᘈn挫ᑩ䰬ZC": "3錢爋6Ƹ䴗v⪿Wr益G韠[\u0010屗9쁡钁u?殢c䳀蓃樄욂NAq赟c튒瘁렶Aૡɚ捍"
+                           }
+                          ]
+                         ]
+                        ]}
+                       ]
+                      ]
+                     }]]]}}
+                    ]}],
+                    "Ej䗳U<\/Q=灒샎䞦,堰頠@褙g_\u0003ꤾfⶽ?퇋!łB〙ד3CC䌴鈌U:뭔咎(Qો臃䡬荋BO7㢝䟸\"Yb": 2.36010731779814E-20,
+                    "逸'0岔j\u000e눘먷翌C츊秦=ꭣ棭ှ;鳸=麱$XP⩉駚橄A\\좱⛌jqv䰞3Ь踌v㳆¹gT┌gvLB賖烡m?@E঳i": null
+                   },
+                   "曺v찘ׁ?&绫O័": 9107241066550187880
+                  }
+                 ]
+                ],
+                "(e屄\u0019昜훕琖b蓘ᬄ0/۲묇Z蘮ဏ⨏蛘胯뢃@㘉8ሪWᨮ⦬ᅳ䅴HI၇쨳z囕陻엣1赳o": true,
+                ",b刈Z,ၠ晐T솝ŕB⩆ou'퐼≃绗雗d譊": null,
+                "a唥KB\"ﳝ肕$u\n^⅄P䟼냉䞸⩪u윗瀱ꔨ#yşs꒬=1|ﲤ爢`t౐튼쳫_Az(Ṋ擬㦷좕耈6": 2099309172767331582,
+                "?㴸U<\/䢔ꯡ阽扆㐤q鐋?f㔫wM嬙-;UV죫嚔픞G&\"Cᗍ䪏풊Q": "VM7疹+陕枡툩窲}翡䖶8欞čsT뮐}璤:jﺋ鎴}HfA൝⧻Zd#Qu茅J髒皣Y-︴[?-~쉜v딏璮㹚䅊﩯<-#\u000e걀h\u0004u抱﵊㼃U<㱷⊱IC進"
+               },
+               "숌dee節鏽邺p넱蹓+e罕U": true
+              }
+             ],
+             "b⧴룏??ᔠ3ぱ>%郿劃翐ꏬꠛW瞳᫏누躨狀ໄy੽\"ីuS=㨞馸k乆E": "トz݈^9R䬑<ﮛG<s~<\/?ⵆᏥ老熷u듷"
+            }}
+           ]
+          }
+         ]}
+        }
+       }
+      }
+     }},
+     "宩j鬅쳜QꝖјy獔Z᭵1v擖}䨿F%cֲ᫺贴m塼딚NP亪\"ᅨsa뺯ꘓ2:9뛓༂쌅䊈#>Rꨳ\u000fTT泠纷꽀MR<CBxP񱒫X쇤": -2.22390568492330598E18,
+     "?䯣ᄽ@Z鸅->ᴱ纊:㠭볮?%N56%鈕1䗍䜁a䲗j陇=뿻偂衋࿘ᓸ?ᕵZ+<\/}H耢b䀁z^f$&㝒LkꢳI脚뙛u": 5.694374481577558E-20
+    }]
+   }
+  ]],
+  "obj": {"key": "wrong value"},
+  "퓲꽪m{㶩/뇿#⼢&᭙硞㪔E嚉c樱㬇1a綑᝖DḾ䝩": null
+ },
+ "key": "6.908319653520691E8",
+ "z": {
+  "6U閆崬밺뀫颒myj츥휘:$薈mY햚#rz飏+玭V㭢뾿愴YꖚX亥ᮉ푊\u0006垡㐭룝\"厓ᔧḅ^Sqpv媫\"⤽걒\"˽Ἆ?ꇆ䬔未tv{DV鯀Tἆl凸g\\㈭ĭ즿UH㽤": null,
+  "b茤z\\.N": [[
+   "ZL:ᅣዎ*Y|猫劁櫕荾Oj为1糕쪥泏S룂w࡛Ᏺ⸥蚙)",
+   {
+    "\"䬰ỐwD捾V`邀⠕VD㺝sH6[칑.:醥葹*뻵倻aD\"": true,
+    "e浱up蔽Cr෠JK軵xCʨ<뜡癙Y獩ケ齈X/螗唻?<蘡+뷄㩤쳖3偑犾&\\첊xz坍崦ݻ鍴\"嵥B3㰃詤豺嚼aqJ⑆∥韼@\u000b㢊\u0015L臯.샥": false,
+    "l?Ǩ喳e6㔡$M꼄I,(3᝝縢,䊀疅뉲B㴔傳䂴\u0088㮰钘ꜵ!ᅛ韽>": -5514085325291784739,
+    "o㮚?\"춛㵉<\/﬊ࠃ䃪䝣wp6ἀ䱄[s*S嬈貒pᛥ㰉'돀": [{
+     "(QP윤懊FI<ꃣ『䕷[\"珒嶮?%Ḭ壍಻䇟0荤!藲끹bd浶tl\u2049#쯀@僞": {"i妾8홫": {
+      ",M맃䞛K5nAㆴVN㒊햬$n꩑&ꎝ椞阫?/ṏ세뉪1x쥼㻤㪙`\"$쟒薟B煌܀쨝ଢ଼2掳7㙟鴙X婢\u0002": "Vዉ菈᧷⦌kﮞఈnz*<?੃'ahhCFX(\u0007⮊E㭍䱾Gxꥩr❣.洎",
+      "뻴5bDD큯O傆盓왻U?ꞅꐊN鐭᧢τ\"迳豲8\u001b䃥ꂻ䴺ྸH筴,": {
+       "\"L鸔SE㬡XV&~͎'놅蔞눶l匛?'.K氁\\ƢẨ疇mΊ'꽳&!鹠m'|{P痊 秄쒿u\u00111䋧gϩx7t丗D䊨䠻z0.A0": -1.50139930144708198E18,
+       "8鋂뛷?첒B☚>﷜FM\"荭7ꍀ-VR<\/';䁙E9$䩉\f @s?퍪o3^衴cඎ䧪aK鼟q䆨c{䳠5mᒲՙ蘹ᮩ": {
+        "F㲷JGo⯍P덵x뒳p䘧☔\"+ꨲ吿JfR㔹)4n紬G练Q፞!C|": true,
+        "p^㫮솎oc.೚A㤠??r\u000f)⾽⌲們M2.䴘䩳:⫭胃\\፾@Fᭌ\\K": false,
+        "蟌Tk愙潦伩": {
+         "a<\/@ᾛ慂侇瘎": -7271305752851720826,
+         "艓藬/>၄ṯ,XW~㲆w": {"E痧郶)㜓ha朗!N赻瞉駠uC\u20ad辠<Ve?폱!Im䁎搄:*s 9諚Prᵾ뒰髶B̌qWA8梸vS⫊⢳{t㺲q㺈랊뮣RqK밢쳪": [
+          false,
+          {
+           "\u000b=>x퓮⣫P1ࠫLMMX'M刼唳됤": null,
+           "P쓫晥%k覛ዩIUᇸ滨:噐혲lMR5䋈V梗>%幽u頖\\)쟟": null,
+           "eg+昉~矠䧞难\b?gQ쭷筝\\eꮠNl{ಢ哭|]Mn銌╥zꖘzⱷ⭤ᮜ^": [
+            -1.30142114406914976E17,
+            -1.7555215491128452E-19,
+            null,
+            "渾㨝ߏ牄귛r?돌?w[⚞ӻ~廩輫㼧/",
+            -4.5737191805302129E18,
+            null,
+            "xy࿑M[oc셒竓Ⓔx?뜓y䊦>-D켍(&&?XKkc꩖ﺸᏋ뵞K伕6ী)딀P朁yW揙?훻魢傎EG碸9類៌g踲C⟌aEX舲:z꒸许",
+            3808159498143417627,
+            null,
+            {"m試\u20df1{G8&뚈h홯J<\/": {
+             "3ஸ厠zs#1K7:rᥞoꅔꯧ&띇鵼鞫6跜#赿5l'8{7㕳(b/j\"厢aq籀ꏚ\u0015厼稥": [
+              -2226135764510113982,
+              true,
+              null,
+              {
+               "h%'맞S싅Hs&dl슾W0j鿏MםD놯L~S-㇡R쭬%": null,
+               "⟓咔謡칲\u0000孺ꛭx旑檉㶆?": null,
+               "恇I転;￸B2Y`z\\獓w,놏濐撐埵䂄)!䶢D=ഭ㴟jyY": {
+                "$ࡘt厛毣ൢI芁<겿骫⫦6tr惺a": [
+                 6.385779736989334E-20,
+                 false,
+                 true,
+                 true,
+                 [
+                  -6.891946211462334E-19,
+                  null,
+                  {
+                   "]-\\Ꟑ1/薓❧Ὂ\\l牑\u0007A郃)阜ᇒᓌ-塯`W峬G}SDb㬨Q臉⮻빌O鞟톴첂B㺱<ƈmu챑J㴹㷳픷Oㆩs": {
+                    "\"◉B\"pᶉt骔J꩸ᄇᛐi╰栛K쉷㉯鐩!㈐n칍䟅難>盥y铿e୔蒏M貹ヅ8嘋퀯䉶ጥ㏢殊뻳\"絧╿ꉑ䠥?∃蓊{}㣣Gk긔H1哵峱": false,
+                    "6.瀫cN䇮F㧺?\\椯=ڈT䘆4␘8qv": -3.5687501019676885E-19,
+                    "Q?yऴr혴{஀䳘p惭f1ﹸ䅷䕋贲<ྃᄊ繲hq\\b|#QSTs1c-7(䵢\u2069匏絘ꯉ:l毴汞t戀oෟᵶ뮱፣-醇Jx䙬䐁햢0࣫ᡁgrㄛ": "\u0011_xM/蘇Chv;dhA5.嗀绱V爤ﰦi뵲M",
+                    "⏑[\"ugoy^儣횎~U\\섯겜論l2jw஌yD腅̂\u0019": true,
+                    "ⵯɇ䐲᫿࢚!㯢l샅笶戮1꣖0Xe": null,
+                    "劅f넀識b宁焊E찓橵G!ʱ獓뭔雩괛": [{"p⹣켙[q>燣䍃㞽ᩲx:쓤삘7玑퇼0<\/q璂ᑁ[Z\\3䅵䧳\u0011㤧|妱緒C['췓Yꞟ3Z鳱雼P錻BU씧U`ᢶg蓱>.1ӧ譫'L_5V䏵Ц": [
+                     false,
+                     false,
+                     {"22䂍盥N霂얢<F8꼵7Gసyh뀍g᦭ꄢx硴嬢\u001a?E괆T|;7犟\"Wt%䐩O⨵t&#ᬋK'蜍Ძ揔⾠鲂T멷靃\u0018䓞cE": {"f=䏏츜瞾zw?孡鏣\\铀᫞yẆg(\u0011M6(s2]`ਫ": [[[{
+                      "'y몱纣4S@\\,i㷯럹Ua充Tᣢ9躘Zଞ쥿䐊s<\/刎\\\"뉦-8/": "蜑.X0꭛낢륹i젨ꚁ<8?s볕蝡|Q✬᯦@\\G㑢屿Mn졾J굤⥟JW뤵苑r쁕툄嵵?⾥O",
+                      "^1挲~[n귆誈央碠멪gI洷": -8214236471236116548,
+                      "sሣ%娌暡clr蟜㑓2\u000bS❟_X㨔⚴5~蔷ꀇ|Xu㬖,꤭卹r(g믇쩍%췸앙|栣U\\2]䤉+啠菡ꯎT鉹m\n/`SzDᅼ鞶": 1.1217523390167132E-19,
+                      "u톇=黚\\ ꂮ췵L>躰e9⑩_뵜斌n@B}$괻Yᐱ@䧋V\"☒-諯cV돯ʠ": true,
+                      "Ű螧ᔼ檍鍎땒딜qꄃH뜣<獧ूCY吓⸏>XQ㵡趌o끬k픀빯a(ܵ甏끆୯/6Nᪧ}搚ᆚ짌P牰泱鈷^d꣟#L삀\"㕹襻;k㸊\\f+": true,
+                      "쎣\",|⫝̸阊x庿k잣v庅$鈏괎炔k쬪O_": [
+                       "잩AzZGz3v愠ꉈⵎ?㊱}S尳௏p\r2>췝IP䘈M)w|\u000eE",
+                       -9222726055990423201,
+                       null,
+                       [
+                        false,
+                        {"´킮'뮤쯽Wx讐V,6ᩪ1紲aႈ\u205czD": [
+                         -930994432421097536,
+                         3157232031581030121,
+                         "l貚PY䃛5@䭄<nW\u001e",
+                         [
+                          3.801747732605161E18,
+                          [
+                           null,
+                           false,
+                           {
+                            "": 4.0442013775147072E16,
+                            "2J[sᡪ㞿|n'#廲꯬乞": true,
+                            "B[繰`\\㏏a̼㨀偛㽓<\/꥖ᵈO让\r43⡩徑ﬓ๨ﮕx:㣜o玐ꉟぢC珵὆ᓞ쇓Qs氯였9駵q혃Ljꂔ<\/昺+t䐋༻猙c沪~櫆bpJ9UᏐ:칣妙!皗F4㑄탎䕀櫳振讓": 7.3924182188256287E18,
+                            "H磵ai委曷n柋T<\/勿F&:ꣴfU@㿗榻Lb+?퍄sp\"᪟~>귻m㎮琸f": 1.0318894506812084E-19,
+                            "࢜⩢Ш䧔1肽씮+༎ᣰ闺馺窃䕨8Mƶq腽xc(៯夐J5굄䕁Qj_훨/~価.䢵慯틠퇱豠㼇Qﵘ$DuSp(8Uญ<\/ಟ룴𥳐ݩ$": 8350772684161555590,
+                            "ㆎQ䄾\u001bpᩭ${[諟^^骴᤮b^ㅥI┧T㉇⾞\"绦<AYJ⒃-oF<\/蛎mm;obh婃ᦢ": false,
+                            "䔤䣈?汝.p襟&d㱅\\Jᚠ@?O첁ࢽ휔VR蔩|㒢柺": [[
+                             "-ꕨ岓棻r@鿆^3~䪤Ѐ狼︌ﹲ\\᝸MlE쵠Q+",
+                             null,
+                             false,
+                             3346674396990536343,
+                             null,
+                             {
+                              "": null,
+                              "/䏨S쨑,&繷㉥8C엮赸3馢|뇲{鄎ꗇqFﶉ雕UD躢?Ꟛအ꽡[hᕱᗅ㦋쭞Mユ茍?L槽암V#성唐%㣕嘵\\ڹ(嘏躿&q": [
+                               -1364715155337673920,
+                               false,
+                               -8197733031775379251,
+                               "E팗鮲JwH\\觡܈᜝\"+뉞娂N휗v噙၂깼\u001dD帒l%-斔N",
+                               -3.844267973858711E-20,
+                               [{"쬯(褈Q 蟚뿢 /ⱖ㻥\u0017/?v邘䃡0U.Z1x?鯔V尠8Em<": [[[
+                                null,
+                                [
+                                 null,
+                                 -5841406347577698873,
+                                 "킷\"S⋄籞繗솸ᵣ浵w쑿ퟗ7nᎏx3앙z㘌쿸I葥覯㬏0ᆝb汆狺뷘ႀnꋋ",
+                                 -1227911573141158702,
+                                 {
+                                  "u㉮PᾺV鵸A\\g*ࡗ9슟晭+ͧↀ쿅H\u001c꾣犓}癇恛ᗬ黩䟘X梑鐆e>r䰂f矩'-7䡭桥Dz兔V9谶居㺍ᔊ䩯덲.\u001eL0ὅㅷ釣": [{
+                                   "<쯬J卷^숞u࠯䌗艞R9닪g㐾볎a䂈歖意:%鐔|ﵤ|y}>;2,覂⶚啵tb*仛8乒㓶B࿠㯉戩oX 貘5V嗆렽낁߼4h䧛ꍺM空\\b꿋貼": 8478577078537189402,
+                                   "VD*|吝z~h譺aᯒ": {
+                                    "YI췢K<\/濳xNne玗rJo쾘3핰鴊\"↱AR:ࢷ\"9?\"臁說)?誚ꊏe)_D翾W?&F6J@뺾ꍰNZ醊Z쾈വH嶿?炫㷱鬰M겈<bS}㎥l|刖k": {"H7鷮퇢_k": [
+                                     true,
+                                     "s㟑瀭좾쮀⑁Y찺k맢戲쀸俻ກ6儮끗扖puߖꜻ馶rꈞ痘?3ྚ畊惘䎗\"vv)*臔웅鿈䧲^v,껛㰙J <ᚶ5",
+                                     7950276470944656796,
+                                     4.9392301536234746E17,
+                                     -4796050478201554639,
+                                     "yꬴc<3㻚",
+                                     "o塁\u20a4蒵鮬裢CᴧnB㭱f.",
+                                     false,
+                                     [
+                                      false,
+                                      "㡐弑V?瀆䰺q!출㇞yᘪ꼼(IS~Ka 烿ꟿ샕桤\u0005HQҹ㯪罂q萾⚇懋⦕둡v",
+                                      1862560050083946970,
+                                      "\u20b6[|(뭹gꍒ펉O轄Dl묽]ﯨ髯QEbA㒾m@롴礠㕓2땫n6ْ엘঵篳R잷꙲m색摪|@㿫5aK设f胭r8/NI4춫栵\\꯬2]",
+                                      false,
+                                      {
+                                       "\u000b7*㙛燏.~?䔊p搕e_拺艿뷍f{ꔻ1s驙`$Ė戧?q⋬沭?塷᭚蹀unoa5": {
+                                        "S귯o紞㾕ᅶ侏銇12|ʟ畴iNAo?|Sw$M拲գ㭄紧螆+,梔": null,
+                                        "㭚0?xB疱敻ேBPwv뾃熉(ӠpJ]갢\"Bj'\u0016GE椱<\/zgៅx黢礇h},M9ﴦ?LḨ": "Si B%~㬒E",
+                                        "핇㉊살㍢숨~ȪRo䦅D桺0z]﬽蠆c9ᣨyPP㿷U~㞐?쯟퍸宒뉆U|}㉓郾ࣻ*櫎꼪䁗s?~7\u001e㘔h9{aឋ}:㶒P8": [{"\\R囡쐬nN柋琍؛7칾 :㶃衇徜V 深f1淍♠i?3S角폞^ᆞ\u20e8ṰD\u0007秡+躒臔&-6": {
+                                         "䨑g.fh㔗=8!\"狿ൻLU^뻱g䲚㻐'W}k欤?๒鲇S꧗䫾$ĥ피": -794055816303360636,
+                                         "外頮詋~텡竆繃䏩苨뾺朁꼃瘹f*㉀枙NH/\u2027ꢁ}j묎vペq︉식뜡Od5 N顯ି烅仟Qfㆤ嚢(i䬅c;맧?嶰㩼츱獡?-": {
+                                          "e݆㍡⬬'2㻒?U篲鿄\"隻Ҭ5NꭰꤺBꀈ拾᩺[刯5곑Na램ﴦ዆]㝓qw钄\u001b\"Y洊䗿祏塥迵[⼞⠳P$꠱5먃0轢`": [{"獰E賝﫚b먭N긆Ⰹ史2逶ꜛ?H짉~?P}jj}侷珿_T>᭨b,⻁鈵P䕡䀠८ⱄ홎鄣": {
+                                           "@?k2鶖㋮\"Oರ K㨇廪儲\u0017䍾J?);\b*묀㗠섳햭1MC V": null,
+                                           "UIICP!BUA`ᢈ㋸~袩㗪⾒=fB﮴l1ꡛ죘R辂여ҳ7쮡<䩲`熕8頁": 4481809488267626463,
+                                           "Y?+8먙ᚔ鋳蜩럶1㥔y璜౩`": [
+                                            null,
+                                            1.2850335807501874E-19,
+                                            "~V2",
+                                            2035406654801997866,
+                                            {
+                                             "<숻1>\"": -8062468865199390827,
+                                             "M㿣E]}qwG莎Gn᝶(ꔙ\\D⬲iꇲs寢t駇S뀡ꢜ": false,
+                                             "pꝤ㎏9W%>M;-U璏f(^j1?&RB隧 忓b똊E": "#G?C8.躬ꥯ'?냪#< 渟&헿란zpo왓Kj}鷧XﻘMツb䕖;㪻",
+                                             "vE풤幉xz뱕쫥Ug㦲aH} ᣟp:鬼Yᰟ<Fɋ잣緂頒⺏䉲瑑䅂,C~ޅG!f熢-B7~9Pqࡢ[츑#3ꕎ,Öඳ聁⩅㵧춀뿍xy䌏͂tdj!箧᳆|9蚡돬": -2.54467378964089632E17,
+                                             "䵈䅦5빖,궆-:໿댾仫0ᙚyᦝhqᚄ": null,
+                                             "侯Y\"湛졯劇U셎YX灍ⅸ2伴|筧\\䁒㶶᷏쁑Waᦵᗱ㜏늾膠<Jc63<G\u20fe䇹66僣k0O\"_@U": null,
+                                             "姪y$#s漴JH璌Ӊ脛J㝾펔ﹴoꈶ㚸PD:薠쏖%說ថ蹂1]⾕5튄": {
+                                              "᝾Huw3䮅如쿺䍟嫝]<鰨ݷ?꯯䫓傩|ᐶස媽\\澒≡闢": "Mm\"쏇ᯄ졽\"楇<\/ꥆ흭局n隴@鿣w⠊4P贈徎W㊋;䤞'.팇蒁䡴egpx嗎wஅ獗堮ᛐnˁ︖䀤4噙?໚郝᱋ޘॎt恑姫籕殥陃\"4[ꝬqL4Wꠎx",
+                                              "ℇj遌5B뒚\" U": "硄ꏘ{憠굏:&t䌨m Cઌ쿣鞛XFꠟs䝭ﶃ\"格a0x闊昵吲L\\杚聈aꁸj싹獅\"灟ﱡ馆*굖糠<ꔏ躎",
+                                              "톌賠弳ꟍb\"螖X50sĶ晠3f秂坯Iⓟ:萘": 5.573183333596288E18,
+                                              "%䴺": [[[[
+                                               -6957233336860166165,
+                                               false,
+                                               null,
+                                               {
+                                                "\"\\௮茒袀ᕥ23ୃ괶?䕎.嚲◉㏞L+ᵡ艱hL콇붆@": null,
+                                                "%螥9ꭌ<\/-t": true,
+                                                ",9|耢椸䁓Xk죱\u0015$Ώ鲞[?엢ᝲ혪즈ⴂ▂ℴ㗯\"g뺘\\ꍜ#\u0002ヮ}ሎ芲P[鹮轧@냲䃦=#(": 2.78562909315899616E17,
+                                                "R?H䧰ⵇ<,憰쮼Q總iR>H3镔ᴚ斦\\鏑r*2橱G⼔F/.j": true,
+                                                "RK좬뎂a홠f*f㱉ᮍ⦋潙㨋Gu곌SGI3I뿐\\F',)t`荁蘯囯ﮉ裲뇟쥼_ገ驪▵撏ᕤV": 1.52738225997956557E18,
+                                                "^k굲䪿꠹B逤%F㱢漥O披M㽯镞竇霒i꼂焅륓\u00059=皫之눃\u2047娤閍銤唫ၕb<\/w踲䔼u솆맚,䝒ᝳ'/it": "B餹饴is権ꖪ怯ꦂẉဎt\"!凢谵⧿0\\<=(uL䷍刨쑪>俆揓Cy襸Q힆䆭涷<\/ᐱ0ɧ䗾䚹\\ኜ?ꄢᇘ`䴢{囇}᠈䴥X4퓪檄]ꥷ/3謒ሴn+g騍X",
+                                                "GgG꽬[(嫓몍6\u0004궍宩㙻/>\u0011^辍dT腪hxǑ%ꊇk,8(W⧂結P鬜O": [{
+                                                 "M㴾c>\\ᓲ\u0019V{>ꤩ혙넪㭪躂TS-痴໸闓⍵/徯O.M㏥ʷD囎⧔쁳휤T??鉬뇙=#ꢫ숣BX䭼<\/d똬졬g榿)eꨋﯪ좇첻<?2K)": null,
+                                                 "Z17縬z]愀䖌 ᾋBCg5딒국憍꾓aⲷ턷u:U촳驿?雺楶\u0001\u001c{q*ᰗ苑B@k揰z.*蓗7ረIm\"Oᱍ@7?_": true,
+                                                 "㺃Z<": -4349275766673120695,
+                                                 "휃䠂fa塆ffixKe'덬鏗੄뺾w࠾鑎k땢m*႑햞鐮6攊&虜h黚,Y䱳Sﭼ둺pN6": [
+                                                  false,
+                                                  "IΎ䣲,\"ᬮ˪癘P~Qlnx喁Sᮔ༬˨I珌m䜛酛\u0003iꐸ㦧cQ帲晼D' \\(粋wQcN\\뵰跈",
+                                                  [
+                                                   "D0\\L?M1쥍Kaꏌsd+盌귤憊tz䌣댐בO坂wϢ%ὒgp,Ai⎧ᶆI餾ꦍ棩嘅᳉怴%m]ၶis纖D凜镧o심b U",
+                                                   {
+                                                    "?଼\u0011Rv&^[+匚I趈T媫\u0010.䥤ᆯ1q僤HydⲰl㒽K'ᅾiౕ豲초딨@\u0013J'쪪VD౼P4Ezg#8*㋤W馓]c쿯8": false,
+                                                    "c/擯X5~JmK䵶^쐎ച|B|u[솝(X뚤6v}W㤘⠛aR弌臌쾭諦eⒷ僡-;㩩⭖ⷴ徆龄갬{䱓ᥩ!﯏⊚ᇨ<v燡露`:볉癮꨽り★Ax7Ꮀ譥~舑\\Vꍋ\"$)v": "e&sFF쬘OBd슊寮f蠛জ봞mn~锆竒G脁\"趵G刕䕳&L唽붵<\/I,X팚B⍥X,kԇҗ眄_慡:U附ᓚA蕧>\u001a\u0011\";~쓆BH4坋攊7힪",
+                                                    "iT:L闞椕윚*滛gI≀Wਟඊ'ꢆ縺뱹鮚Nꩁ᧬蕼21줧\\䋯``⍐\\㏱鳨": 1927052677739832894,
+                                                    "쮁缦腃g]礿Y㬙 fヺSɪ꾾N㞈": [
+                                                     null,
+                                                     null,
+                                                     {
+                                                      "!t,灝Y 1䗉罵?c饃호䉂Cᐭ쒘z(즽sZG㬣sഖE4뢜㓕䏞丮Qp簍6EZឪ겛fx'ꩱQ0罣i{k锩*㤴㯞r迎jTⲤ渔m炅肳": [
+                                                       -3.3325685522591933E18,
+                                                       [{"㓁5]A䢕1룥BC?Ꙍ`r룔Ⳛ䙡u伲+\u0001്o": [
+                                                        null,
+                                                        4975309147809803991,
+                                                        null,
+                                                        null,
+                                                        {"T팘8Dﯲ稟MM☻㧚䥧/8ﻥ⥯aXLaH\"顾S☟耲ît7fS෉놁뮔/ꕼ䓈쁺4\\霶䠴ᩢ<\/t4?죵>uD5➶༆쉌럮⢀秙䘥\u20972ETR3濡恆vB? ~鸆\u0005": {
+                                                         "`閖m璝㥉b뜴?Wf;?DV콜\u2020퍉౓擝宏ZMj3mJ먡-傷뱙yח㸷꥿ ໘u=M읝!5吭L4v\\?ǎ7C홫": null,
+                                                         "|": false,
+                                                         "~Ztᛋ䚘\\擭㗝傪W陖+㗶qᵿ蘥ᙄp%䫎)}=⠔6ᮢS湟-螾-mXH?cp": 448751162044282216,
+                                                         "\u209fad놹j檋䇌ᶾ梕㉝bוּ<d䗱:줰M酄\u0000X#_r獢A饓ꍗُKo_跔?ᪧ嵜鼲<": null,
+                                                         "ꆘ)ubI@h@洭Ai㜎䏱k\u0003?T䉐3间%j6j棍j=❁\\U毮ᬹ*8䀔v6cpj⭬~Q꿾뺶펵悡!쩭厝l六㽫6퇓ޭ2>": {"?苴ꩠD䋓帘5騱qﱖPF?☸珗顒yU ᡫcb䫎 S@㥚gꮒ쎘泴멖\\:I鮱TZ듒ᶨQ3+f7캙\"?\f풾\\o杞紟﻽M.⏎靑OP": [
+                                                          -2.6990368911551596E18,
+                                                          [{"䒖@<᰿<\/⽬tTr腞&G%᳊秩蜰擻f㎳?S㵧\r*k뎾-乢겹隷j軛겷0룁鮁": {")DO0腦:춍逿:1㥨่!蛍樋2": [{
+                                                           ",ꌣf侴笾m๫ꆽ?1?U?\u0011ꌈꂇ": {
+                                                            "x捗甠nVq䅦w`CD⦂惺嘴0I#vỵ} \\귂S끴D얾?Ԓj溯\"v餄a": {
+                                                             "@翙c⢃趚痋i\u0015OQ⍝lq돆Y0pࢥ3쉨䜩^<8g懥0w)]䊑n洺o5쭝QL댊랖L镈Qnt⪟㒅십q헎鳒⮤眉ᔹ梠@O縠u泌ㄘb榚癸XޔFtj;iC": false,
+                                                             "I&뱋゘|蓔䔕측瓯%6ᗻHW\\N1貇#?僐ᗜgh᭪o'䗈꽹Rc욏/蔳迄༝!0邔䨷푪8疩)[쭶緄㇈୧ፐ": {
+                                                              "B+:ꉰ`s쾭)빼C羍A䫊pMgjdx䐝Hf9᥸W0!C樃'蘿f䫤סи\u0017Jve? 覝f둀⬣퓉Whk\"஼=չﳐ皆笁BIW虨쫓F廰饞": -642906201042308791,
+                                                              "sb,XcZ<\/m㉹ ;䑷@c䵀s奤⬷7`ꘖ蕘戚?Feb#輜}p4nH⬮eKL트}": [
+                                                               "RK鳗z=袤Pf|[,u욺",
+                                                               "Ẏᏻ罯뉋⺖锅젯㷻{H䰞쬙-쩓D]~\u0013O㳢gb@揶蔉|kᦂ❗!\u001ebM褐sca쨜襒y⺉룓",
+                                                               null,
+                                                               null,
+                                                               true,
+                                                               -1.650777344339075E-19,
+                                                               false,
+                                                               "☑lꄆs힨꤇]'uTന⌳농].1⋔괁沰\"IWഩ\u0019氜8쟇䔻;3衲恋,窌z펏喁횗?4?C넁问?ᥙ橭{稻Ⴗ_썔",
+                                                               "n?]讇빽嗁}1孅9#ꭨ靶v\u0014喈)vw祔}룼쮿I",
+                                                               -2.7033457331882025E18,
+                                                               {
+                                                                ";⚃^㱋x:饬ኡj'꧵T☽O㔬RO婎?향ᒭ搩$渣y4i;(Q>꿘e8q": "j~錘}0g;L萺*;ᕭꄮ0l潛烢5H▄쳂ꏒוֹꙶT犘≫x閦웧v",
+                                                                "~揯\u2018c4職렁E~ᑅቚꈂ?nq뎤.:慹`F햘+%鉎O瀜쟏敛菮⍌浢<\/㮺紿P鳆ࠉ8I-o?#jﮨ7v3Dt赻J9": null,
+                                                                "ࣝW䌈0ꍎqC逖,횅c၃swj;jJS櫍5槗OaB>D踾Y": {"㒰䵝F%?59.㍈cᕨ흕틎ḏ㋩B=9IېⓌ{:9.yw}呰ㆮ肒᎒tI㾴62\"ዃ抡C﹬B<\/<EO꽓ᇕu&鋫\\禞퐹u꒍.7훯ಶ2䩦͉ᶱf깵ᷣ늎": [
+                                                                 5.5099570884646902E18,
+                                                                 "uQN濿m臇<%?谣鮢s]]x0躩慌闋<;( 鋤.0ᠵd1#벘a:Gs?햷'.)ㅴ䞟琯崈FS@O㌛ᓬ抢큌ើ냷쿟툥IZn[惵ꐧ3뙍[&v憙J>촋jo朣",
+                                                                 [
+                                                                  -7675533242647793366,
+                                                                  {"ᙧ呃:[㒺쳀쌡쏂H稈㢤\u001dᶗGG-{GHྻຊꡃ哸䵬;$?&d\\⥬こN圴됤挨-'ꕮ$PU%?冕눖i魁q騎Q": [
+                                                                   false,
+                                                                   [[
+                                                                    7929823049157504248,
+                                                                    [[
+                                                                     true,
+                                                                     "Z菙\u0017'eꕤ᱕l,0\\X\u001c[=雿8蠬L<\/낲긯W99g톉4ퟋb㝺\u0007劁'!麕Q궈oW:@X၎z蘻m絙璩귓죉+3柚怫tS捇蒣䝠-擶D[0=퉿8)q0ٟ",
+                                                                     "唉\nFA椭穒巯\\䥴䅺鿤S#b迅獘 ﶗ꬘\\?q1qN犠pX꜅^䤊⛤㢌[⬛휖岺q唻ⳡ틍\"㙙Eh@oA賑㗠y必Nꊑᗘ",
+                                                                     -2154220236962890773,
+                                                                     -3.2442003245397908E18,
+                                                                     "Wᄿ筠:瘫퀩?o貸q⊻(᎞KWf宛尨h^残3[U(='橄",
+                                                                     -7857990034281549164,
+                                                                     1.44283696979059942E18,
+                                                                     null,
+                                                                     {"ꫯAw跭喀 ?_9\"Aty背F=9缉ྦྷ@;?^鞀w:uN㘢Rỏ": [
+                                                                      7.393662029337442E15,
+                                                                      3564680942654233068,
+                                                                      [
+                                                                       false,
+                                                                       -5253931502642112194,
+                                                                       "煉\\辎ೆ罍5⒭1䪁䃑s䎢:[e5}峳ﴱn騎3?腳Hyꏃ膼N潭錖,Yᝋ˜YAၓ㬠bG렣䰣:",
+                                                                       true,
+                                                                       null,
+                                                                       {
+                                                                        "⒛'P&%죮|:⫶춞": -3818336746965687085,
+                                                                        "钖m<\/0ݎMtF2Pk=瓰୮洽겎.": [[
+                                                                         -8757574841556350607,
+                                                                         -3045234949333270161,
+                                                                         null,
+                                                                         {
+                                                                          "Ꮬr輳>⫇9hU##w@귪A\\C 鋺㘓ꖐ梒뒬묹㹻+郸嬏윤'+g<\/碴,}ꙫ>손;情d齆J䬁ຩ撛챝탹/R澡7剌tꤼ?ặ!`⏲睤\u00002똥଴⟏": null,
+                                                                          "\u20f2ܹe\\tAꥍư\\x当뿖렉禛;G檳ﯪS૰3~㘠#[J<}{奲 5箉⨔{놁<\/釿抋,嚠/曳m&WaOvT赋皺璑텁": [[
+                                                                           false,
+                                                                           null,
+                                                                           true,
+                                                                           -5.7131445659795661E18,
+                                                                           "萭m䓪D5|3婁ఞ>蠇晼6nﴺPp禽羱DS<睓닫屚삏姿",
+                                                                           true,
+                                                                           [
+                                                                            -8759747687917306831,
+                                                                            {
+                                                                             ">ⓛ\t,odKr{䘠?b퓸C嶈=DyEᙬ@ᴔ쨺芛髿UT퓻春<\/yꏸ>豚W釺N뜨^?꽴﨟5殺ᗃ翐%>퍂ဿ䄸沂Ea;A_\u0005閹殀W+窊?Ꭼd\u0013P汴G5썓揘": 4.342729067882445E-18,
+                                                                             "Q^즾眆@AN\u0011Kb榰냎Y#䝀ꀒᳺ'q暇睵s\"!3#I⊆畼寤@HxJ9": false,
+                                                                             "⿾D[)袨㇩i]웪䀤ᛰMvR<蟏㣨": {"v퇓L㪱ꖣ豛톤\\곱#kDTN": [{
+                                                                              "(쾴䡣,寴ph(C\"㳶w\"憳2s馆E!n!&柄<\/0Pꈗſ?㿳Qd鵔": {"娇堰孹L錮h嵅⛤躏顒?CglN束+쨣ﺜ\\MrH": {"獞䎇둃ቲ弭팭^ꄞ踦涟XK錆쳞ឌ`;੶S炥騞ଋ褂B៎{ڒ䭷ᶼ靜pI荗虶K$": [{"◖S~躘蒉꫿輜譝Q㽙闐@ᢗ¥E榁iء5┄^B[絮跉ᰥ遙PWi3wㄾⵀDJ9!w㞣ᄎ{듒ꓓb6\\篴??c⼰鶹⟧\\鮇ꮇ": [[
+                                                                               654120831325413520,
+                                                                               -1.9562073916357608E-19,
+                                                                               {
+                                                                                "DC(昐衵ἡ긙갵姭|֛[t": 7.6979110359897907E18,
+                                                                                "J␅))嫼❳9Xfd飉j7猬ᩉ+⤻眗벎E鰉Zᄊ63zၝ69}ZᶐL崭ᦥ⡦靚⋛ꎨ~i㨃咊ꧭo䰠阀3C(": -3.5844809362512589E17,
+                                                                                "p꣑팱쒬ꎑ뛡Ꙩ挴恍胔&7ᔈ묒4Hd硶훐㎖zꢼ豍㿢aሃ=<\/湉鵲EӅ%$F!퍶棌孼{O駍਺geu+": ")\u001b잓kŀX쩫A밁®ڣ癦狢)扔弒p}k縕ꩋ,䃉tࣼi",
+                                                                                "ァF肿輸<솄G-䢹䛸ꊏl`Tqꕗ蒞a氷⸅ᴉ蠰]S/{J왲m5{9.uέ~㕚㣹u>x8U讁B덺襪盎QhVS맅킃i识{벂磄Iහ䙅xZy/抍૭Z鲁-霳V据挦ℒ": null,
+                                                                                "㯛|Nꐸb7ⵐb?拠O\u0014ކ?-(EꞨ4ꕷᄤYᯕOW瞺~螸\"욿ќ<u鵵઎⸊倾쑷෻rT⪄牤銱;W殆͢芄ਰ嚝훚샢⊿+㲽": null,
+                                                                                "単逆ົ%_맛d)zJ%3칧_릟#95䌨怡\u001ci턠ॣi冘4赖'ਐ䧐_栔!": {
+                                                                                 "*?2~4㲌᭳쯁ftႷ1#oJ\b䊇镇됔 \u2079x䛁㊝ᮂN;穽跖s휇ᣄ홄傷z⸷(霸!3y뺏M쒿햏۽v㳉tở心3黎v쭻 Rp཮Vr~T?&˴k糒븥쩩r*D": null,
+                                                                                 "8@~홟ꔘk1[": -5570970366240640754,
+                                                                                 "BZt鏦ꡬc餖  s(mᛴ\u0000◄d腑t84C⟐坯VṊ뉙'噱Ꝕ珽GC顀?허0ꞹ&돇䛭C䷫](": 2.4303828213012387E-20,
+                                                                                 "y撔Z외放+}ḑ骈ᙝ&\u0016`G便2|-e]঳?QF㜹YF\"㿒緄햷㈟塚䷦ୀጤlM蘸N㾆▛럪㞂tᕬ镈쇝喠l amcxPnm\u001a᱋<\/]_]ﻹ瞧?H": false,
+                                                                                 "ፏ氏묢뜚I[♺뽛x?0H봬Wpn꨹Ra䝿쌑{㴂ni祻윸A'y|⺴ᚘ庌9{$恲{톽=m#@6ᨧfgs44陎J#<Ễ쨓瀵❩a୛㷉㙉ܸ◠냔嬯~呄籁羥镳": false,
+                                                                                 "㘱{<頬22?IF@곊I겂嶻L᝛D{@r쒂?IAᣧ洪惒誸b徂z췺꾍㠭\\刊%禨쌐ⶣ仵\\P[:47;<ᇅ<\/": {
+                                                                                  "^U釳-v㢈ꗝ◄菘rᜨi;起kR犺䵫\u0000锍쁙m-ԙ!lḃ꛸뻾F(W귛y": "#ᠺH㸢5v8_洑C",
+                                                                                  "䔵໳$ᙠ6菞\u206e摎q圩P|慍sV4:㜾(I溞I?": -6569206717947549676,
+                                                                                  "透Ꞃ緵퇝8 >e㺰\"'㌢ƐW\u0004瞕>0?V鷵엳": true,
+                                                                                  "뤥G\\迋䠿[庩'꼡\u001aiᩮV쯁ᳪ䦪Ô;倱ନ뛁誈": null,
+                                                                                  "쥹䄆䚟Q榁䎐᢭<\/2㕣p}HW蟔|䃏꿈ꚉ锳2Pb7㙑Tⅹᵅ": {
+                                                                                   "Y?֭$>#cVBꩨ:>eL蒁務": {
+                                                                                    "86柡0po 䏚&-捑Ћ祌<\/휃-G*㶢הּ쩍s㶟餇c걺yu꽎還5*턧簕Og婥SꝐ": null,
+                                                                                    "a+葞h٥ࠆ裈嗫ﵢ5輙퀟ᛜ,QDﹼ⟶Y騠锪E_|x죗j侵;m蜫轘趥?븅w5+mi콛L": {
+                                                                                     ";⯭ﱢ!买F⽍柤鶂n䵣V㫚墱2렾ELEl⣆": [
+                                                                                      true,
+                                                                                      -3.6479311868339015E-18,
+                                                                                      -7270785619461995400,
+                                                                                      3.334081886177621E18,
+                                                                                      2.581457786298155E18,
+                                                                                      -6.605252412954115E-20,
+                                                                                      -3.9232347037744167E-20,
+                                                                                      {
+                                                                                       "B6㊕.k1": null,
+                                                                                       "ZAꄮJ鮷ᳱo갘硥鈠䠒츼": {
+                                                                                        "ᕅ}럡}.@y陪鶁r業'援퀉x䉴ﵴl퍘):씭脴ᥞhiꃰblﲂ䡲엕8߇M㶭0燋標挝-?PCwe⾕J碻Ᾱ䬈䈥뷰憵賣뵓痬+": {"a췩v礗X⋈耓ፊf罅靮!㔽YYᣓw澍33⎔芲F|\"䜏T↮輦挑6ᓘL侘?ᅥ]덆1R௯✎餘6ꏽ<\/௨\\?q喷ꁫj~@ulq": {"嗫欆뾔Xꆹ4H㌋F嵧]ࠎ]㠖1ꞤT<$m뫏O i댳0䲝i": {"?෩?\u20cd슮|ꯆjs{?d7?eNs⢚嫥氂䡮쎱:鑵롟2hJꎒﯭ鱢3춲亄:뼣v䊭諱Yj択cVmR䩃㘬T\"N홝*ै%x^F\\_s9보zz4淗?q": [
+                                                                                         null,
+                                                                                         "?",
+                                                                                         2941869570821073737,
+                                                                                         "{5{殇0䝾g6밖퍋臩綹R$䖭j紋釰7sXI繳漪행y",
+                                                                                         false,
+                                                                                         "aH磂?뛡#惇d婅?Fe,쐘+늵䍘\"3r瘆唊勐j⳧࠴ꇓ<\/唕윈x⬌讣䋵%拗ᛆⰿ妴᝔M2㳗必꧂淲?ゥ젯檢<8끒MidX䏒3᳻Q▮佐UT|⤪봦靏⊏",
+                                                                                         [[{
+                                                                                          "颉(&뜸귙{y^\"P퟉춝Ჟ䮭D顡9=?}Y誱<$b뱣RvO8cH煉@tk~4ǂ⤧⩝屋SS;J{vV#剤餓ᯅc?#a6D,s": [
+                                                                                           -7.8781018564821536E16,
+                                                                                           true,
+                                                                                           [
+                                                                                            -2.28770899315832371E18,
+                                                                                            false,
+                                                                                            -1.0863912140143876E-20,
+                                                                                            -6282721572097446995,
+                                                                                            6767121921199223078,
+                                                                                            -2545487755405567831,
+                                                                                            false,
+                                                                                            null,
+                                                                                            -9065970397975641765,
+                                                                                            [
+                                                                                             -5.928721243413937E-20,
+                                                                                             {"6촊\u001a홯kB0w撨燠룉{绎6⳹!턍贑y▾鱧ժ[;7ᨷ∀*땒䪮1x霆Hᩭ☔\"r䝐7毟ᝰr惃3ꉭE+>僒澐": [
+                                                                                              "Ta쎩aƝt쵯ⰪVb",
+                                                                                              [
+                                                                                               -5222472249213580702,
+                                                                                               null,
+                                                                                               -2851641861541559595,
+                                                                                               null,
+                                                                                               4808804630502809099,
+                                                                                               5657671602244269874,
+                                                                                               "5犲﨣4mᥣ?yf젫꾯|䋬잁$`Iⳉﴷ扳兝,'c",
+                                                                                               false,
+                                                                                               [
+                                                                                                null,
+                                                                                                {
+                                                                                                 "DyUIN쎾M仼惀⮥裎岶泭lh扠\u001e礼.tEC癯튻@_Qd4c5S熯A<\/\6U윲蹴Q=%푫汹\\\u20614b[௒C⒥Xe⊇囙b,服3ss땊뢍i~逇PA쇸1": -2.63273619193485312E17,
+                                                                                                 "Mq꺋貘k휕=nK硍뫞輩>㾆~἞ࡹ긐榵l⋙Hw뮢帋M엳뢯v⅃^": 1877913476688465125,
+                                                                                                 "ᶴ뻗`~筗免⚽টW˃⽝b犳䓺Iz篤p;乨A\u20ef쩏?疊m㝀컩뫡b탔鄃ᾈV(遢珳=뎲ିeF仢䆡谨8t0醄7㭧瘵⻰컆r厡궥d)a阄፷Ed&c﯄伮1p": null,
+                                                                                                 "⯁w4曢\"(欷輡": "\"M᭫]䣒頳B\\燧ࠃN㡇j姈g⊸⺌忉ꡥF矉স%^",
+                                                                                                 "㣡Oᄦ昵⫮Y祎S쐐級㭻撥>{I$": -378474210562741663,
+                                                                                                 "䛒掷留Q%쓗1*1J*끓헩ᦢ﫫哉쩧EↅIcꅡ\\?ⴊl귛顮4": false,
+                                                                                                 "寔愆샠5]䗄IH贈=d﯊/偶?ॊn%晥D視N򗘈'᫂⚦|X쵩넽z질tskxDQ莮Aoﱻ뛓": true,
+                                                                                                 "钣xp?&\u001e侉/y䴼~?U篔蘚缣/I畚?Q绊": -3034854258736382234,
+                                                                                                 "꺲໣眀)⿷J暘pИfAV삕쳭Nꯗ4々'唄ⶑ伻㷯騑倭D*Ok꧁3b␽_<\/챣Xm톰ၕ䆄`*fl㭀暮滠毡?": [
+                                                                                                  "D男p`V뙸擨忝븪9c麺`淂⢦Yw⡢+kzܖ\fY1䬡H歁)벾Z♤溊-혰셢?1<-\u0005;搢Tᐁle\\ᛵߓﭩ榩<QF;t=?Qꀞ",
+                                                                                                  [
+                                                                                                   null,
+                                                                                                   [{"-췫揲ᬨ墊臸<ࠒH跥 㔭쥃㫯W=z[wধ╌<~yW楄S!⑻h즓lĖN￧篌W듷튗乵᪪템먵Pf悥ᘀk䷭焼\\讄r擁鐬y6VF<\/6랿p)麡ꁠ㪁\"pழe": [
+                                                                                                    "#幎杴颒嶈)ㄛJ.嶤26_⋌东챯ꠉ⤋ؚ/⏚%秼Q룠QGztᄎ㎷អI翰Xp睔鍜ꨍ",
+                                                                                                    {",T?": [
+                                                                                                     false,
+                                                                                                     [[
+                                                                                                      true,
+                                                                                                      7974824014498027996,
+                                                                                                      false,
+                                                                                                      [
+                                                                                                       4.3305464880956252E18,
+                                                                                                       {
+                                                                                                        "᱿W^A]'rᮢ)鏥z餝;Hu\\Fk?ﴺ?IG浅-䙧>訝-xJ;巡8깊蠝ﻓU$K": {
+                                                                                                         "Vꕡ諅搓W=斸s︪vﲜ츧$)iꡟ싉e寳?ጭムVથ嵬i楝Fg<\/Z|៪ꩆ-5'@ꃱ80!燱R쇤t糳]罛逇dṌ֣XHiͦ{": true,
+                                                                                                         "Ya矲C멗Q9膲墅携휻c\\딶G甔<\/.齵휴": -1.1456247877031811E-19,
+                                                                                                         "z#.OO￝J": -8263224695871959017,
+                                                                                                         "崍_3夼ᮟ1F븍뽯ᦓ鴭V豈Ь": [{
+                                                                                                          "N蒬74": null,
+                                                                                                          "yuB?厅vK笗!ᔸcXQ旦컶P-녫mᄉ麟_": "1R@ 톘xa_|﩯遘s槞d!d껀筤⬫薐焵먑D{\\6k共倌☀G~AS_D\"딟쬚뮥馲렓쓠攥WTMܭ8nX㩴䕅檹E\u0007ﭨN 2 ℆涐ꥏ꠵3▙玽|됨_\u2048",
+                                                                                                          "恐A C䧩G": {":M큣5e들\\ꍀ恼ᔄ靸|I﨏$)n": {
+                                                                                                           "|U䬫㟯SKV6ꛤ㗮\bn봻䲄fXT:㾯쳤'笓0b/ೢC쳖?2浓uO.䰴": "ཐ꼋e?``,ᚇ慐^8ꜙNM䂱\u0001IᖙꝧM'vKdꌊH牮r\\O@䊷ᓵ쀆(fy聻i툺\"?<\/峧ࣞ⓺ᤤ쵒߯ꎺ騬?)刦\u2072l慪y꺜ﲖTj+u",
+                                                                                                           "뽫<G;稳UL⸙q2n쵿C396炿J蓡z⣁zဩSOU?<\/뙍oE큸O鿅෴ꍈEm#\"[瑦⤫ᝆgl⡗q8\"큘덥係@ᆤ=\u0001爖羝췀㸩b9\\jeqt㟿㮸龾m㳳긄": {
+                                                                                                            "9\"V霟釜{/o0嫲C咀-饷䈍[녩)\r䤴tMW\\龟ϣ^ي㪙忩䞞N湆Y笕)萨ꖤ誥煽:14⫻57U$擒䲐薡Qvↇ櫲현誧?nஷ6": {"l웾䌵.䅋䦝ic碳g[糲Ƿ-ឈᚱ4쑧\u0004C࿼\u0018&쬑?멲<\/fD_檼픃pd쪼n㕊渪V䛉m揈W儅톳뗳䓆7㭽諤T煠Ney?0᪵鈑&": [
+                                                                                                             false,
+                                                                                                             null,
+                                                                                                             {
+                                                                                                              "\r;鼶j᠂꼍RLz~♔9gf?ӡ浐": -1.4843072575250897E-19,
+                                                                                                              "&ꊒ\"ꋟ䝭E诮ﯚO?SW뒁훪mb旙⎕ᗕ⶙|ᷤ5y4甥": "j5|庠t铱?v 횋0\"'rxz䃢杺Ɜ!\u0002",
+                                                                                                              "Q ၩ㟧": {"Hﬔ\u2058䪠틙izZㅛ탟H^ﶲA??R6呠Z솋R.࿶g8": [
+                                                                                                               -8762672252886298799,
+                                                                                                               -1.9486830507000208E17,
+                                                                                                               null,
+                                                                                                               -7157359405410123024,
+                                                                                                               null,
+                                                                                                               null,
+                                                                                                               -995856734219489233,
+                                                                                                               "呧㫹A4!",
+                                                                                                               null,
+                                                                                                               -1.9105609358624648E-19,
+                                                                                                               5888184370445333848,
+                                                                                                               2.25460605078245E-19,
+                                                                                                               2.5302739297121987E18,
+                                                                                                               "뢹sbEf捵2丯?뗾耸(Wd띙SବꭖrtU?筤P똙QpbbKqaE$来V웰3i/lK퉜,8︸e= g螓t竦컼?.寋8鵗",
+                                                                                                               7377742975895263424,
+                                                                                                               2.4218442017790503E-19,
+                                                                                                               {
+                                                                                                                "y꒚ཫ쨘醬킃糟}yTSt䡀⇂뿽4ൢ戰U": [[
+                                                                                                                 3600537227234741875,
+                                                                                                                 4435474101760273035,
+                                                                                                                 -1.42274517007951795E18,
+                                                                                                                 -5567915915496026866,
+                                                                                                                 null,
+                                                                                                                 null,
+                                                                                                                 [
+                                                                                                                  -3204084299154861161,
+                                                                                                                  {
+                                                                                                                   "7梧慸憏.a瘎\u00041U鵮Ck֨d惥耍ⳡY,⭏써E垁FFI鱑ⳬ줢7⧵Bﴠ耘줕햸q컴~*瑍W.떛ࡆ@'᐀+轳": -961121410259132975,
+                                                                                                                   "⥅]l黭㣓绶;!!⎃=朼㐿e&ἂ繤C﯀l䝣㌀6TM쑮w懃ꡡ#ᤆ䰓,墼湼゙뽸㲿䧽쫨xᵖ듨<\/ T0峸iQ:溫脐\\\"쎪ὴ砇宖^M泼큥➅鈫@ᄟ༩\u2008⥼": true,
+                                                                                                                   "⩐\"籽汎P싯鲘蟼sRᐯ䅩\u0019R(kRᖁ&ಌ 0\"鳶!馼YH": null,
+                                                                                                                   "鮼ꚇ싋։刟\rRLd步Nⴗ5Eࡆ訛갚[I醵NC(郴ṉy5D뤺౳QY壯5苴y훨(W\\Cଇ姚C艄깹\u001c歷㋵ZC᥂": [
+                                                                                                                    -6806235313106257498,
+                                                                                                                    null,
+                                                                                                                    "}N⸿讽sꚪ;\\p繇j苄䫨\u20e7%5x?t#",
+                                                                                                                    {
+                                                                                                                     "O〗k<墻yV$ఁrs-c1ఌ唪.C7_Yobᦜ褷'b帰mㄑl⌅": {"qB뗗擄3隂5뺍櫂䱟e촸P/鏩,3掁ꗩ=冉棓㑉|˞F襴뿴,:㞦<퓂⧙礞♗g뚎ᛩ<\/뉽ⶳ⸻A?_x2I㽝勒*I홱鍧粿~曟㤙2绥Ly6+썃uu鿜בf큘|歍ࣖÉ": [
+                                                                                                                      ">hh䈵w>1ⲏ쐭V[ⅎ\\헑벑F_㖝⠗㫇h恽;῝汰ᱼ瀖J옆9RR셏vsZ柺鶶툤r뢱橾/ꉇ囦FGm\"謗ꉦ⨶쒿⥡%]鵩#ᖣ_蹎 u5|祥?O",
+                                                                                                                      null,
+                                                                                                                      2.0150326776036215E-19,
+                                                                                                                      null,
+                                                                                                                      true,
+                                                                                                                      false,
+                                                                                                                      true,
+                                                                                                                      {"\fa᭶P捤WWc᠟f뚉ᬏ퓗ⳀW睹5:HXH=q7x찙X$)모r뚥ᆟ!Jﳸf": [
+                                                                                                                       -2995806398034583407,
+                                                                                                                       [
+                                                                                                                        6441377066589744683,
+                                                                                                                        "Mﶒ醹i)Gἦ廃s6몞 KJ౹礎VZ螺费힀\u0000冺업{谥'꡾뱻:.ꘘ굄奉攼Di᷑K鶲y繈욊阓v㻘}枭캗e矮1c?휐\"4\u0005厑莔뀾墓낝⽴洗ṹ䇃糞@b1\u0016즽Y轹",
+                                                                                                                        {
+                                                                                                                         "1⽕⌰鉟픏M㤭n⧴ỼD#%鐘⊯쿼稁븣몐紧ᅇ㓕ᛖcw嬀~ഌ㖓(0r⧦Q䑕髍ര铂㓻R儮\"@ꇱm❈௿᦯頌8}㿹犴?xn잆꥽R": 2.07321075750427366E18,
+                                                                                                                         "˳b18㗈䃟柵Z曆VTAu7+㛂cb0﯑Wp執<\/臋뭡뚋刼틮荋벲TLP预庰܈G\\O@VD'鱃#乖끺*鑪ꬳ?Mޞdﭹ{␇圯쇜㼞顄︖Y홡g": [{
+                                                                                                                          "0a,FZ": true,
+                                                                                                                          "2z̬蝣ꧦ驸\u0006L↛Ḣ4๚뿀'?lcwᄧ㐮!蓚䃦-|7.飑挴.樵*+1ﮊ\u0010ꛌ%貨啺/JdM:똍!FBe?鰴㨗0O财I藻ʔWA᫓G쳛u`<\/I": [{
+                                                                                                                           "$τ5V鴐a뾆両環iZp頻යn븃v": -4869131188151215571,
+                                                                                                                           "*즢[⦃b礞R◚nΰꕢH=귰燙[yc誘g䆌?ଜ臛": {
+                                                                                                                            "洤湌鲒)⟻\\䥳va}PeAMnN[": "㐳ɪ/(軆lZR,Cp殍ȮN啷\"3B婴?i=r$펽ᤐ쀸",
+                                                                                                                            "阄R4㒿㯔ڀ69ZᲦ2癁핌噗P崜#\\-쭍袛&鐑/$4童V꩑_ZHA澢fZ3": {"x;P{긳:G閉:9?活H": [
+                                                                                                                             "繺漮6?z犞焃슳\">ỏ[Ⳛ䌜녏䂹>聵⼶煜Y桥[泥뚩MvK$4jtロ",
+                                                                                                                             "E#갶霠좭㦻ୗ먵F+䪀o蝒ba쮎4X㣵 h",
+                                                                                                                             -335836610224228782,
+                                                                                                                             null,
+                                                                                                                             null,
+                                                                                                                             [
+                                                                                                                              "r1᫩0>danjY짿bs{",
+                                                                                                                              [
+                                                                                                                               -9.594464059325631E-23,
+                                                                                                                               1.0456894622831624E-20,
+                                                                                                                               null,
+                                                                                                                               5.803973284253454E-20,
+                                                                                                                               -8141787905188892123,
+                                                                                                                               true,
+                                                                                                                               -4735305442504973382,
+                                                                                                                               9.513150514479281E-20,
+                                                                                                                               "7넳$螔忷㶪}䪪l짴\u0007鹁P鰚HF銏ZJﳴ/⍎1ᷓ忉睇ᜋ쓈x뵠m䷐窥Ꮤ^\u0019ᶌ偭#ヂt☆၃pᎍ臶䟱5$䰵&๵分숝]䝈뉍♂坎\u0011<>",
+                                                                                                                               "C蒑貑藁lﰰ}X喇몛;t밿O7/᯹f\u0015kI嘦<ዴ㟮ᗎZ`GWퟩ瑹࡮ᅴB꿊칈??R校s脚",
+                                                                                                                               {
+                                                                                                                                "9珵戬+AU^洘拻ቒy柭床'粙XG鞕᠜繀伪%]hC,$輙?Ut乖Qm떚W8઼}~q⠪rU䤶CQ痗ig@#≲t샌f㈥酧l;y闥ZH斦e⸬]j⸗?ঢ拻퀆滌": null,
+                                                                                                                                "畯}㧢J罚帐VX㨑>1ꢶkT⿄蘥㝑o|<嗸層沈挄GEOM@-䞚䧰$만峬輏䠱V✩5宸-揂D'㗪yP掶7b⠟J㕻SfP?d}v㼂Ꮕ'猘": {
+                                                                                                                                 "陓y잀v>╪": null,
+                                                                                                                                 "鬿L+7:됑Y=焠U;킻䯌잫!韎ஔ\f": {
+                                                                                                                                  "駫WmGጶ": {
+                                                                                                                                   "\\~m6狩K": -2586304199791962143,
+                                                                                                                                   "ႜࠀ%͑l⿅D.瑢Dk%0紪dḨTI픸%뗜☓s榗኉\"?V籄7w髄♲쟗翛歂E䤓皹t ?)ᄟ鬲鐜6C": {
+                                                                                                                                    "_췤a圷1\u000eB-XOy缿請∎$`쳌eZ~杁튻/蜞`塣৙\"⪰\"沒l}蕌\\롃荫氌.望wZ|o!)Hn獝qg}": null,
+                                                                                                                                    "kOSܧ䖨钨:಼鉝ꭝO醧S`십`ꓭ쭁ﯢN&Et㺪馻㍢ⅳ㢺崡ຊ蜚锫\\%ahx켨|ż劻ꎄ㢄쐟A躊᰹p譞綨Ir쿯\u0016ﵚOd럂*僨郀N*b㕷63z": {
+                                                                                                                                     ":L5r+T㡲": [{
+                                                                                                                                      "VK泓돲ᮙRy㓤➙Ⱗ38oi}LJቨ7Ó㹡৘*q)1豢⛃e᫛뙪壥镇枝7G藯g㨛oI䄽 孂L缊ꋕ'EN`": -2148138481412096818,
+                                                                                                                                      "`⛝ᘑ$(खꊲ⤖ᄁꤒ䦦3=)]Y㢌跨NĴ驳줟秠++d孳>8ᎊ떩EꡣSv룃 쯫أ?#E|᭙㎐?zv:5祉^⋑V": [
+                                                                                                                                       -1.4691944435285607E-19,
+                                                                                                                                       3.4128661569395795E17,
+                                                                                                                                       "㐃촗^G9佭龶n募8R厞eEw⺡_ㆱ%⼨D뉄퉠2ꩵᛅⳍ搿L팹Lවn=\"慉념ᛮy>!`g!풲晴[/;?[v겁軇}⤳⤁핏∌T㽲R홓遉㓥",
+                                                                                                                                       "愰_⮹T䓒妒閤둥?0aB@㈧g焻-#~跬x<\/舁P݄ꐡ=\\׳P\u0015jᳪᢁq;㯏l%᭗;砢觨▝,謁ꍰGy?躤O黩퍋Y㒝a擯\n7覌똟_䔡]fJ晋IAS",
+                                                                                                                                       4367930106786121250,
+                                                                                                                                       -4.9421193149720582E17,
+                                                                                                                                       null,
+                                                                                                                                       {
+                                                                                                                                        ";ᄌ똾柉곟ⰺKpፇ䱻ฺ䖝{o~h!eꁿ઻욄ښ\u0002y?xUd\u207c悜ꌭ": [
+                                                                                                                                         1.6010824122815255E-19,
+                                                                                                                                         [
+                                                                                                                                          "宨︩9앉檥pr쇷?WxLb",
+                                                                                                                                          "氇9】J玚\u000f옛呲~ 輠1D嬛,*mW3?n휂糊γ虻*ᴫ꾠?q凐趗Ko↦GT铮",
+                                                                                                                                          "㶢ថmO㍔k'诔栀Z蛟}GZ钹D",
+                                                                                                                                          false,
+                                                                                                                                          -6.366995517736813E-20,
+                                                                                                                                          -4894479530745302899,
+                                                                                                                                          null,
+                                                                                                                                          "V%᫡II璅䅛䓎풹ﱢ/pU9se되뛞x梔~C)䨧䩻蜺(g㘚R?/Ự[忓C뾠ࢤc왈邠买?嫥挤풜隊枕",
+                                                                                                                                          ",v碍喔㌲쟚蔚톬៓ꭶ",
+                                                                                                                                          3.9625444752577524E-19,
+                                                                                                                                          null,
+                                                                                                                                          [
+                                                                                                                                           "kO8란뿒䱕馔b臻⍟隨\"㜮鲣Yq5m퐔<u뷆c譆\u001bN?<",
+                                                                                                                                           [{
+                                                                                                                                            ";涉c蒀ᴧN䘱䤳 ÿꭷ,핉dSTDB>K#ꢘug㼈ᝦ=P^6탲@䧔%$CqSw铜랊0&m⟭<\/a逎ym\u0013vᯗ": true,
+                                                                                                                                            "洫`|XN뤮\u0018詞=紩鴘_sX)㯅鿻Ố싹": 7.168252736947373E-20,
+                                                                                                                                            "ꛊ饤ﴏ袁(逊+~⽫얢鈮艬O힉7D筗S곯w操I斞᠈븘蓷x": [[[[
+                                                                                                                                             -7.3136069426336952E18,
+                                                                                                                                             -2.13572396712722688E18,
+                                                                                                                                             {
+                                                                                                                                              "硢3㇩R:o칢行E<=\u0018ၬYuH!\u00044U%卝炼2>\u001eSi$⓷ꒈ'렢gᙫ番ꯒ㛹럥嶀澈v;葷鄕x蓎\\惩+稘UEᖸﳊ㊈壋N嫿⏾挎,袯苷ኢ\\x|3c": 7540762493381776411,
+                                                                                                                                              "?!*^ᢏ窯?\u0001ڔꙃw虜돳FgJ?&⨫*uo籤:?}ꃹ=ٴ惨瓜Z媊@ત戹㔏똩Ԛ耦Wt轁\\枒^\\ꩵ}}}ꀣD\\]6M_⌫)H豣:36섘㑜": {
+                                                                                                                                               ";홗ᰰU஋㙛`D왔ཿЃS회爁\u001b-㢈`봆?盂㛣듿ᦾ蒽_AD~EEຆ㊋(eNwk=Rɠ峭q\"5Ἠ婾^>'ls\n8QAK<l_⭨穟": [
+                                                                                                                                                true,
+                                                                                                                                                true,
+                                                                                                                                                {"ﳷm箅6qⷈ?ﲈ憟b۷⫉἞V뚴少U呡瓴ꉆs~嘵得㌶4XR漊": [
+                                                                                                                                                 "폆介fM暪$9K[ㄇ샍큳撦g撟恸jҐF㹹aj bHᘀ踉ꎐC粄 a?\u000fK즉郝 幨9D舢槷Xh뵎u훩Ꜿ턾ƅ埂P埆k멀{䢹~?D<\/꼢XR\u001b〱䝽꼨i㘀ḟ㚺A-挸",
+                                                                                                                                                 false,
+                                                                                                                                                 null,
+                                                                                                                                                 -1.1710758021294953E-20,
+                                                                                                                                                 3996737830256461142,
+                                                                                                                                                 true,
+                                                                                                                                                 null,
+                                                                                                                                                 -8271596984134071193,
+                                                                                                                                                 "_1G퉁텑m䮔鰼6멲Nmꇩſt쓟튍N许FDj+3^ﶜ⎸\u0019⤕橥!\"s-뾞lz北׸ꍚ랬)?l⻮고i䑰\u001f䪬",
+                                                                                                                                                 4.459124464204517E-19,
+                                                                                                                                                 -4.0967172848578447E18,
+                                                                                                                                                 5643211135841796287,
+                                                                                                                                                 -9.482336221192844E-19,
+                                                                                                                                                 "౪冏釶9D?s螭X榈枸j2秀v]泌鰚岒聵轀쌶i텽qMbL]R,",
+                                                                                                                                                 null,
+                                                                                                                                                 [
+                                                                                                                                                  null,
+                                                                                                                                                  {"M쪊ꯪ@;\u0011罙ꕅ<e᝺|爑Yⵝ<\/&ᩎ<腊ሑᮔ੃F豭": [
+                                                                                                                                                   "^0࡟1볏P폋ፏ杈F⨥Iꂴ\"z磣VⅡ=8퀝2]䢹h1\u0017{jT<I煛5%D셍S⑙⅏J*샐 巙ດ;᧡䙞",
+                                                                                                                                                   [{
+                                                                                                                                                    "'㶡큾鄧`跊\"gV[?u᭒Ʊ髷%葉굵a띦N켧Qﯳy%y䩟髒L䯜S䵳r絅肾킂ၐ'ꔦg긓a'@혔যW谁ᝬF栩ŷ+7w鞚": 6.3544416675584832E17,
+                                                                                                                                                    "苎脷v改hm쏵|㋊g_ᔐ 뒨蹨峟썎㷸|Ο刢?Gͨ옛-?GꦱIEYUX4?%ꘋᆊ㱺": -2.8418378709165287E-19,
+                                                                                                                                                    "誰?(H]N맘]k洳\"q蒧蘞!R퐫\\(Q$T5N堍⫣윿6|럦속︅ﭗ(": [
+                                                                                                                                                     "峩_\u0003A瘘?✓[硫䎯ၽuጭ\"@Y綅첞m榾=贮9R벿῜Z",
+                                                                                                                                                     null,
+                                                                                                                                                     "䰉㗹㷾Iaᝃqcp쓘὾൫Q|ﵓ<\/ḙ>)- Q䲌mo펹L_칍樖庫9꩝쪹ᘹ䑖瀍aK ?*趤f뭓廝p=磕",
+                                                                                                                                                     "哑z懅ᤏ-ꍹux쀭",
+                                                                                                                                                     [
+                                                                                                                                                      true,
+                                                                                                                                                      3998739591332339511,
+                                                                                                                                                      "ጻ㙙?᳸aK<\/囩U`B3袗ﱱ?\"/k鏔䍧2l@쿎VZ쨎/6ꃭ脥|B?31+on颼-ꮧ,O嫚m ࡭`KH葦:粘i]aSU쓙$쐂f+詛頖b",
+                                                                                                                                                      [{"^<9<箝&絡;%i﫡2攑紴\\켉h쓙-柂䚝ven\u20f7浯-Ꮏ\r^훁䓚헬\u000e?\\ㅡֺJ떷VOt": [{
+                                                                                                                                                       "-௄卶k㘆혐஽y⎱㢬sS઄+^瞥h;ᾷj;抭\u0003밫f<\/5Ⱗ裏_朻%*[-撵䷮彈-芈": {
+                                                                                                                                                        "㩩p3篊G|宮hz䑊o곥j^Co0": [
+                                                                                                                                                         653239109285256503,
+                                                                                                                                                         {"궲?|\":N1ۿ氃NZ#깩:쇡o8킗ࡊ[\"됸Po핇1(6鰏$膓}⽐*)渽J'DN<썙긘毦끲Ys칖": {
+                                                                                                                                                          "2Pr?Xjㆠ?搮/?㓦柖馃5뚣Nᦼ|铢r衴㩖\"甝湗ܝ憍": "\"뾯i띇筝牻$珲/4ka $匝휴译zbAᩁꇸ瑅&뵲衯ꎀᆿ7@ꈋ'ᶨH@ᠴl+",
+                                                                                                                                                          "7뢽뚐v?4^ꊥ_⪛.>pởr渲<\/⢕疻c\"g䇘vU剺dஔ鮥꒚(dv祴X⼹\\a8y5坆": true,
+                                                                                                                                                          "o뼄B욞羁hr﷔폘뒚⿛U5pꪴfg!6\\\"爑쏍䢱W<ﶕ\\텣珇oI/BK뺡'谑♟[Ut븷亮g(\"t⡎有?ꬊ躺翁艩nl F⤿蠜": 1695826030502619742,
+                                                                                                                                                          "ۊ깖>ࡹ햹^ⵕ쌾BnN〳2C䌕tʬ]찠?ݾ2饺蹳ぶꌭ訍\"◹ᬁD鯎4e滨T輀ﵣ੃3\u20f3킙D瘮g\\擦+泙ၧ 鬹ﯨַ肋7놷郟lP冝{ߒhড়r5,꓋": null,
+                                                                                                                                                          "ΉN$y{}2\\N﹯ⱙK'8ɜͣwt,.钟廣䎘ꆚk媄_": null,
+                                                                                                                                                          "䎥eᾆᝦ읉,Jުn岪㥐s搖謽䚔5t㯏㰳㱊ZhD䃭f絕s鋡篟a`Q鬃┦鸳n_靂(E4迠_觅뷝_宪D(NL疶hL追V熑%]v肫=惂!㇫5⬒\u001f喺4랪옑": {
+                                                                                                                                                           "2a輍85먙R㮧㚪Sm}E2yꆣꫨrRym㐱膶ᔨ\\t綾A☰.焄뙗9<쫷챻䒵셴᭛䮜.<\/慌꽒9叻Ok䰊Z㥪幸k": [
+                                                                                                                                                            null,
+                                                                                                                                                            true,
+                                                                                                                                                            {"쌞쐍": {
+                                                                                                                                                             "▟GL K2i뛱iQ\"̠.옛1X$}涺]靎懠ڦ늷?tf灟ݞゟ{": 1.227740268699265E-19,
+                                                                                                                                                             "꒶]퓚%ฬK❅": [{
+                                                                                                                                                              "(ෛ@Ǯっ䧼䵤[aテൖvEnAdU렖뗈@볓yꈪ,mԴ|꟢캁(而첸죕CX4Y믅": "2⯩㳿ꢚ훀~迯?᪑\\啚;4X\u20c2襏B箹)俣eỻw䇄",
+                                                                                                                                                              "75༂f詳䅫ꐧ鏿 }3\u20b5'∓䝱虀f菼Iq鈆﨤g퍩)BFa왢d0뮪痮M鋡nw∵謊;ꝧf美箈ḋ*\u001c`퇚퐋䳫$!V#N㹲抗ⱉ珎(V嵟鬒_b㳅\u0019": null,
+                                                                                                                                                              "e_m@(i㜀3ꦗ䕯䭰Oc+-련0뭦⢹苿蟰ꂏSV䰭勢덥.ྈ爑Vd,ᕥ=퀍)vz뱊ꈊB_6듯\"?{㒲&㵞뵫疝돡믈%Qw限,?\r枮\"? N~癃ruࡗdn&": null,
+                                                                                                                                                              "㉹&'Pfs䑜공j<\/?|8oc᧨L7\\pXᭁ 9᪘": -2.423073789014103E18,
+                                                                                                                                                              "䝄瑄䢸穊f盈᥸,B뾧푗횵B1쟢f\u001f凄": "魖⚝2儉j꼂긾껢嗎0ࢇ纬xI4](੓`蕞;픬\fC\"斒\")2櫷I﹥迧",
+                                                                                                                                                              "ퟯ詔x悝령+T?Bg⥄섅kOeQ큼㻴*{E靼6氿L缋\u001c둌๶-㥂2==-츫I즃㠐Lg踞ꙂEG貨鞠\"\u0014d'.缗gI-lIb䋱ᎂDy缦?": null,
+                                                                                                                                                              "紝M㦁犿w浴詟棓쵫G:䜁?V2ힽ7N*n&㖊Nd-'ຊ?-樹DIv⊜)g䑜9뉂ㄹ푍阉~ꅐ쵃#R^\u000bB䌎䦾]p.䀳": [{"ϒ爛\"ꄱ︗竒G䃓-ま帳あ.j)qgu扐徣ਁZ鼗A9A鸦甈!k蔁喙:3T%&㠘+,䷞|챽v䚞문H<\/醯r셓㶾\\a볜卺zE䝷_죤ဵ뿰᎟CB": [
+                                                                                                                                                               6233512720017661219,
+                                                                                                                                                               null,
+                                                                                                                                                               -1638543730522713294,
+                                                                                                                                                               false,
+                                                                                                                                                               -8901187771615024724,
+                                                                                                                                                               [
+                                                                                                                                                                3891351109509829590,
+                                                                                                                                                                true,
+                                                                                                                                                                false,
+                                                                                                                                                                -1.03836679125188032E18,
+                                                                                                                                                                {
+                                                                                                                                                                 "<?起HCᷭ죎劐莇逰/{gs\u0014⽛㰾愫tᅱ<솞ڢ됌煲膺਻9x닳x࡭Q訽,ᶭඦtt掾\"秧㺌d˪䙻꫗:ᭈh4緞痐䤴c뫚떩త<?ᕢ謚6]폛O鰐鋛镠贩赟\"<G♷1'": true,
+                                                                                                                                                                 "቙ht4ߝBqꦤ+\u0006멲趫灔)椾": -1100102890585798710,
+                                                                                                                                                                 "総兎곇뇸粟F醇;朠?厱楛㶆ⶏ7r⾛o꯬᳡F\\머幖 㜦\f[搦᥽㮣0䕊?J㊳뀄e㔔+?<n↴复": [
+                                                                                                                                                                  "4~ꉍ羁\\偮(泤叕빜\u0014>j랎:g曞ѕᘼ}链N",
+                                                                                                                                                                  -1.1103819473845426E-19,
+                                                                                                                                                                  true,
+                                                                                                                                                                  [
+                                                                                                                                                                   true,
+                                                                                                                                                                   null,
+                                                                                                                                                                   -7.9091791735309888E17,
+                                                                                                                                                                   true,
+                                                                                                                                                                   {"}蔰鋈+ꐨ啵0?g*사%`J?*": [{
+                                                                                                                                                                    "\"2wG?yn,癷BK\\龞䑞x?蠢": -3.7220345009853505E-19,
+                                                                                                                                                                    ";饹়❀)皋`噿焒j(3⿏w>偍5X<np?<줯<Y]捘!J೸UⳂNे7v௸㛃ᄧ톿䨷鯻v焇=烻TQ!F⦰䣣눿K鷚눁'⭲m捠(䚻": [
+                                                                                                                                                                     "蹕 淜੃b\"+몾ⴕ",
+                                                                                                                                                                     null,
+                                                                                                                                                                     35892237756161615,
+                                                                                                                                                                     {
+                                                                                                                                                                      " 듹㏝)5慁箱&$~:遰쮐<\/堋?% \\勽唅z손帋䘺H髀麡M퇖uz\u0012m諦d᳤콌樝\rX싹̡Ო": -433791617729505482,
+                                                                                                                                                                      "-j溗ࢵcz!:}✽5ഇ,욨ݏs#덫=南浺^}E\\Y\\T*뼈cd꺐cۘ뎁䨸됱K䠴㉿恿逳@wf쏢<\/[L[": -9.3228549642908109E17,
+                                                                                                                                                                      "Ms킭u஗%\\u⍎/家欲ἅ答㓽/꯳齳|㭘Pr\"v<\/禇䔆$GA䊻˔-:틊[h?倬荤ᾞ৳.Gw\u000b": [
+                                                                                                                                                                       "0宜塙I@䏴蝉\\Uy뒅=2<h暒K._贡璐Yi檻_⮵uᐝ㘗聠[f\u0015힢Hꔮ}጑;誏yf0\"\u20cc?(=q斠➽5ꎾ鞘kⲃ",
+                                                                                                                                                                       -2.9234211354411E-19,
+                                                                                                                                                                       false,
+                                                                                                                                                                       true,
+                                                                                                                                                                       {
+                                                                                                                                                                        "\u0011⟴GH_;#怵:\u001c\u0002n1U\\p/왔(┫]hꐚ7\r0䵷첗岷O௷?㝎[殇|J=?韷pᶟ儜犆?5კ1kꍖiH竧뛈ପdmk游y(콪팱꾍k慧 y辣": [
+                                                                                                                                                                         false,
+                                                                                                                                                                         "O\"끍p覈ykv磂㢠㝵~뀬튍lC&4솎䇃:Mj",
+                                                                                                                                                                         -7.009964654003924E-20,
+                                                                                                                                                                         false,
+                                                                                                                                                                         -49306078522414046,
+                                                                                                                                                                         null,
+                                                                                                                                                                         null,
+                                                                                                                                                                         2160432477732354319,
+                                                                                                                                                                         true,
+                                                                                                                                                                         "4횡h+!踹ꐬP鮄{0&뱥M?샍鞅n㮞ᨹ?쒆毪l'箅^ꚥ頛`e㻨52柳⮙嫪࡟딯a.~䵮1f吘N&zȭL榓ۃ鳠5d㟆M@㣥ӋA΍q0縶$",
+                                                                                                                                                                         -3.848996532974368E16,
+                                                                                                                                                                         true,
+                                                                                                                                                                         null,
+                                                                                                                                                                         -3.5240055580952525E18,
+                                                                                                                                                                         {
+                                                                                                                                                                          " vﭷၵ#ce乃5僞?Z D`묨粇ᐔ绠vWL譢u뽀\\J|tⓙt№\"ꨋnT凮ᒩ蝂篝b騩:䢭Hbv읻峨z㹚T趗햆귣학津XiY@ᖥK": true,
+                                                                                                                                                                          "!F 醌y䉸W2ꇬ\u0006/䒏7~%9擛햀徉9⛰+?㌘;ꠓX䇻Dfi뼧쒒\u0012F謞՝絺+臕kऍLSQ쌁X쎬幦HZ98蒊枳": "澤令#\u001d抍⛳@N搕퀂[5,✄ꘇ~䘷?\u0011Xꈺ[硸⠘⛯X醪聡x\u0007쌇MiX/|ミ뚁K8䁡W)銀q僞綂蔕E",
+                                                                                                                                                                          "6␲䣖R৞@ငg?<\/೴x陙Xꈺ崸⠅ᇾ\\0X,H쟴셭A稂ힿゝF\\쑞\u0012懦(Aᯕ灭~\u0001껮X?逊": 5.7566819207732864E17,
+                                                                                                                                                                          "[c?椓": false,
+                                                                                                                                                                          "k䒇": 2583824107104166717,
+                                                                                                                                                                          "꙯N훙㏅ﮒ燣㨊瞯咽jMxby뻭뵫װ[\"1畈?ৱL": "띣ᔂ魠羓犴ꚃ+|rY",
+                                                                                                                                                                          "녺Z?䬝鉉:?ⳙ瘏Cኯ.Vs[釿䨉쐧\\\\*쵢猒$\\y溔^,㑳": {"藶꺟": [{
+                                                                                                                                                                           "\"d훣N2zq]?'檿죸忷篇ﮟ擤m'9!죶≓p뭻\\ᇷ\f퇶_䰸h๐Q嵃訾㘑従ꯦ䞶jL틊r澵Omᾫ!H䱤팼/;|᭺I7슎YhuXi⚼": -1.352716906472438E-19,
+                                                                                                                                                                           "M⽇倻5J䂫औ᝔楸#J[Fﹱ쫮W誻bWz?}1\"9硪뻶fe": "盬:Ѹ砿획땣T凊(m灦呜ﻝR㿎艴䂵h",
+                                                                                                                                                                           "R띾k힪CH钙_i苮ⰵoᾨ紑퉎7h؉\"柀蝽z0့\"<?嘭$蜝?礲7岇槀묡?V钿T⣜v+솒灚ԛ2米mH?>薙婏聿3aFÆÝ": "2,ꓴg?_섦_>Y쪥션钺;=趘F~?D㨫\bX?㹤+>/믟kᠪ멅쬂Uzỵ]$珧`m雁瑊ඖ鯬cꙉ梢f묛bB",
+                                                                                                                                                                           "♽n$YjKiXX*GO贩鏃豮祴遞K醞眡}ꗨv嵎꼷0୸+M菋eH徸J꣆:⼐悥B켽迚㯃b諂\u000bjꠜ碱逮m8": [
+                                                                                                                                                                            "푷᣺ﻯd8ﱖ嬇ភH鹎⡱᱅0g:果6$GQ췎{vᷧYy-脕x偹砡館⮸C蓼ꏚ=軄H犠G谖ES詤Z蠂3l봟hᅭ7䦹1GPQG癸숟~[#駥8zQ뛣J소obg,",
+                                                                                                                                                                            null,
+                                                                                                                                                                            1513751096373485652,
+                                                                                                                                                                            null,
+                                                                                                                                                                            -6.851466660824754E-19,
+                                                                                                                                                                            {"䩂-⴮2ٰK솖풄꾚ႻP앳1H鷛wmR䗂皎칄?醜<\/&ࠧ㬍X濬䵈K`vJ륒Q/IC묛!;$vϑ": {
+                                                                                                                                                                             "@-ꚗxྐྵ@m瘬\u0010U絨ﮌ驐\\켑寛넆T=tQ㭤L연@脸삯e-:⩼u㎳VQ㋱襗ຓ<Ⅶ䌸cML3+\u001e_C)r\\9+Jn\\Pﺔ8蠱檾萅Pq鐳话T䄐I": -1.80683891195530061E18,
+                                                                                                                                                                             "ᷭዻU~ཷsgSJ`᪅'%㖔n5픆桪砳峣3獮枾䌷⊰呀": {
+                                                                                                                                                                              "Ş੉䓰邟自~X耤pl7间懑徛s첦5ਕXexh⬖鎥᐀nNr(J컗|ૃF\"Q겮葲놔엞^겄+㈆话〾희紐G'E?飕1f❼텬悚泬먐U睬훶Qs": false,
+                                                                                                                                                                              "(\u20dag8큽튣>^Y{뤋.袊䂓;_g]S\u202a꽬L;^'#땏bႌ?C緡<䝲䲝断ꏏ6\u001asD7IK5Wxo8\u0006p弊⼂ꯍ扵\u0003`뵂픋%ꄰ⫙됶l囏尛+䗅E쟇\\": [
+                                                                                                                                                                               true,
+                                                                                                                                                                               {
+                                                                                                                                                                                "\n鱿aK㝡␒㼙2촹f;`쾏qIࡔG}㝷䐍瓰w늮*粅9뒪ㄊCj倡翑閳R渚MiUO~仨䜶RꙀA僈㉋⦋n{㖥0딿벑逦⥻0h薓쯴Ꝼ": [
+                                                                                                                                                                                 5188716534221998369,
+                                                                                                                                                                                 2579413015347802508,
+                                                                                                                                                                                 9.010794400256652E-21,
+                                                                                                                                                                                 -6.5327297761238093E17,
+                                                                                                                                                                                 1.11635352494065523E18,
+                                                                                                                                                                                 -6656281618760253655,
+                                                                                                                                                                                 {
+                                                                                                                                                                                  "": ")?",
+                                                                                                                                                                                  "TWKLꑙ裑꺔UE俸塑炌Ũ᜕-o\"徚#": {"M/癟6!oI51ni퐚=댡>xꍨ\u0004 ?": {
+                                                                                                                                                                                   "皭": {"⢫䋖>u%w잼<䕏꘍P䋵$魋拝U䮎緧皇Y훂&|羋ꋕ잿cJ䨈跓齳5\u001a삱籷I꿾뤔S8㌷繖_Yឯ䲱B턼O歵F\\l醴o_欬6籏=D": [
+                                                                                                                                                                                    false,
+                                                                                                                                                                                    true,
+                                                                                                                                                                                    {"Mt|ꏞD|F궣MQ뵕T,띺k+?㍵i": [
+                                                                                                                                                                                     7828094884540988137,
+                                                                                                                                                                                     false,
+                                                                                                                                                                                     {
+                                                                                                                                                                                      "!༦鯠,&aﳑ>[euJꏽ綷搐B.h": -7648546591767075632,
+                                                                                                                                                                                      "-n켧嘰{7挐毄Y,>❏螵煫乌pv醑Q嶚!|⌝責0왾덢ꏅ蛨S\\)竰'舓Q}A釡5#v": 3344849660672723988,
+                                                                                                                                                                                      "8閪麁V=鈢1녈幬6棉⪮둌\u207d᚛驉ꛃ'r䆉惏ै|bἧﺢᒙ<=穊强s혧eꮿ慩⌡ \\槳W븧J檀C,ᘉ의0俯퀉M;筷ࣴ瓿{늊埂鄧_4揸Nn阼Jੵ˥(社": true,
+                                                                                                                                                                                      "o뼀vw)4A뢵(a䵢)p姃뛸\u000fK#KiQp\u0005ꅍ芅쏅": null,
+                                                                                                                                                                                      "砥$ꥸ┇耽u斮Gc{z빔깎밇\\숰\u001e괷各㶇쵿_ᴄ+h穢p촀Ნ䃬z䝁酳ӂ31xꔄ1_砚W렘G#2葊P ": [
+                                                                                                                                                                                       -3709692921720865059,
+                                                                                                                                                                                       null,
+                                                                                                                                                                                       [
+                                                                                                                                                                                        6669892810652602379,
+                                                                                                                                                                                        -135535375466621127,
+                                                                                                                                                                                        "뎴iO}Z? 馢녱稹ᄾ䐩rSt帤넆&7i騏멗畖9誧鄜'w{Ͻ^2窭외b㑎粖i矪ꦨ탪跣)KEㆹ\u0015V8[W?⽉>'kc$䨘ᮛ뉻٬M5",
+                                                                                                                                                                                        1.10439588726055846E18,
+                                                                                                                                                                                        false,
+                                                                                                                                                                                        -4349729830749729097,
+                                                                                                                                                                                        null,
+                                                                                                                                                                                        [
+                                                                                                                                                                                         false,
+                                                                                                                                                                                         "_蠢㠝^䟪/D녒㡋ỎC䒈판\u0006એq@O펢%;鹐쏌o戥~A[ꡉ濽ỳ&虃᩾荣唙藍茨Ig楡꒻M窓冉?",
+                                                                                                                                                                                         true,
+                                                                                                                                                                                         2.17220752996421728E17,
+                                                                                                                                                                                         -5079714907315156164,
+                                                                                                                                                                                         -9.960375974658589E-20,
+                                                                                                                                                                                         "ᾎ戞༒",
+                                                                                                                                                                                         true,
+                                                                                                                                                                                         false,
+                                                                                                                                                                                         [[
+                                                                                                                                                                                          "ⶉᖌX⧕홇)g엃⹪x뚐癟\u0002",
+                                                                                                                                                                                          -5185853871623955469,
+                                                                                                                                                                                          {
+                                                                                                                                                                                           "L㜤9ợㇶK鐰⋓V뽋˖!斫as|9"፬䆪?7胜&n薑~": -2.11545634977136992E17,
+                                                                                                                                                                                           "O8뀩D}캖q萂6༣㏗䈓煮吽ਆᎼDᣘ폛;": false,
+                                                                                                                                                                                           "YTᡅ^L㗎cbY$pᣞ縿#fh!ꘂb삵玊颟샞ဢ$䁗鼒몁~rkH^:닮먖츸륈⪺쒉砉?㙓扫㆕꣒`R䢱B酂?C뇞<5Iޚ讳騕S瞦z": null,
+                                                                                                                                                                                           "\\RB?`mG댵鉡幐物䵎有5*e骄T㌓ᛪ琾駒Ku\u001a[柆jUq8⋈5鿋츿myﻗ?雍ux঴?": 5828963951918205428,
+                                                                                                                                                                                           "n0晅:黯 xu씪^퓞cB㎊ᬍ⺘٤փ~B岚3㥕擄vᲂ~F?C䶖@$m~忔S왖㲚?챴⊟W#벌{'㰝I䝠縁s樘\\X뢻9핡I6菍ㄛ8쯶]wॽ0L\"q": null,
+                                                                                                                                                                                           "x增줖j⦦t䏢᎙㛿Yf鼘~꫓恄4惊\u209c": "oOhbᤃ᛽z&Bi犑\\3B㩬劇䄑oŁ쨅孥멁ຖacA㖫借㞝vg싰샂㐜#譞⢤@k]鋰嘘䜾L熶塥_<\/⍾屈ﮊ_mY菹t뙺}Ox=w鮮4S1ꐩמּ'巑",
+                                                                                                                                                                                           "㗓蟵ꂾe蠅匳(JP䗏෸\u0089耀왲": [{
+                                                                                                                                                                                            "ᤃ㵥韎뤽\r?挥O쯡⇔㞚3伖\u0005P⋪\"D궣QLn(⚘罩䩢Ŏv䤘尗뼤됛O淽鋋闚r崩a{4箙{煷m6〈": {
+                                                                                                                                                                                             "l곺1L": {
+                                                                                                                                                                                              "T'ਤ?砅|੬Km]䄩\"(࿶<\/6U爢䫈倔郴l2㴱^줣k'L浖L鰄Rp今鎗⒗C얨M훁㡧ΘX粜뫈N꤇輊㌻켑#㮮샶-䍗룲蠝癜㱐V>=\\I尬癤t=": 7648082845323511446,
+                                                                                                                                                                                              "鋞EP:<\/_`ၧe混ㇹBd⯢㮂驋\\q碽饩跓྿ᴜ+j箿렏㗑yK毢宸p謹h䦹乕U媣\\炤": [[
+                                                                                                                                                                                               "3",
+                                                                                                                                                                                               [
+                                                                                                                                                                                                true,
+                                                                                                                                                                                                3.4058271399411134E-20,
+                                                                                                                                                                                                true,
+                                                                                                                                                                                                "揀+憱f逮@먻BpW曉\u001a㣐⎊$n劈D枤㡞좾\u001aᛁ苔౩闝1B䷒Ṋ݋➐ꀞꐃ磍$t੤_:蘺⮼(#N",
+                                                                                                                                                                                                697483894874368636,
+                                                                                                                                                                                                [
+                                                                                                                                                                                                 "vᘯ锴)0訶}䳅⩚0O壱韈ߜ\u0018*U鍾䏖=䧉뽑单휻ID쿇嘗?ꌸῬ07",
+                                                                                                                                                                                                 -5.4858784319382006E18,
+                                                                                                                                                                                                 7.5467775182251151E18,
+                                                                                                                                                                                                 -8911128589670029195,
+                                                                                                                                                                                                 -7531052386005780140,
+                                                                                                                                                                                                 null,
+                                                                                                                                                                                                 [
+                                                                                                                                                                                                  null,
+                                                                                                                                                                                                  true,
+                                                                                                                                                                                                  [[{
+                                                                                                                                                                                                   "1欯twG<u䝮␽ꇣ_ჟﱴଶ-쪋\"?홺k:莝Ꜫ*⺵꽹댅釔좵}P?=9렿46b\u001c\\S?(筈僦⇶爷谰1ྷa": true,
+                                                                                                                                                                                                   "TҫJYxڪ\\鰔℮혡)m_WVi眪1[71><\/Q:0怯押殃탷聫사<ỗꕧ蚨䡁nDꌕ\u001c녬~蓩<N蹑\"{䫥lKc혁뫖앺:vⵑ": "g槵?",
+                                                                                                                                                                                                   "aꨩ뻃싥렌1`롗}Yg>鲃g儊>ꏡl㻿/⑷*챳6㻜W毤緛ﹺᨪ4\u0013뺚J髬e3쳸䘦伧?恪&{L掾p+꬜M䏊d娘6": {
+                                                                                                                                                                                                    "2p첼양棜h䜢﮶aQ*c扦v︥뮓kC寵횂S銩&ǝ{O*य़iH`U큅ࡓr䩕5ꄸ?`\\᧫?ᮼ?t〟崾훈k薐ì/iy꤃뵰z1<\/AQ#뿩8jJ1z@u䕥": 1.82135747285215155E18,
+                                                                                                                                                                                                    "ZdN &=d년ᅆ'쑏ⅉ:烋5&៏ᄂ汎来L㯄固{钧u\\㊏튚e摑&t嗄ꖄUb❌?m䴘熚9EW": [{
+                                                                                                                                                                                                     "ଛ{i*a(": -8.0314147546006822E17,
+                                                                                                                                                                                                     "⫾ꃆY\u000e+W`௸ \"M뒶+\\뷐lKE}(NT킶Yj選篒쁶'jNQ硾(똡\\\"逌ⴍy? IRꜘ὞鄬﨧:M\\f⠋Cꚜ쫊ᚴNV^D䕗ㅖἔIao꿬C⍏8": [
+                                                                                                                                                                                                      287156137829026547,
+                                                                                                                                                                                                      {
+                                                                                                                                                                                                       "H丞N逕<rO䎗:텕<\/䶩샌Sd%^ᵯ눐엑者g䖩똭蕮1U驣?Pⰰ\u001fp(W]67\u0015﫣6굺OR羸#촐F蒈;嘙i✵@_撶y㤏⤍(:᧗뼢༌朆@⏰㤨ꭲ?-n>⯲": {"": {
+                                                                                                                                                                                                        "7-;枮阕梒9ᑄZ": [[[[
+                                                                                                                                                                                                         null,
+                                                                                                                                                                                                         {
+                                                                                                                                                                                                          "": [[[[
+                                                                                                                                                                                                           -7.365909561486078E-19,
+                                                                                                                                                                                                           2948694324944243408,
+                                                                                                                                                                                                           null,
+                                                                                                                                                                                                           [
+                                                                                                                                                                                                            true,
+                                                                                                                                                                                                            "荒\"并孷䂡쵼9o䀘F\u0002龬7⮹Wz%厖/*? a*R枈㌦됾g뒠䤈q딄㺿$쮸tᶎ릑弣^鏎<\/Y鷇驜L鿽<\/춋9Mᲆឨ^<\/庲3'l낢",
+                                                                                                                                                                                                            "c鮦\u001b두\\~?眾ಢu݆綑෪蘛轋◜gȃ<\/ⴃcpkDt誩܅\"Y",
+                                                                                                                                                                                                            [[
+                                                                                                                                                                                                             null,
+                                                                                                                                                                                                             null,
+                                                                                                                                                                                                             [
+                                                                                                                                                                                                              3113744396744005402,
+                                                                                                                                                                                                              true,
+                                                                                                                                                                                                              "v(y",
+                                                                                                                                                                                                              {
+                                                                                                                                                                                                               "AQ幆h쾜O+꺷铀ꛉ練A蚗⼺螔j㌍3꽂楎䥯뎸먩?": null,
+                                                                                                                                                                                                               "蠗渗iz鱖w]擪E": 1.2927828494783804E-17,
+                                                                                                                                                                                                               "튷|䀭n*曎b✿~杤U]Gz鄭kW|㴚#㟗ഠ8u擨": [[
+                                                                                                                                                                                                                true,
+                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                {"⾪壯톽g7?㥜ώQꑐ㦀恃㧽伓\\*᧰閖樧뢇赸N휶䎈pI氇镊maᬠ탷#X?A+kНM ༑᩟؝?5꧎鰜ṚY즫궔 =ঈ;ﳈ?*s|켦蜌wM笙莔": [
+                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                 -3808207793125626469,
+                                                                                                                                                                                                                 [
+                                                                                                                                                                                                                  -469910450345251234,
+                                                                                                                                                                                                                  7852761921290328872,
+                                                                                                                                                                                                                  -2.7979740127017492E18,
+                                                                                                                                                                                                                  1.4458504352519893E-20,
+                                                                                                                                                                                                                  true,
+                                                                                                                                                                                                                  "㽙깹?먏䆢:䴎ۻg殠JBTU⇞}ꄹꗣi#I뵣鉍r혯~脀쏃#釯:场:䔁>䰮o'㼽HZ擓௧nd",
+                                                                                                                                                                                                                  [
+                                                                                                                                                                                                                   974441101787238751,
+                                                                                                                                                                                                                   null,
+                                                                                                                                                                                                                   -2.1647718292441327E-19,
+                                                                                                                                                                                                                   1.03602824249831488E18,
+                                                                                                                                                                                                                   [
+                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                    1.0311977941822604E-17,
+                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                    true,
+                                                                                                                                                                                                                    {
+                                                                                                                                                                                                                     "": -3.7019778830816707E18,
+                                                                                                                                                                                                                     "E峾恆茍6xLIm縂0n2视֯J-ᤜz+ᨣ跐mYD豍繹⹺䊓몓ﴀE(@詮(!Y膽#᎙2䟓섣A䈀㟎,囪QbK插wcG湎ꤧtG엝x⥏俎j'A一ᯥ뛙6ㅑ鬀": 8999803005418087004,
+                                                                                                                                                                                                                     "よ殳\\zD⧅%Y泥簳Uꈩ*wRL{3#3FYHା[d岀䉯T稉駅䞘礄P:闈W怏ElB㤍喬赔bG䠼U଄Nw鰯闀楈ePsDꥷ꭬⊊": [
+                                                                                                                                                                                                                      6.77723657904486E-20,
+                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                      [
+                                                                                                                                                                                                                       "ཚ_뷎꾑蹝q'㾱ꂓ钚蘞慵렜떆`ⴹ⎼櫯]J?[t9Ⓢ !컶躔I᮸uz>3a㠕i,錃L$氰텰@7녫W㸮?羧W뇧ꃞ,N鋮숪2ɼ콏┍䁲6",
+                                                                                                                                                                                                                       "&y?뢶=킕올Za惻HZk>c\u20b58i?ꦶcfBv잉ET9j䡡",
+                                                                                                                                                                                                                       "im珊Ճb칧<D-諂*u2ꡜ췛~䬢(텸ﵦ>校\\뼾쯀",
+                                                                                                                                                                                                                       9.555715121193197E-20,
+                                                                                                                                                                                                                       true,
+                                                                                                                                                                                                                       {
+                                                                                                                                                                                                                        "<㫚v6腓㨭e1㕔&&V∌ᗈT奄5Lጥ>탤?튣瑦㳆ꉰ!(ᙪ㿬擇_n쌯IMΉ㕨␰櫈ᱷ5풔蟹&L.첽e鰷쯃劼﫭b#ﭶ퓀7뷄Wr㢈๧Tʴશ㶑澕鍍%": -1810142373373748101,
+                                                                                                                                                                                                                        "fg晌o?߲ꗄ;>C>?=鑰監侯Kt굅": true,
+                                                                                                                                                                                                                        "䫡蓺ꑷ]C蒹㦘\"1ః@呫\u0014NL䏾eg呮፳,r$裢k>/\\<z": [[
+                                                                                                                                                                                                                         null,
+                                                                                                                                                                                                                         "C䡏>?ㄤᇰﻛ쉕1஥'Ċ\" \\_?쨔\"ʾr: 9S䘏禺ᪧꄂ㲄",
+                                                                                                                                                                                                                         [[{
+                                                                                                                                                                                                                          "*硙^+E쌺I1䀖ju?:⦈Ꞓl๴竣迃xKC/饉:\fl\"XTFᄄ蟭,芢<\/骡軺띜hꏘ\u001f銿<棔햳▨(궆*=乥b8\\媦䷀뫝}닶ꇭ(Kej䤑M": [{
+                                                                                                                                                                                                                           "1Ꮼ?>옿I╅C<ގ?ꊌ冉SV5A㢊㶆z-๎玶绢2F뵨@㉌뀌o嶔f9-庒茪珓뷳4": null,
+                                                                                                                                                                                                                           ";lᰳ": "CbB+肻a䄷苝*/볳+/4fq=㰁h6瘉샴4铢Y骐.⌖@哼猎㦞+'gꋸ㒕ߤ㞑(䶒跲ti⑴a硂#No볔",
+                                                                                                                                                                                                                           "t?/jE幸YHT셵⩎K!Eq糦ꗣv刴w\"l$ο:=6:移": {
+                                                                                                                                                                                                                            "z]鑪醊嫗J-Xm銌翁絨c里됏炙Ep㣋鏣똼嚌䀓GP﹖cmf4鹭T䅿꣭姧␸wy6ꦶ;S&(}ᎧKxᾂQ|t뻳k\"d6\"|Ml췆hwLt꼼4$&8Պ褵婶鯀9": {"嵃닢ᒯ'd᧫䳳#NXe3-붋鸿ଢ떓%dK\u0013䲎ꖍYV.裸R⍉rR3蟛\\:젯:南ĺLʆ넕>|텩鴷矔ꋅⒹ{t孶㓑4_": [
+                                                                                                                                                                                                                             true,
+                                                                                                                                                                                                                             null,
+                                                                                                                                                                                                                             [
+                                                                                                                                                                                                                              false,
+                                                                                                                                                                                                                              "l怨콈lᏒ",
+                                                                                                                                                                                                                              {
+                                                                                                                                                                                                                               "0w䲏嬧-:`䉅쉇漧\\܂yㄨb%㽄j7ᦶ涶<": 3.7899452730383747E-19,
+                                                                                                                                                                                                                               "ꯛTẀq纤q嶏V⿣?\"g}ი艹(쥯B T騠I=仵및X": {"KX6颠+&ᅃ^f畒y[": {
+                                                                                                                                                                                                                                "H?뱜^?꤂-⦲1a㋞&ꍃ精Ii᤾챪咽쬘唂쫷<땡劈훫놡o㥂\\ KⴙD秼F氮[{'좴:례晰Iq+I쭥_T綺砸GO煝䟪ᚪ`↹l羉q쐼D꽁ᜅ훦: vUV": true,
+                                                                                                                                                                                                                                "u^yﳍ0㱓#[y뜌앸ꊬL㷩?蕶蘾⻍KӼ": -7931695755102841701,
+                                                                                                                                                                                                                                "䤬轉車>\u001c鴵惋\"$쯃྆⇻n뽀G氠S坪]ಲꨍ捇Qxኻ椕駔\\9ࣼ﫻읜磡煮뺪ᶚ볝l㕆t+sζ": [[[
+                                                                                                                                                                                                                                 true,
+                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                 [
+                                                                                                                                                                                                                                  null,
+                                                                                                                                                                                                                                  3363739578828074923,
+                                                                                                                                                                                                                                  true,
+                                                                                                                                                                                                                                  {
+                                                                                                                                                                                                                                   "\"鸣詩 볰㑵gL㯦῅춝旫}ED辗ﮈI쀤-ꧤ|㠦Z\"娑ᕸ4爏騍㣐\"]쳝Af]茛⬻싦o蚁k䢯䩐菽3廇喑ޅ": 4.5017999150704666E17,
+                                                                                                                                                                                                                                   "TYႇ7ʠ值4챳唤~Zo&ݛ": false,
+                                                                                                                                                                                                                                   "`塄J袛㭆끺㳀N㺣`꽐嶥KﯝSVᶔ∲퀠獾N딂X\"ᤏhNﬨvI": {"\u20bb㭘I䖵䰼?sw䂷쇪](泒f\"~;꼪Fԝsᝦ": {"p,'ꉂ軿=A蚶?bƉ㏵䅰諬'LYKL6B깯⋩겦뎙(ᜭ\u0006噣d꾆㗼Z;䄝䚔cd<情@䞂3苼㸲U{)<6&ꩻ钛\u001au〷N숨囖愙j=BXW욕^x芜堏Ῑ爂뛷꒻t✘Q\b": [[
+                                                                                                                                                                                                                                    "籛&ଃ䩹.ꃩ㦔\\C颫#暪&!勹ꇶ놽攺J堬镙~軌C'꾖䣹㮅岃ᙴ鵣",
+                                                                                                                                                                                                                                    4.317829988264744E15,
+                                                                                                                                                                                                                                    6.013585322002147E-20,
+                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                    true,
+                                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                                    -3.084633632357326E-20,
+                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                                    {
+                                                                                                                                                                                                                                     "\"짫愔昻  X\"藣j\"\"먁ཅѻ㘤㬯0晲DU꟒㸃d벀윒l䦾c੻*3": null,
+                                                                                                                                                                                                                                     "谈Wm陧阦咟ฯ歖擓N喴㋐銭rCCnVࢥ^♼Ⅾ젲씗刊S༝+_t赔\\b䚍뉨ꬫ6펛cL䊘᜼<\/澤pF懽&H": [
+                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                       "W\"HDUuΌ퀟M'P4࿰H똆ⰱﮯ<\/凐蘲\"C鴫ﭒж}ꭩ쥾t5yd诪ﮡ퍉ⴰ@?氐醳rj4I6Qt": 6.9090159359219891E17,
+                                                                                                                                                                                                                                       "絛ﳛ⺂": {"諰P㗮聦`ZQ?ꫦh*റcb⧱}埌茥h{棩렛툽o3钛5鮁l7Q榛6_g)ὄ\u0013kj뤬^爖eO4Ⱈ槞鉨ͺ订%qX0T썗嫷$?\\\"봅늆'%": [
+                                                                                                                                                                                                                                        -2.348150870600346E-19,
+                                                                                                                                                                                                                                        [[
+                                                                                                                                                                                                                                         true,
+                                                                                                                                                                                                                                         -6619392047819511778,
+                                                                                                                                                                                                                                         false,
+                                                                                                                                                                                                                                         [[
+                                                                                                                                                                                                                                          -1.2929189982356161E-20,
+                                                                                                                                                                                                                                          1.7417192219309838E-19,
+                                                                                                                                                                                                                                          {"?嵲2࿐2\u0001啑㷳c縯": [
+                                                                                                                                                                                                                                           null,
+                                                                                                                                                                                                                                           [
+                                                                                                                                                                                                                                            false,
+                                                                                                                                                                                                                                            true,
+                                                                                                                                                                                                                                            2578060295690793218,
+                                                                                                                                                                                                                                            {
+                                                                                                                                                                                                                                             "?\"殃呎#㑑F": true,
+                                                                                                                                                                                                                                             "}F炊_殛oU헢兔Ꝉ,赭9703.B数gTz3⏬": {
+                                                                                                                                                                                                                                              "5&t3,햓Mݸᵣ㴵;꣫䩍↳#@뫷䠅+W-ࣇzᓃ鿕ಔ梭?T䮑ꥬ旴]u뫵막bB讍:왳둛lEh=숾鱠p咐$짏#?g⹷ᗊv㷵.斈u頻\u0018-G.": "뽙m-ouࣤ஫牷\"`Ksꕞ筼3HlȨvC堈\"I]㖡玎r먞#'W賜鴇k'c룼髋䆿飉㗆xg巤9;芔cጐ/ax䊨♢큓r吓㸫೼䢗da᩾\"]屣`",
+                                                                                                                                                                                                                                              ":M딪<䢥喠\u0013㖅x9蕐㑂XO]f*Q呰瞊吭VP@9,㨣 D\\穎vˤƩs㜂-曱唅L걬/롬j㈹EB8g<\/섩o渀\"u0y&룣": ">氍緩L/䕑돯Ꟙ蕞^aB뒣+0jK⪄瑨痜LXK^힦1qK{淚t츔X:Vm{2r獁B뾄H첚7氥?쉟䨗ꠂv팳圎踁齀\\",
+                                                                                                                                                                                                                                              "D彤5㢷Gꪻ[lㄆ@὜⓰絳[ଃ獽쮹☒[*0ꑚ㜳": 9022717159376231865,
+                                                                                                                                                                                                                                              "ҖaV銣tW+$魿\u20c3亜~뫡ᙰ禿쨽㏡fṼzE/h": "5臐㋇Ჯ쮺? 昨탰Wム밎#'\"崲钅U?幫뺀⍾@4kh>騧\\0ҾEV=爐͌U捀%ꉼ 㮋<{j]{R>:gԩL\u001c瀈锌ﯲﳡꚒ'⫿E4暍㌗뵉X\"H᝜",
+                                                                                                                                                                                                                                              "ᱚגּ;s醒}犍SἿ㦣&{T$jkB\\\tḮ앾䤹o<避(tW": "vb⯽䴪䮢@|)",
+                                                                                                                                                                                                                                              "⥒퐁껉%惀뗌+녣迺顀q條g⚯i⤭룐M琹j̈́⽜A": -8385214638503106917,
+                                                                                                                                                                                                                                              "逨ꊶZ<\/W⫟솪㎮ᘇb?ꠔi\"H㧺x෷韒Xꫨฟ|]窽\u001a熑}Agn?Mᶖa<rఄ4Ů䢤슲Axģe곖㴤x竾郍B謉鸵k薽M)\"芣眜`菉ꉛ䴺": "鹏^ె캫?3耲]|Ü1䡒㝮]8e?䶍^",
+                                                                                                                                                                                                                                              "뿸樅#P㡊1M룮Uꪭ绢ꑮZ9꽸": {"\nJ^є|3袄ㅐ7⨆銦y睝⋷仴ct?[,<\/ㅬ`?갔髞%揁A೚C": {
+                                                                                                                                                                                                                                               " 䇞3갫䅪": [{
+                                                                                                                                                                                                                                                "0|⩁㑂砕ㅻ": null,
+                                                                                                                                                                                                                                                "D箳᠉`|=⼭)\"*࣊㦏LjO誋": "",
+                                                                                                                                                                                                                                                "ࠚDZmꗥ}ᷴ╈r7헴ȥ4Kp5a)o}鎘门L搰䆓'✎k俎c#T68ӏ⩶6L鎴<r൦$黊BQY㼳\\跿F慮⡨拵贀!甶V喅/": null,
+                                                                                                                                                                                                                                                "ⵣq⳹ﻨLk]晩1*y\\$%}䖶P煑㇆䈦E嫁櫕Y࣓嫨䓏OL낮梚㸇洛洚BYtgl∛S☕䉓宑⋢粚ꔯ꠼붠": ")ꬑ윤`\"Ⱓ<\/婽*Y䔸ᓰ_ﳍt슲坩隥&S糧䛮闵诌豐sh쯽邴*섴؏͎=㯨\"RVힳ,^t\"ac?䤒ꉀxHa=Uꛕ㐙TkF껾",
+                                                                                                                                                                                                                                                "弾cUAF?暤c덽.欀nK앭]r傊䀓ﯳ馽垃[䥛oI0N砊鈥헅Co쟋钄ㅷ㊌뷚7": [
+                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                 "૓鏨?^䆏{\u0006`X䧵儱&롡尙砡\u0006뻝쑬sj▻XfᬶgcㄢV >9韲4$3Ỵ^=쏍煤ፐ돷2䣃%鷠/eQ9頸쥎",
+                                                                                                                                                                                                                                                 2398360204813891033,
+                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                 3.2658897259932633E-19,
+                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                 "?ꚃ8Nn㞷幵d䲳䱲뀙ꪛQ瑓鎴]䩋-鰾捡䳡??掊",
+                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                 -1309779089385483661,
+                                                                                                                                                                                                                                                 "ᦲxu_/yecR.6芏.ᜇ過 ~",
+                                                                                                                                                                                                                                                 -5658779764160586501,
+                                                                                                                                                                                                                                                 "쒌:曠=l썜䢜wk#s蕚\"互㮉m䉤~0듐䋙#G;h숄옥顇෤勹(C7㢅雚㐯L⠅VV簅<",
+                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                 -4.664877097240962E18,
+                                                                                                                                                                                                                                                 -4.1931322262828017E18,
+                                                                                                                                                                                                                                                 {
+                                                                                                                                                                                                                                                  ",": {
+                                                                                                                                                                                                                                                   "v㮟麑䄠뤵g{M띮.\u001bzt뢜뵡0Ǥ龍떟Ᾰ怷ϓRT@Lꀌ樂U㏠⾕e扉|bJg(뵒㠶唺~ꂿ(땉x⻫싉쁊;%0鎻V(o\f,N鏊%nk郼螺": -1.73631993428376141E18,
+                                                                                                                                                                                                                                                   "쟧摑繮Q@Rᕾ㭚㾣4隅待㓎3蒟": [
+                                                                                                                                                                                                                                                    4971487283312058201,
+                                                                                                                                                                                                                                                    8973067552274458613,
+                                                                                                                                                                                                                                                    {
+                                                                                                                                                                                                                                                     "`a揙ᣗ\u0015i<S幼訃锭B0&槩✨[Wp皩[g≊k葾x2ᡆ橲䲢W": true,
+                                                                                                                                                                                                                                                     "kH皈Sꁱq傑u?솹풑~o^F=劣N*reJ沤wW苯7p㼹䎐a=ꮧL㷩냴nWꌑ㞱uu谁lVN珿᤻(e豶5#L쪉ᅄ઄\u0015숟봊P瀚X蓎": false,
+                                                                                                                                                                                                                                                     "䫯דּ〖Sc䛭점L뵾pCꙞ\"엇즓_ﰛ톣ꫀ먩㺣㮠⭴!\\W┏t䖰軅y\u0014~ᇰ렢E7*俜䥪W䀩䷐h봆vjஉ묣༏G39.뼳輼:㮿ᐦA饕TUL}~": [
+                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                      8.8648298810470003E17,
+                                                                                                                                                                                                                                                      5.735561205600924E-20,
+                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                      -102555823658171644,
+                                                                                                                                                                                                                                                      1.2674932032973067E-19,
+                                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                                       "D胣O㯨\u0017Ku눓㒏텁nᨊ!Ꚇ廫_>Bo¸": 4.3236479112537999E18,
+                                                                                                                                                                                                                                                       "HW&퉡ぁ圍<W)6悰ꠑHEp14xy峑ft\u0005s亘V튉䢮ꦈX嵐꬝?lI_덝춇-6Ss噺Nk-ﮥ큃܁郪*PR(S6╋@仙V懸뺵ﯜV粹": "9䗌斀4㐈^Qs隄硏j\u0003",
+                                                                                                                                                                                                                                                       "Vk鶅C泹筁HX훉朗*r\\z顊誌儖4?n7᏾6몋䎡ﳈ],H頢p蚐㑄P4满E䏩V䬕ญL廂쒬쑨ꆷh迡ꍰ譖墎 ]鹿ฌ7ﶽ冭༽<ꈓS\\l䋮?_ユ檒?": -8598528325153980065,
+                                                                                                                                                                                                                                                       "t=q퍣疻тZ\\錅J.镎|nfḷ鴒1厰L灯纜E]୦⥪]Ꮾ'羝p/咩0닳ﳁqﳖཽk ?X1Ft%ś뭢v鋋⺃爵⒗": [[
+                                                                                                                                                                                                                                                        5.0824756359232045E-19,
+                                                                                                                                                                                                                                                        [
+                                                                                                                                                                                                                                                         7.268480839079619E-19,
+                                                                                                                                                                                                                                                         {"탿^굞⧕iј덊ꀛw껩6ꟳXs酚\\>Y?瑡Qy훍q!帰敏s舠㫸zꚗaS歲v`G株巷Jp6킼 (귶鍔⾏⡈>M汐㞍ቴ꙲dv@i㳓ᇆ?黍": [
+                                                                                                                                                                                                                                                          null,
+                                                                                                                                                                                                                                                          4997607199327183467,
+                                                                                                                                                                                                                                                          "E㻎蠫ᐾ高䙟蘬洼旾﫠텛㇛?'M$㣒蔸=A_亀绉앭rN帮",
+                                                                                                                                                                                                                                                          null,
+                                                                                                                                                                                                                                                          [{
+                                                                                                                                                                                                                                                           "Eᑞ)8<Z㡿W镀䛒C생V?0ꯦ+tL)`齳AjB姀XೳD빠㻲ƙgn9⑰ྍ῜&\"㚹>餧A5u&㗾q?": [
+                                                                                                                                                                                                                                                            -1.969987519306507E-19,
+                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                            [
+                                                                                                                                                                                                                                                             3.42437673373841E-20,
+                                                                                                                                                                                                                                                             true,
+                                                                                                                                                                                                                                                             "e걷M墁\"割P␛퍧厀R䱜3ﻴO퓫r﹉⹊",
+                                                                                                                                                                                                                                                             [
+                                                                                                                                                                                                                                                              -8164221302779285367,
+                                                                                                                                                                                                                                                              [
+                                                                                                                                                                                                                                                               true,
+                                                                                                                                                                                                                                                               null,
+                                                                                                                                                                                                                                                               "爘y^-?蘞Ⲽꪓa␅ꍨ}I",
+                                                                                                                                                                                                                                                               1.4645984996724427E-19,
+                                                                                                                                                                                                                                                               [{
+                                                                                                                                                                                                                                                                "tY좗⧑mrzﺝ㿥ⴖ᥷j諅\u0000q賋譁Ꞅ⮱S\nࡣB/큃굪3Zɑ复o<\/;롋": null,
+                                                                                                                                                                                                                                                                "彟h浠_|V4䦭Dᙣ♞u쿻=삮㍦\u001e哀鬌": [{"6횣楠,qʎꗇ鎆빙]㱭R굋鈌%栲j分僅ペ䇰w폦p蛃N溈ꡐꏀ?@(GI뉬$ﮄ9誁ꓚ2e甸ڋ[䁺,\u0011\u001cࢃ=\\+衪䷨ᯕ鬸K": [[
+                                                                                                                                                                                                                                                                 "ㅩ拏鈩勥\u000etgWVXs陂規p狵w퓼{뮵_i\u0002ퟑႢ⬐d6鋫F~챿搟\u0096䚼1ۼ칥0꣯儏=鋷牋ⅈꍞ龐",
+                                                                                                                                                                                                                                                                 -7283717290969427831,
+                                                                                                                                                                                                                                                                 true,
+                                                                                                                                                                                                                                                                 [
+                                                                                                                                                                                                                                                                  4911644391234541055,
+                                                                                                                                                                                                                                                                  {
+                                                                                                                                                                                                                                                                   "I鈒첽P릜朸W徨觘-Hᎄ퐟⓺>8kr1{겵䍃〛ᬡ̨O귑o䝕'쿡鉕p5": "fv粖RN瞖蛐a?q꤄\u001d⸥}'ꣴ犿ꦼ?뤋?鵆쥴덋䡫s矷̄?ඣ/;괱絢oWfV<\/\u202cC,㖦0䑾%n賹g&T;|lj_欂N4w",
+                                                                                                                                                                                                                                                                   "짨䠗;䌕u i+r๏0": [{"9䥁\\఩8\"馇z䇔<\/ႡY3e狚쐡\"ุ6ﰆZ遖c\"Ll:ꮾ疣<\/᭙O◌납୕湞9⡳Und㫜\u0018^4pj1;䧐儂䗷ୗ>@e톬": {
+                                                                                                                                                                                                                                                                    "a⑂F鋻Q螰'<퇽Q贝瀧{ᘪ,cP&~䮃Z?gI彃": [
+                                                                                                                                                                                                                                                                     -1.69158726118025933E18,
+                                                                                                                                                                                                                                                                     [
+                                                                                                                                                                                                                                                                      "궂z簽㔛㮨瘥⤜䛖Gℤ逆Y⪾j08Sn昞ꘔ캻禀鴚P謦b{ꓮmN靐Mᥙ5\"睏2냑I\u0011.L&=?6ᄠ뻷X鸌t刑\"#z)o꫚n쳟줋",
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      7517598198523963704,
+                                                                                                                                                                                                                                                                      "ኑQp襟`uᩄr方]*F48ꔵn俺ሙ9뇒",
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      6645782462773449868,
+                                                                                                                                                                                                                                                                      1219168146640438184,
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                                                       ")ယ넌竀Sd䰾zq⫣⏌ʥ\u0010ΐ' |磪&p牢蔑mV蘸૰짬꺵;K": [
+                                                                                                                                                                                                                                                                        -7.539062290108008E-20,
+                                                                                                                                                                                                                                                                        [
+                                                                                                                                                                                                                                                                         true,
+                                                                                                                                                                                                                                                                         false,
+                                                                                                                                                                                                                                                                         null,
+                                                                                                                                                                                                                                                                         true,
+                                                                                                                                                                                                                                                                         6574577753576444630,
+                                                                                                                                                                                                                                                                         [[
+                                                                                                                                                                                                                                                                          1.2760162530699766E-19,
+                                                                                                                                                                                                                                                                          [
+                                                                                                                                                                                                                                                                           null,
+                                                                                                                                                                                                                                                                           [
+                                                                                                                                                                                                                                                                            "顊\\憎zXB,",
+                                                                                                                                                                                                                                                                            [{
+                                                                                                                                                                                                                                                                             "㇆{CVC9-MN㜋ઘR눽#{h@ퟨ!鼚׼XOvXS\u0017ᝣ=cS+梽៲綆16s덽휐y屬?ᇳG2ᴭ\u00054쫖y룇nKcW̭炦s/鰘ᬽ?J|퓀髣n勌\u0010홠P>j": false,
+                                                                                                                                                                                                                                                                             "箴": [
+                                                                                                                                                                                                                                                                              false,
+                                                                                                                                                                                                                                                                              "鍞j\"ꮾ*엇칬瘫xṬ⭽쩁䃳\"-⋵?ᦽ<cਔ↎⩧%鱩涎삧u9K⦈\"῝ᬑV绩킯愌ṱv@GꝾ跶Ꚇ(?䖃vI᧊xV\r哦j㠒?*=S굤紴ꊀ鹭쬈s<DrIu솹꧑?",
+                                                                                                                                                                                                                                                                              {
+                                                                                                                                                                                                                                                                               ".}S㸼L?t\u000fK⑤s~hU鱜꘦}쪍C滈4ꓗ蛌):ྦ\"顥이⢷ῳYLn\"?fꘌ>댎Ĝ": true,
+                                                                                                                                                                                                                                                                               "Pg帯佃籛n㔠⭹࠳뷏≻࿟3㞱!-쒾!}쭪䃕!籿n涻J5ਲ਼yvy;Rኂ%ᔡጀ裃;M⣼)쵂쑈": 1.80447711803435366E18,
+                                                                                                                                                                                                                                                                               "ꈑC⡂ᑆ㤉壂뎃Xub<\/쀆༈憓ق쨐ק\\": [
+                                                                                                                                                                                                                                                                                7706977185172797197,
+                                                                                                                                                                                                                                                                                {"": {"K╥踮砆NWࡆFy韣7ä밥{|紒︧䃀榫rᩛꦡTSy잺iH8}ퟴ,M?Ʂ勺ᴹ@T@~꾂=I㙕뾰_涀쑜嫴曣8IY?ҿo줫fऒ}\\S\"ᦨ뵼#nDX": {
+                                                                                                                                                                                                                                                                                 "♘k6?଱癫d68?㽚乳䬳-V顷\u0005蝕?\u0018䞊V{邾zじl]雏k臤~ൖH뒐iꢥ]g?.G碄懺䔛p<q꜉S岗_.%": 7688630934772863849,
+                                                                                                                                                                                                                                                                                 "溗摽嗙O㧀,⡢⼰呠ꅧ㓲/葇䢛icc@-r\b渂ꌳ뻨饑觝ᖜ\\鮭\u0014엙㥀᧺@浹W2꛵{W률G溮킀轡䬆g㨑'Q聨៪网Hd\"Q늴ᱢﶨ邮昕纚枑?▰hr羌驀[痹<\/": [
+                                                                                                                                                                                                                                                                                  -1.0189902027934687E-19,
+                                                                                                                                                                                                                                                                                  {"窶椸릎뚻shE\"ꪗႥꎳU矖佟{SJ": [{"-慜x櫹XY-澐ܨ⣷ઢ鯙%Fu\u0000迋▒}᥷L嗭臖oញc넨\u0016/迎1b꯸g뢱㐧蓤䒏8C散삭|\"컪輩鹩\"\\g$zG䥽긷?狸꿭扵㲐:URON&oU8": [
+                                                                                                                                                                                                                                                                                   null,
+                                                                                                                                                                                                                                                                                   true,
+                                                                                                                                                                                                                                                                                   null,
+                                                                                                                                                                                                                                                                                   -2.8907335031148883E17,
+                                                                                                                                                                                                                                                                                   -3864019407187144121,
+                                                                                                                                                                                                                                                                                   {
+                                                                                                                                                                                                                                                                                    "`빬d⵺4H뜳⧈쓑ohஸ*㶐ﻇ⸕䠵!i䝬﹑h夘▥ꗐ푹갇㵳TA鳠嚵\\B<X}3訒c⋝{*﫢w]璨-g捭\\j໵侠Ei层\u0011": 3.758356090089446E-19,
+                                                                                                                                                                                                                                                                                    "䄘ﮐ)Y놞씃㾱陰큁:{\u2059/S⓴": [[
+                                                                                                                                                                                                                                                                                     null,
+                                                                                                                                                                                                                                                                                     [[
+                                                                                                                                                                                                                                                                                      -3.8256602120220546E-20,
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      7202317607724472882,
+                                                                                                                                                                                                                                                                                      "CWQ뚿",
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      false,
+                                                                                                                                                                                                                                                                                      true,
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      2857038485417498625,
+                                                                                                                                                                                                                                                                                      6.191302233218633E-20,
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      -6795250594296208046,
+                                                                                                                                                                                                                                                                                      [
+                                                                                                                                                                                                                                                                                       true,
+                                                                                                                                                                                                                                                                                       {
+                                                                                                                                                                                                                                                                                        "%ዧ遰Yᚯ⚀x莰愒Vᔈ턗BN洝ꤟA1⍌l콹풪H;OX๫륞쪐ᰚц@͎黾a邬<L厒Xb龃7f웨窂二;": [[
+                                                                                                                                                                                                                                                                                         null,
+                                                                                                                                                                                                                                                                                         "耲?䙧㘓F6Xs틭멢.v뚌?鄟恠▽'묺競?WvᆾCtxo?dZ;䨸疎",
+                                                                                                                                                                                                                                                                                         {
+                                                                                                                                                                                                                                                                                          "@hWꉁ&\"빜4礚UO~C;う殩_ꀥ蘁奢^챟k→ᡱKMⵉ<\/Jㅲ붉L͟Q": false,
+                                                                                                                                                                                                                                                                                          "tU뢂8龰I먽7,.Y搽Z툼=&⨥覽K乫햶㠸%#@Z끖愓^⍊⾂몒3E_噆J(廊ឭyd䞜鈬Ћ档'⣘I": {
+                                                                                                                                                                                                                                                                                           "tK*ꔵ銂u艗ԃ쿏∳ꄂ霫X3♢9y?=ⲭdЊb&xy}": [
+                                                                                                                                                                                                                                                                                            -4.097346784534325E-20,
+                                                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                                                            6016848468610144624,
+                                                                                                                                                                                                                                                                                            -8194387253692332861,
+                                                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                                                            {
+                                                                                                                                                                                                                                                                                             "(祬诀譕쯠娣c봝r?畄kT뼾⌘⎨?noV䏘쥝硎n?": [
+                                                                                                                                                                                                                                                                                              1.82679422844617293E18,
+                                                                                                                                                                                                                                                                                              [
+                                                                                                                                                                                                                                                                                               false,
+                                                                                                                                                                                                                                                                                               2.6849944122427694E18,
+                                                                                                                                                                                                                                                                                               true,
+                                                                                                                                                                                                                                                                                               [
+                                                                                                                                                                                                                                                                                                false,
+                                                                                                                                                                                                                                                                                                {
+                                                                                                                                                                                                                                                                                                 ";0z⭆;화$bਔ瀓\"衱^?잢ᢛ⣿~`ꕉ薸⌳໿湘腌'&:ryБꋥၼ꒥筙꬜긨?X": -3536753685245791530,
+                                                                                                                                                                                                                                                                                                 "c;Y7釚Uꃣ割J༨Y戣w}c峰뢨㽑㫈0N>R$䅒X觨l봜A刊8R梒',}u邩퉕?;91Ea䈈믁G⊶芔h袪&廣㺄j;㡏綽\u001bN頸쳘橆": -2272208444812560733,
+                                                                                                                                                                                                                                                                                                 "拑Wﵚj鵼駳Oࣿ)#㾅顂N傓纝y僱栜'Bꐍ-!KF*ꭇK¦?䈴^:啤wG逭w᧯": "xᣱmYe1ۏ@霄F$ě꧘푫O䤕퀐Pq52憬ꀜ兴㑗ᡚ?L鷝ퟐ뭐zJꑙ}╆ᅨJB]\"袌㺲u8䯆f",
+                                                                                                                                                                                                                                                                                                 "꿽၅㔂긱Ǧ?SI": -1669030251960539193,
+                                                                                                                                                                                                                                                                                                 "쇝ɨ`!葎>瞺瘡驷錶❤ﻮ酜=": -6961311505642101651,
+                                                                                                                                                                                                                                                                                                 "?f7♄꫄Jᡔ훮e읇퍾፣䭴KhखT;Qty}O\\|뫁IῒNe(5惁ꥶㆷY9ﮡ\\ oy⭖-䆩婁m#x봉>Y鈕E疣s驇↙ᙰm<": {"퉻:dꂁ&efᅫ쫢[\"돈늖꺙|Ô剐1͖-K:ʚ᭕/;쏖㷛]I痐职4g<Oꗢ뫺N쯂륬J╆.`ᇵP轆&fd$?苅o궓vO侃沲⍩嚅沗 E%⿰얦wi\\*趫": [
+                                                                                                                                                                                                                                                                                                  3504362220185634767,
+                                                                                                                                                                                                                                                                                                  false,
+                                                                                                                                                                                                                                                                                                  "qzX朝qT3軞T垈ꮲQ览ᚻ⻑쎎b驌䵆ꬠ5Fୗ䲁缿ꝁ蒇潇Ltᆄ钯蜀W欥ሺ",
+                                                                                                                                                                                                                                                                                                  "볰ɐ霬)젝鶼kwoc엷荁r \u001d쒷⎹8{%澡K늒?iﺩd=&皼倚J9s@3偛twὡgj䁠흪5⭉⨺役&놎cﺉ㺡N5",
+                                                                                                                                                                                                                                                                                                  false,
+                                                                                                                                                                                                                                                                                                  null,
+                                                                                                                                                                                                                                                                                                  "D0st[ni锹r*0k6ꀎ덇UX2⽼৞䃚粭#)Z桷36P]<\/`",
+                                                                                                                                                                                                                                                                                                  4281410120849816730,
+                                                                                                                                                                                                                                                                                                  null,
+                                                                                                                                                                                                                                                                                                  -3256922126984394461,
+                                                                                                                                                                                                                                                                                                  1.16174580369801549E18,
+                                                                                                                                                                                                                                                                                                  {
+                                                                                                                                                                                                                                                                                                   " ᆼꤗ~*TN긂<㡴턱℃酰^蘒涯잰淭傛2rൡet쾣䐇m*㸏y\"\\糮᧺qv쌜镜T@yg1譬ﭧﳭ\f": null,
+                                                                                                                                                                                                                                                                                                   "圾ᨿ0xᮛ禵ਗ਼D-㟻ẵ錚e\"赜.˶m)鴑B(I$<\/轴퉯揷⋏⏺*)宓쓌?*橯Lx\\f쩂㞼⇸\"ﺧ軂遳V\\땒\"캘c:G": null,
+                                                                                                                                                                                                                                                                                                   "?﵁_곢翸폈8㿠h열Q2㭛}RY㯕YT놂⽻e^B<\/맫ﻇ繱\u0017Gц⟊ᢑﵩS:jt櫣嗒⟰W㴚搦ᅉe[w䋺?藂翙Ⲱ芮䍘╢囥lpdu7r볺I 近qFyᗊ": [
+                                                                                                                                                                                                                                                                                                    "$b脬aᅠ襬育Bگ嵺Pw+'M<\/כֿn䚚v螁bN⒂}褺%lቦ阤\"ꓺᏗM牏,۞Ҷ!矬?ke9銊X괦)䈽틁脽ṫ䈞ᴆ^=Yᗿ遛4I귺⋥%",
+                                                                                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                                                                                    2.9444482723232051E18,
+                                                                                                                                                                                                                                                                                                    2072621064799640026,
+                                                                                                                                                                                                                                                                                                    "/_뇴뫢j㍒=Nꡦ↍Ժ赒❬톥䨞珯su*媸瀳鷔抡o흺-៳辏勷f绔:䵢搢2",
+                                                                                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                                                                                    "쒜 E䌐/큁\u0018懺_<\\隺&{wF⤊谼(<죽遠8?@*rᶊGd뻻갇&Ⳇq᣿e࢔t_ꩄ梸O詬C᧧Kꩠ풤9눙醅됞}竸rw?滨ӽK⥿ཊG魲']`๖5㄰",
+                                                                                                                                                                                                                                                                                                    -2375253967958699084,
+                                                                                                                                                                                                                                                                                                    {"嗱⿲\"f億ᝬ": {"v?䚑킡`◤k3,骥曘뒤Oᒱ㲹^圮᠀YT껛&촮P:G/T⣝#튣k3炩蠏k@橈䏷S䧕,熜晬k1鮥玸먚7䤡f绝嗚샴ᥒ~0q拮垑a뻱LⰖ_": [{
+                                                                                                                                                                                                                                                                                                     ":p尢": -6.688985172863383E17,
+                                                                                                                                                                                                                                                                                                     "A0\u0001疠ﻵ爻鼀湶I~W^岀mZx#㍈7r拣$Ꜷ疕≛⦒痋盩Vꬷ᭝ΩQꍪ療鈑A(劽詗ꭅo-獶鑺\"Ⓠ@$j탥;": [
+                                                                                                                                                                                                                                                                                                      8565614620787930994,
+                                                                                                                                                                                                                                                                                                      [
+                                                                                                                                                                                                                                                                                                       "嶗PC?උQ㪣$&j幾㾷h慑 즊慧⪉霄M窊ꁷ'鮕)䊏铨m趦䗲(g罣ЮKVﯦ鏮5囗ﰼ鿦",
+                                                                                                                                                                                                                                                                                                       -7168038789747526632,
+                                                                                                                                                                                                                                                                                                       null,
+                                                                                                                                                                                                                                                                                                       -7.8069738975270288E16,
+                                                                                                                                                                                                                                                                                                       2.25819579241348352E17,
+                                                                                                                                                                                                                                                                                                       -6.5597416611655936E18,
+                                                                                                                                                                                                                                                                                                       {
+                                                                                                                                                                                                                                                                                                        "瘕멦핓+?フZ귢z鍛V": {
+                                                                                                                                                                                                                                                                                                         "ᕾ": 1.7363275204701887E-19,
+                                                                                                                                                                                                                                                                                                         "㭌s뎹㳉": {"\u00187FI6Yf靺+UC쬸麁␲䂿긕R\\ᆮC?Φ耭\rOத际핅홦*베W㸫㯼᡹cㅜ|G㮗\u0013[o`?jHV앝?蒪꩚!퍫ᜦ㌇䚇鿘:@": [
+                                                                                                                                                                                                                                                                                                          "}푛Г콲<䟏C藐呈#2㓋#ྕ፟尿9q竓gI%랙mꍬoa睕贿J咿D_熏Zz皳験I豼B扳ḢQ≖㻹㱣D䝦練2'ᗍ㗣▌砲8罿%హF姦;0悇<\/\"p嚧",
+                                                                                                                                                                                                                                                                                                          -710184373154164247,
+                                                                                                                                                                                                                                                                                                          "Vo쫬⬾ꝫⴷŻ\u0004靎HBꅸ_aVBHbN>Z4⍜kเꛘZ⥺\\Bʫᇩ鄨魢弞&幟ᓮ2̊盜",
+                                                                                                                                                                                                                                                                                                          -9006004849098116748,
+                                                                                                                                                                                                                                                                                                          -3118404930403695681,
+                                                                                                                                                                                                                                                                                                          {
+                                                                                                                                                                                                                                                                                                           "_彃Y艘-\"Xx㤩㳷瑃?%2䐡鵛o<A?\"顜ᘌΈ;ⷅC洺L蚴蚀voq:,Oo4쪂)": 5719065258177391842,
+                                                                                                                                                                                                                                                                                                           "l륪맽耞塻論倐E㗑/㲕QM辬I\"qi酨玑㖪5q]尾魨鲡ƞY}⮯蠇%衟Fsf윔䐚찤i腳": {"ꢪ'a䣊糈": {"밑/♋S8s㼴5瓹O{댞\"9XﰇlJ近8}q{긧ⓈI᱑꿋腸D瀬H\"ﺬ'3?}\u0014#?丙㑯ᥨ圦',g鑠(樴턇?": [
+                                                                                                                                                                                                                                                                                                            2.5879275511391145E18,
+                                                                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                                                                            [
+                                                                                                                                                                                                                                                                                                             "3㼮ꔌ1Gẃ2W龙j͊{1囐㦭9x宠㑝oR䐕犽",
+                                                                                                                                                                                                                                                                                                             1268729930083267852,
+                                                                                                                                                                                                                                                                                                             "땕軚⿦7C",
+                                                                                                                                                                                                                                                                                                             [
+                                                                                                                                                                                                                                                                                                              -3.757935946502082E18,
+                                                                                                                                                                                                                                                                                                              "\"赌'糬_2뭾᝝b",
+                                                                                                                                                                                                                                                                                                              {
+                                                                                                                                                                                                                                                                                                               "(a䕎ጽjҰD4.ᴡ66ԃ畮<\/l`k癸\\㇋ࣆ욯R㫜픉녬挛;ڴ맺`.;焓q淞뮕ٹ趴r蔞ꯔ䟩v粏u5<\/pZ埖Skrvj帛=\u0005aa": null,
+                                                                                                                                                                                                                                                                                                               "璄≩ v몛ᘮ%?:1頌챀H㷪뉮k滘e": [
+                                                                                                                                                                                                                                                                                                                "ꤾ{`c샬왌펡[俊络vmz㪀悫⸹ᷥ5o'㾵 L蹦qjYIYណԠW냁剫<\/W嗂0,}",
+                                                                                                                                                                                                                                                                                                                2.4817616702666762E18,
+                                                                                                                                                                                                                                                                                                                false,
+                                                                                                                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                                                                                                                -8.6036958071260979E17,
+                                                                                                                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                                                                                                                -1.2744078022652468E-19,
+                                                                                                                                                                                                                                                                                                                -4.4752020268429594E17,
+                                                                                                                                                                                                                                                                                                                1.13672865156637872E17,
+                                                                                                                                                                                                                                                                                                                [
+                                                                                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                                                                                 -4.178004168554046E-20,
+                                                                                                                                                                                                                                                                                                                 true,
+                                                                                                                                                                                                                                                                                                                 2927542512798605527,
+                                                                                                                                                                                                                                                                                                                 {
+                                                                                                                                                                                                                                                                                                                  ".ꔓ뉤1䵬cHy汼䊆賓ᐇƩ|樷❇醎㬅4\u0003赵}#yD5膏晹뱓9ꖁ虛J㺕 t䊛膎ؤ": {
+                                                                                                                                                                                                                                                                                                                   "rVtᓸ5^`েN⹻Yv᥋lꌫt拘?<鮰넿ZC?㒽^": {"␪k_:>귵옔夘v*탋职&㳈챗|O钧": [
+                                                                                                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                                                                                                    "daꧺdᗹ羞쯧H㍤鄳頳<型孒ン냆㹀f4㹰\u000f|C*ሟ鰠(O<ꨭ峹ipຠ*y೧4VQ蔔hV淬{?ᵌEfrI_",
+                                                                                                                                                                                                                                                                                                                    "j;ꗣ밷邍副]ᗓ",
+                                                                                                                                                                                                                                                                                                                    -4299029053086432759,
+                                                                                                                                                                                                                                                                                                                    -5610837526958786727,
+                                                                                                                                                                                                                                                                                                                    [
+                                                                                                                                                                                                                                                                                                                     null,
+                                                                                                                                                                                                                                                                                                                     [
+                                                                                                                                                                                                                                                                                                                      -1.3958390678662759E-19,
+                                                                                                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                                                                                                       "lh좈T_믝Y\"伨\u001cꔌG爔겕ꫳ晚踍⿻읐T䯎]~e#฽燇\"5hٔ嶰`泯r;ᗜ쮪Q):/t筑,榄&5懶뎫狝(": [{
+                                                                                                                                                                                                                                                                                                                        "2ፁⓛ]r3C攟וּ9賵s⛔6'ஂ|\"ⵈ鶆䐹禝3\"痰ࢤ霏䵩옆䌀?栕r7O簂Isd?K᫜`^讶}z8?z얰T:X倫⨎ꑹ": -6731128077618251511,
+                                                                                                                                                                                                                                                                                                                        "|︦僰~m漿햭\\Y1'Vvخ굇ቍ챢c趖": [null]
+                                                                                                                                                                                                                                                                                                                       }],
+                                                                                                                                                                                                                                                                                                                       "虌魿閆5⛔煊뎰㞤ᗴꥰF䮥蘦䂪樳-K᝷-(^\u20dd_": 2.11318679791770592E17
+                                                                                                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                                                                                                    ]
+                                                                                                                                                                                                                                                                                                                   ]},
+                                                                                                                                                                                                                                                                                                                   "묗E䀳㧯᳀逞GMc\b墹㓄끖Ơ&U??펌鑍 媋k))ᄊ": null,
+                                                                                                                                                                                                                                                                                                                   "묥7콽벼諌J_DɯﮪM殴䣏,煚ྼ`Y:씧<\/⩫%yf䦀!1Ჶk춎Q米W∠WC跉鬽*ᛱi<?,l<崣炂骵*?8푐៣ⰵ憉⎑.,Nw罣q+ο컆弎": false
+                                                                                                                                                                                                                                                                                                                  },
+                                                                                                                                                                                                                                                                                                                  "e[|଀+lꑸ㝈TT?뿿|ꫛ9`㱯䊸楋-곳賨?쳁k棽擋wQ餈⟐Nq[q霩䵀뷮锅ꚢ": 5753148631596678144,
+                                                                                                                                                                                                                                                                                                                  "sᓝ鴻߸d렶ὕ蜗ဟ툑!诉౿": false,
+                                                                                                                                                                                                                                                                                                                  "|4䕳鵻?䈔(]틍/Ui#湻{듲ーMዀt7潔泄Ch⸨}쏣`螧銚㋼壯kⰥQ戵峉갑x辙'첛": "jd䘯$䕌茷!auw眶ㅥ䁣ꆢ民i",
+                                                                                                                                                                                                                                                                                                                  "剖駰ꞫsM2]ᾴ2ࡷ祅拌Av狔꩛'ꓗ킧ꣁ0酜✘O'": false,
+                                                                                                                                                                                                                                                                                                                  "澩뢣ꀁeU~D\\ꮡ킠": "v^YC嚈ί\u0007죋h>㴕L꘻ꀏ쓪\"_g鿄'#t⽙?,Wg㥖|D鑆e⥏쪸僬h鯔咼ඡ;4TK聎졠嫞"
+                                                                                                                                                                                                                                                                                                                 }
+                                                                                                                                                                                                                                                                                                                ]
+                                                                                                                                                                                                                                                                                                               ]
+                                                                                                                                                                                                                                                                                                              }
+                                                                                                                                                                                                                                                                                                             ]
+                                                                                                                                                                                                                                                                                                            ]
+                                                                                                                                                                                                                                                                                                           ]}}
+                                                                                                                                                                                                                                                                                                          }
+                                                                                                                                                                                                                                                                                                         ]}
+                                                                                                                                                                                                                                                                                                        },
+                                                                                                                                                                                                                                                                                                        "뿋뀾淣截䔲踀&XJ펖꙯^Xb訅ꫥgᬐ>棟S\"혧騾밫겁7-": "擹8C憎W\"쵮yR뢩浗絆䠣簿9䏈引Wcy䤶孖ꯥ;퐌]輩䍐3@{叝 뽸0ᡈ쵡Ⲇ\u001dL匁꧐2F~ݕ㪂@W^靽L襒ᦘ~沦zZ棸!꒲栬R"
+                                                                                                                                                                                                                                                                                                       }
+                                                                                                                                                                                                                                                                                                      ]
+                                                                                                                                                                                                                                                                                                     ],
+                                                                                                                                                                                                                                                                                                     "Z:덃൛5Iz찇䅄駠㭧蓡K1": "e8᧤좱U%?ⵇ䯿鿝\u0013縮R∱骒EO\u000fg?幤@֗퉙vU`",
+                                                                                                                                                                                                                                                                                                     "䐃쪈埽້=Ij,쭗쓇చ": false
+                                                                                                                                                                                                                                                                                                    }]}}
+                                                                                                                                                                                                                                                                                                   ]
+                                                                                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                                                                                 ]}
+                                                                                                                                                                                                                                                                                                }
+                                                                                                                                                                                                                                                                                               ]
+                                                                                                                                                                                                                                                                                              ]
+                                                                                                                                                                                                                                                                                             ],
+                                                                                                                                                                                                                                                                                             "咰긖VM]᝼6䓑쇎琺etDҌ?㞏ꩄ퇫밉gj8蠃\"⩐5䛹1ࣚ㵪": "ക蹊?⎲⧘⾚̀I#\"䈈⦞돷`wo窭戕෱휾䃼)앷嵃꾞稧,Ⴆ윧9S?೗EMk3Მ3+e{⹔Te驨7䵒?타Ulg悳o43"
+                                                                                                                                                                                                                                                                                            }
+                                                                                                                                                                                                                                                                                           ],
+                                                                                                                                                                                                                                                                                           "zQᤚ纂땺6#ٽ﹧v￿#ࠫ휊冟蹧텈ꃊʆ?&a䥯De潝|쿓pt瓞㭻啹^盚2Ꝋf醪,얏T窧\\Di䕎谄nn父ꋊE": -2914269627845628872,
+                                                                                                                                                                                                                                                                                           "䉩跐|㨻ᷢ㝉B{蓧瞸`I!℄욃힕#ೲᙾ竛ᔺCjk췒늕貭词\u0017署?W딚%(pꍁ⤼띳^=on뺲l䆼bzrﳨ[&j狸䠠=ᜑꦦ\u2061յnj=牲攑)M\\龏": false,
+                                                                                                                                                                                                                                                                                           "뎕y絬᫡⥮Ϙᯑ㌔/NF*˓.,QEzvK!Iwz?|쥾\"ꩻL꼗Bꔧ賴緜s뉣隤茛>ロ?(?^`>冺飒=噸泥⺭Ᲊ婓鎔븜z^坷裮êⓅ໗jM7ﶕ找\\O": 1.376745434746303E-19
+                                                                                                                                                                                                                                                                                          },
+                                                                                                                                                                                                                                                                                          "䐛r滖w㏤<k;l8ꡔጵ⮂ny辶⋃퍼僮z\"﮲X@t5෼暧퓞猋♅䦖QC鹮|픨( ,>,|Nዜ": false
+                                                                                                                                                                                                                                                                                         }
+                                                                                                                                                                                                                                                                                        ]],
+                                                                                                                                                                                                                                                                                        "@꿙?薕尬 gd晆(띄5躕ﻫS蔺4)떒錸瓍?~": 1665108992286702624,
+                                                                                                                                                                                                                                                                                        "w믍nᏠ=`঺ᅥC>'從됐槷䤝眷螄㎻揰扰XᅧC贽uჍ낟jKD03T!lDV쀉Ӊy뢖,袛!终캨G?鉮Q)⑗1쾅庅O4ꁉH7?d\u0010蠈줘월ސ粯Q!낇껉6텝|{": null,
+                                                                                                                                                                                                                                                                                        "~˷jg쿤촖쉯y": -5.5527605669177098E18,
+                                                                                                                                                                                                                                                                                        "펅Wᶺzꐆと푭e?4j仪열[D<鈑皶婆䵽ehS?袪;HꍨM뗎ば[(嗏M3q퍟g4y╸鰧茀[Bi盤~﫝唎鋆彺⦊q?B4쉓癚O洙킋툈䶯_?ퟲ": null
+                                                                                                                                                                                                                                                                                       }
+                                                                                                                                                                                                                                                                                      ]
+                                                                                                                                                                                                                                                                                     ]]
+                                                                                                                                                                                                                                                                                    ]],
+                                                                                                                                                                                                                                                                                    "꟱Ԕ㍤7曁聯ಃ錐V䷰?v㪃૦~K\"$%请|ꇹn\"k䫛㏨鲨\u2023䄢\u0004[<S8ᐬ뭩脥7U.m࿹:D葍┆2蘸^U'w1젅;䠆ꋪB껮>︊VJ?䶟ាꮈ䗱=깘U빩": -4863152493797013264
+                                                                                                                                                                                                                                                                                   }
+                                                                                                                                                                                                                                                                                  ]}]}
+                                                                                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                                                                                }}}
+                                                                                                                                                                                                                                                                               ],
+                                                                                                                                                                                                                                                                               "쏷쐲۹퉃~aE唙a챑,9㮹gLHd'䔏|킗㍞䎥&KZYT맵7䥺N<Hp4ꕭ⹠꽐c~皽z": "课|ᖾ䡁廋萄䐪W\u0016&Jn괝b~摓M>ⱳ同莞鿧w\\༌疣n/+ꎥU\"封랾○ퟙAJᭌ?9䛝$?驔9讐짘魡T֯c藳`虉C읇쐦T"
+                                                                                                                                                                                                                                                                              }
+                                                                                                                                                                                                                                                                             ],
+                                                                                                                                                                                                                                                                             "谶개gTR￐>ၵ͚dt晑䉇陏滺}9㉸P漄": -3350307268584339381
+                                                                                                                                                                                                                                                                            }]
+                                                                                                                                                                                                                                                                           ]
+                                                                                                                                                                                                                                                                          ]
+                                                                                                                                                                                                                                                                         ]]
+                                                                                                                                                                                                                                                                        ]
+                                                                                                                                                                                                                                                                       ],
+                                                                                                                                                                                                                                                                       "0y꟭馋X뱔瑇:䌚￐廿jg-懲鸭䷭垤㒬茭u賚찶ಽ+\\mT땱\u20821殑㐄J쩩䭛ꬿNS潔*d\\X,壠뒦e殟%LxG9:摸": 3737064585881894882,
+                                                                                                                                                                                                                                                                       "풵O^-⧧ⅶvѪ8廸鉵㈉ר↝Q㿴뺟EႳvNM:磇>w/៻唎뷭୥!냹D䯙i뵱貁C#⼉NH6`柴ʗ#\\!2䂗Ⱨf?諳.P덈-返I꘶6?8ꐘ": -8934657287877777844,
+                                                                                                                                                                                                                                                                       "溎-蘍寃i诖ര\"汵\"\ftl,?d⼡쾪⺋h匱[,෩I8MҧF{k瓿PA'橸ꩯ綷퉲翓": null
+                                                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                                                    ],
+                                                                                                                                                                                                                                                                    "ោ係؁<元": 1.7926963090826924E-18
+                                                                                                                                                                                                                                                                   }}]
+                                                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                                                                ]]}]
+                                                                                                                                                                                                                                                               }]
+                                                                                                                                                                                                                                                              ]
+                                                                                                                                                                                                                                                             ]
+                                                                                                                                                                                                                                                            ]
+                                                                                                                                                                                                                                                           ],
+                                                                                                                                                                                                                                                           "ጩV<\"ڸsOᤘ": 2.0527167903723048E-19
+                                                                                                                                                                                                                                                          }]
+                                                                                                                                                                                                                                                         ]}
+                                                                                                                                                                                                                                                        ]
+                                                                                                                                                                                                                                                       ]],
+                                                                                                                                                                                                                                                       "∳㙰3젴p᧗䱙?`<U὇<\/意E[ᮚAj诂ᒽ阚uv徢ဎ떗尔Ᵹ훀쩑J䐴?⪏=륪ᆩ푰ஓ㐕?럽VK\"X?檨လ齿I/耉A(AWA~⏯稐蹫": false,
+                                                                                                                                                                                                                                                       "偒妝뾇}䀼链i⇃%⋜&璪Ix渥5涧qq棩ᥝ-⠫AA낇yY颕A*裦O|n?䭬혗F": null,
+                                                                                                                                                                                                                                                       "琭CL얭B혆Kॎ`鎃nrsZiժW砏)?p~K~A眱䲏QO妣\u001b\u001b]ᵆᆯ&㐋ᏹ豉뺘$ꭧ#j=C)祤⫢歑1o㒙諩": 7028426989382601021,
+                                                                                                                                                                                                                                                       "쳱冲&ဤ䌏앧h胺-齱H忱8왪RDKᅒ䬋ᔶS*J}ስ漵'㼹뮠9걢9p봋경ጕtởꚳT䶽瘙%춴`@nಆ4<d??#僜ᙤ钴=薔ꭂbLXNam蹈": "樭る蹿= Uurwkn뙧⌲%\"쑃牪\"cq윕o@",
+                                                                                                                                                                                                                                                       "溌[H]焎SLㅁ?뀼䫨災W": 1.1714289118497062E-19,
+                                                                                                                                                                                                                                                       "ﬢp븇剌燇kĔ尘㶿㴞睠꾘Ia;s❺^)$穮?sHᢥ폪l": null
+                                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                                                   ]
+                                                                                                                                                                                                                                                  },
+                                                                                                                                                                                                                                                  "TKnzj5o<\/K㊗ꗣ藠⦪駇>yZA8Ez0,^ᙛ4_0븢\u001ft:~䎼s.bb룦明yNP8弆C偯;⪾짍'蕴뮛": -6976654157771105701,
+                                                                                                                                                                                                                                                  "큵ꦀ\\㇑:nv+뒤燻䀪ﴣ﷍9ᚈ኷K㚊誦撪䚛,ꮪxሲ쳊\u0005HSf?asg昱dqꬌVꙇ㼺'k*'㈈": -5.937042203633044E-20
+                                                                                                                                                                                                                                                 }
+                                                                                                                                                                                                                                                ]
+                                                                                                                                                                                                                                               }],
+                                                                                                                                                                                                                                               "?}\u20e0],s嶳菋@#2u쒴sQS䩗=ꥮ;烌,|ꘔ䘆": "ᅩ영N璠kZ먕眻?2ቲ芋眑D륟渂⸑ﴃIRE]啗`K'"
+                                                                                                                                                                                                                                              }},
+                                                                                                                                                                                                                                              "쨀jmV賂ﰊ姐䂦玞㬙ᏪM᪟Վ씜~`uOn*ॠ8\u000ef6??\\@/?9見d筜ﳋB|S䝬葫㽁o": true
+                                                                                                                                                                                                                                             },
+                                                                                                                                                                                                                                             "즛ꄤ酳艚␂㺘봿㎨iG৕ࡿ?1\"䘓您\u001fSኝ⺿溏zៀ뻤B\u0019?윐a䳵᭱䉺膷d:<\/": 3935553551038864272
+                                                                                                                                                                                                                                            }
+                                                                                                                                                                                                                                           ]
+                                                                                                                                                                                                                                          ]}
+                                                                                                                                                                                                                                         ]]
+                                                                                                                                                                                                                                        ]]
+                                                                                                                                                                                                                                       ]}
+                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                                   ]]}},
+                                                                                                                                                                                                                                   "᥺3h↛!ꋰy\"攜(ெl䪕oUkc1A㘞ᡲ촾ᣫ<\/䒌E㛝潨i{v?W౾H\\RჅpz蝬R脾;v:碽✘↯삞鷱o㸧瑠jcmK7㶧뾥찲n": true,
+                                                                                                                                                                                                                                   "ⶸ?x䊺⬝-䰅≁!e쩆2ꎿ准G踌XXᩯ1߁}0?.헀Z馟;稄\baDꟹ{-寪⚈ꉷ鮸_L7ƽᾚ<\u001bጨA䧆송뇵⨔\\礍뗔d设룱㶉cq{HyぱR㥽吢ſtp": -7985372423148569301,
+                                                                                                                                                                                                                                   "緫#콮IB6<\/=5Eh礹\t8럭@饹韠r㰛斣$甝LV췐a갵'请o0g:^": "䔨(.",
+                                                                                                                                                                                                                                   "띳℡圤pン௄ĝ倧訜B쁟G䙔\"Sb⓮;$$▏S1J뢙SF|赡g*\"Vu䲌y": "䪈&틐),\\kT鬜1풥;뷴'Zေ䩹@J鞽NぼM?坥eWb6榀ƩZڮ淽⺞삳煳xჿ絯8eⶍ羷V}ჿ쎱䄫R뱃9Z>'\u20f1ⓕ䏜齮"
+                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                                ]]]
+                                                                                                                                                                                                                               }}
+                                                                                                                                                                                                                              }
+                                                                                                                                                                                                                             ]
+                                                                                                                                                                                                                            ]},
+                                                                                                                                                                                                                            "펮b.h粔폯2npX詫g錰鷇㇒<쐙S値bBi@?镬矉`剔}c2壧ଭfhY깨R()痩⺃a\\⍔?M&ﯟ<劜꺄멊ᄟA\"_=": null
+                                                                                                                                                                                                                           },
+                                                                                                                                                                                                                           "~潹Rqn榢㆓aR鬨侅?䜑亡V_翅㭔(䓷w劸ၳDp䀅<\/ﰎ鶊m䵱팱긽ꆘ<tD쇋>긓准D3掱;o:_ќ)껚콥8곤d矦8nP倥ꃸI": null,
+                                                                                                                                                                                                                           "뾎/Q㣩㫸벯➡㠦◕挮a鶧⋓偼\u00001뱓fm覞n?㛅\"": 2.8515592202045408E17
+                                                                                                                                                                                                                          }],
+                                                                                                                                                                                                                          ",": -5426918750465854828,
+                                                                                                                                                                                                                          "2櫫@0柡g䢻/gꆑ6演&D稒肩Y?艘/놘p{f투`飷ᒉ챻돎<늛䘍ﴡ줰쫄": false,
+                                                                                                                                                                                                                          "8(鸑嵀⵹ퟡ<9㣎Tߗ┘d슒ل蘯&㠦뮮eࠍk砝g 엻": false,
+                                                                                                                                                                                                                          "d-\u208b?0ﳮ嵙'(J`蔿d^踅⤔榥\\J⵲v7": 6.8002426206715341E17,
+                                                                                                                                                                                                                          "ཎ耰큓ꐕ㱷\u0013y=詽I\"盈xm{0쾽倻䉚ષso#鰑/8㸴짯%ꀄ떸b츟*\\鲷礬ZQ兩?np㋄椂榨kc᡹醅3": false,
+                                                                                                                                                                                                                          "싊j20": false
+                                                                                                                                                                                                                         }]]
+                                                                                                                                                                                                                        ]],
+                                                                                                                                                                                                                        "俛\u0017n緽Tu뫉蜍鼟烬.ꭠIⰓ\"Ἀ᜾uC쎆J@古%ꛍm뻨ᾀ画蛐휃T:錖㑸ዚ9죡$": true
+                                                                                                                                                                                                                       }
+                                                                                                                                                                                                                      ]
+                                                                                                                                                                                                                     ],
+                                                                                                                                                                                                                     "㍵⇘ꦖ辈s}㱮慀밒s`\"㞟j:`i픻Z<C1衽$\"-饧?℃\u0010⼒{p飗%R\"䲔\")칀\\%": true,
+                                                                                                                                                                                                                     "苧.8\u00120ݬ仓": 6912164821255417986,
+                                                                                                                                                                                                                     "떎顣俁X;.#Q틝.笂'p쟨唒퐏랩냆¦aⱍ{谐.b我$蜑SH\u000f琾=䟼⣼奔ᜏ攕B&挰繗㝔ꅂ-Qv\\0䶝䚥ぺio[㑮-ᇼ䬰컪ṼiY){데\u0010q螰掻~\n輚x\u0014罺)軴": 3.024364150712629E-20
+                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                   ]
+                                                                                                                                                                                                                  ]
+                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                ]}
+                                                                                                                                                                                                               ]]
+                                                                                                                                                                                                              }
+                                                                                                                                                                                                             ]
+                                                                                                                                                                                                            ]]
+                                                                                                                                                                                                           ]
+                                                                                                                                                                                                          ]]]],
+                                                                                                                                                                                                          "\"凲o肉Iz絾豉J8?i~傠᫽䇂!WD溊J?ᡒvs菆嵹➒淴>섫^諎0Ok{켿歁෣胰a2﨤[탳뚬쎼嫭뉮m": 409440660915023105,
+                                                                                                                                                                                                          "w墄#*ᢄ峠밮jLa`ㆪ꺊漓Lで끎!Agk'ꁛ뢃㯐岬D#㒦": false,
+                                                                                                                                                                                                          "ଦPGI䕺L몥罭ꃑ궩﮶#⮈ᢓӢ䚬p7웼臧%~S菠␌힀6&t䳙y㪘냏\\*;鉏ᅧ鿵'嗕pa\"oL쇿꬈Cg": "㶽1灸D⟸䴅ᆤ뉎﷛渤csx 䝔цꬃ锚捬?ຽ+x~꘩uI࡞\u0007栲5呚ẓem?袝\")=㥴䨃pac!/揎Y",
+                                                                                                                                                                                                          "ᷱo\\||뎂몷r篙|#X䦜I#딌媸픕叞RD斳X4t⯩夬=[뭲r=绥jh뷱츝⪘%]⚋܈㖴スH텹m(WO曝劉0~K3c柢Ր㏉着逳~": false,
+                                                                                                                                                                                                          "煽_qb[첑\\륌wE❽ZtCNﭝ+餌ᕜOꛭ": "{ﳾ쉌&s惧ᭁⵆ3䢫;䨞팑꒪흘褀࢖Q䠿V5뭀䎂澻%받u5텸oA⮥U㎦;B䳌wz䕙$ឿ\\௅婺돵⪾퐆\\`Kyौꋟ._\u0006L챯l뇠Hi䧈偒5",
+                                                                                                                                                                                                          "艊佁ࣃ롇䱠爬!*;⨣捎慓q靓|儑ᨋL+迥=6㒺딉6弄3辅J-㕎뛄듘SG㆛(\noAzQꝱ䰩X*ぢO퀌%펠낌mo틮a^<\/F&_눊ᾉ㨦ы4\"8H": 2974648459619059400,
+                                                                                                                                                                                                          "鬙@뎣䫳ၮ끡?){y?5K;TA*k溱䫜J汃ꂯ싔썍\u001dA}룖(<\/^,": false,
+                                                                                                                                                                                                          "몏@QꋦFꊩᒐ뎶lXl垨4^郣|ꮇ;䝴ᝓ}쵲z珖": null
+                                                                                                                                                                                                         }
+                                                                                                                                                                                                        ]]]],
+                                                                                                                                                                                                        ":_=닧弗D䙋暨鏛. 㱻붘䂍J儒&ZK/녩䪜r囁⽯D喠죥7⹌䪥c\u001a\u2076￞妈朹oLk菮F౟覛쐧㮏7T;}蛙2{9\"崓bB<\/⡷룀;즮鿹)丒툃୤뷠5W⊢嶜(fb뭳갣": "E{响1WM"
+                                                                                                                                                                                                       }},
+                                                                                                                                                                                                       "䘨tjJ驳豨?y輊M*᳑梵瞻઻ofQG瑮e": 2.222802939724948E-19,
+                                                                                                                                                                                                       "䮴=❑➶T෋w䞜\"垦ꃼUt\u001dx;B$뵣䙶E↌艣ᡥ!᧟;䱀[䔯k쬃`੍8饙른熏'2_'袻tGf蒭J땟as꯳╖&啒zWࡇᒫYSᏬ\u0014ℑ첥鈤|cG~Pᓮ\">\"": "ႆl\f7V儊㦬nHꄬꨧC{쐢~C⮃⛓嶦vꄎ1w鰠嘩뿠魄&\"_qMⵖ釔녮ꝇ 㝚{糍J哋 cv?-jkﻯྌ鹑L舟r",
+                                                                                                                                                                                                       "龧葆yB✱H盋夔ﶉ?n*0(": "ꧣኆ㢓氥qZZ酒ຜ)鮢樛)X䣆gTSґG텞k.J圬疝롫쯭z L:\\ྤ@w炋塜쿖ᾳy뢀䶃뱝N䥨㚔勇겁#p",
+                                                                                                                                                                                                       "도畎Q娡\"@S/뼋:䵏!P衅촚fVHQs✜ᐫi㻑殡B䜇%믚k*U#濨낄~": "ꍟዕ쳸ꍈ敋&l妏\u0005憡멗瘌uPgᅪm<\/To쯬锩h뒓k"
+                                                                                                                                                                                                      }
+                                                                                                                                                                                                     ]
+                                                                                                                                                                                                    }],
+                                                                                                                                                                                                    "墥홞r绚<\/⸹ⰃB}<躅\\Y;๑@䔸>韫䜲뱀X뗩鿥쩗SI%ﴞ㳕䛇?<\/\u00018x\\&侂9鋙a[LR㋭W胕)⡿8㞙0JF,}?허d1cDMᐃ␛鄝ⱕ%X)!XQ": "ⳍꗳ=橇a;3t⦾꼑仈ူaᚯ⯋ꕃAs鴷N⍕_䎃ꙎAz\u0016䯷\\<࿫>8q{}キ?ᣰ}'0ᴕ펓B┦lF#趤厃T?㕊#撹圂䆲"
+                                                                                                                                                                                                   },
+                                                                                                                                                                                                   "܋닐龫論c웑": false,
+                                                                                                                                                                                                   "ㇿ/q\"6-co髨휝C큦#\u001b4~?3䐹E삇<<": 7.600917488140322E-20,
+                                                                                                                                                                                                   "䁝E6?㣖ꃁ间t祗*鑠{ḣV(浾h逇큞=W?ૉ?nꇽ8ꅉຉj으쮺@Ꚅ㰤u]Oyr": "v≁᫸_*όAඤԆl)ۓᦇQ}폠z༏q滚",
+                                                                                                                                                                                                   "ソ᥊/넺I": true
+                                                                                                                                                                                                  }]]
+                                                                                                                                                                                                 ]
+                                                                                                                                                                                                ]
+                                                                                                                                                                                               ]
+                                                                                                                                                                                              ]]
+                                                                                                                                                                                             },
+                                                                                                                                                                                             "䭑Ik攑\u0002QV烄:芩.麑㟴㘨≕": true,
+                                                                                                                                                                                             "坄꿕C쇻풉~崍%碼\\8\"䬦꣙": null,
+                                                                                                                                                                                             "欌L圬䅘Y8c(♺2?ON}o椳s宥2䉀eJ%闹r冁O^K諭%凞⺉⡻,掜?$ꥉ?略焕찳㯊艼誜4?\"﯎<゛XፈINT:詓 +": -1.0750456770694562E-19,
+                                                                                                                                                                                             "獒àc뜭싼ﺳ뎤K`]p隨LtE": null,
+                                                                                                                                                                                             "甙8䵊神EIꩤ鐯ᢀ,ﵮU䝑u疒ử驺䚿≚ഋ梶秓F`覤譐#짾蔀묊4<媍쬦靪_Yzgcࡶ4k紥`kc[Lﮗ簐*I瀑[⾰L殽鑥_mGȠ<\/|囹灠g桰iri": true,
+                                                                                                                                                                                             "챓ꖙꟻ좝菇ou,嗠0\\jK핻뜠qwQ?ഩ㼕3Y彦b\u009bJ榶N棨f?됦鏖綃6鳵M[OE봨u햏.Ꮁ癜蟳뽲ꩌ뻾rM豈R嗀羫 uDꎚ%": null
+                                                                                                                                                                                            },
+                                                                                                                                                                                            "V傜2<": 7175127699521359521
+                                                                                                                                                                                           }],
+                                                                                                                                                                                           "铫aG切<\/\"ী⊆e<^g࢛)D顝nאַ饼\u008c猪繩嵿ﱚCꡬ㻊g엺A엦\u000f暿_f꿤볝㦕桦`蒦䎔j甬%岝rj 糏": "䚢偎눴Au<4箞7礦Iﱔ坠eȧ䪸u䵁p|逹$嗫쨘ꖾ﷐!胠z寓팢^㨔|u8Nሇe텔ꅦ抷]،鹎㳁#༔繁 ",
+                                                                                                                                                                                           "낂乕ꃻ볨ϱ-ꇋ㖍fs⿫)zꜦ/K?솞♞ꑌ宭hJ᤭瑥Fu": false,
+                                                                                                                                                                                           "쟰ぜ魛G\u0003u?`㾕ℾ㣭5螠烶這趩ꖢ:@咕ꐶx뒘느m䰨b痃렐0鳊喵熬딃$摉_~7*ⱦ녯1錾GKhJ惎秴6'H妈Tᧅ窹㺒疄矤铟wላ": null,
+                                                                                                                                                                                           "쯆q4!3錕㲏ⵆ㇛꘷Z瑩뭆\\◪NH\u001d\\㽰U~㯶<\"쑣낞3ᵤ'峉eꢬ;鬹o꣒木X*長PXᘱu\"䠹n惞": null,
+                                                                                                                                                                                           "ᅸ祊\"&ꥴCjࢼ﴿?䡉`U效5殼㮞V昽ꏪ#ﺸ\\&t6x꠹盥꣰a[\u001aꪍSpe鎿蠹": -1.1564713893659811E-19
+                                                                                                                                                                                          }
+                                                                                                                                                                                         ]]
+                                                                                                                                                                                        ]
+                                                                                                                                                                                       ]
+                                                                                                                                                                                      ],
+                                                                                                                                                                                      "羵䥳H,6ⱎ겾|@t\"#햊1|稃 섭)띜=뻔ꡜ???櫎~*ῡ꫌/繣ﻠq": null
+                                                                                                                                                                                     }
+                                                                                                                                                                                    ]}
+                                                                                                                                                                                   ]},
+                                                                                                                                                                                   "츤": false
+                                                                                                                                                                                  }},
+                                                                                                                                                                                  "s": 3.7339341963399598E18
+                                                                                                                                                                                 }
+                                                                                                                                                                                ],
+                                                                                                                                                                                "N,I?1+㢓|ࣱ嶃쩥V2\u0012(4EE虪朶$|w颇v步": "~읢~_,Mzr㐫YB溓E淚\"ⅹ䈔ᏺ抙 b,nt5V㐒J檶ꏨ⻔?",
+                                                                                                                                                                                "Q껑ꡡ}$넎qH煔惍/ez^!ẳF댙䝌馻剁8": "梲;yt钰$i冄}AL%a j뜐奷걳뚾d꿽*ሬuDY3?뮟鼯뮟w㍪틱V",
+                                                                                                                                                                                "o{Q/K O胟㍏zUdꀐm&⨺J舕⾏魸訟㌥[T籨櫉唐킝 aṭ뱫촙莛>碶覆⧬짙쭰ׯdAiH໥벤퐥_恸[ 0e:죃TC弼荎뵁DA:w唵ꣁ": null,
+                                                                                                                                                                                "὏樎䵮軧|?౗aWH쩃1 ꅭsu": null
+                                                                                                                                                                               }
+                                                                                                                                                                              ]
+                                                                                                                                                                             },
+                                                                                                                                                                             "勂\\&m鰈J釮=Ⲽ鳋+䂡郑": null,
+                                                                                                                                                                             "殣b綊倶5㥗惢⳷萢ᑀ䬄镧M^ﱴ3⣢翣n櫻1㨵}ኯ뗙顖Z.Q➷ꮨ뗇\u0004": "ꔙ䁼>n^[GीA䨟AM琢ᒊS쨲w?d㶣젊嘶纝麓+愣a%気ྞSc됓ᔘ:8bM7Xd8㶑臌]Ꙥ0ꐭ쒙䫣挵C薽Dfⵃ떼᷸",
+                                                                                                                                                                             "?紡.셪_෨j\u0013Ox┠$Xᶨ-ᅇo薹-}軫;y毝㪜K㣁?.EV쮱4둽⛻䤜'2盡\u001f60(|e쐰㼎ᦀ㒧-$l@ﻑ坳\u0003䭱响巗WFo5c㧆T턁Y맸♤(": -2.50917882560589088E17
+                                                                                                                                                                            }}
+                                                                                                                                                                           ],
+                                                                                                                                                                           "侸\\릩.᳠뎠狣살cs项䭩畳H1s瀉븇19?.w骴崖㤊h痠볭㞳㞳䁮Ql怠㦵": "@䟴-=7f",
+                                                                                                                                                                           "鹟1x௢+d ;vi䭴FSDS\u0004hꎹ㚍?⒍⦏ў6u,扩@됷Su)Pag휛TᒗV痩!瞏釀ꖞ蘥&ೞ蘐ꭰꞇᝎ": "ah懱Ժ&\u20f7䵅♎඀䞧鿪굛ౕ湚粎蚵ᯋ幌YOE)५襦㊝Y*^\"R+ඈ咷蝶9ꥂ榨艦멎헦閝돶v좛咊E)K㓷ྭr",
+                                                                                                                                                                           "搆q쮦4綱켙셁.f4<\/g<籽늷?#蚴픘:fF\u00051㹉뀭.ᰖ풎f֦Hv蔎㧤.!䭽=鞽]음H:?\"-4": 8.740133984938656E-20
+                                                                                                                                                                          }]}
+                                                                                                                                                                         }
+                                                                                                                                                                        ],
+                                                                                                                                                                        "tVKn딩꘥⊾蹓᤹{\u0003lR꼽ᄲQFᅏ傅ﱋ猢⤊ᔁ,E㓒秤nTතv`♛I\u0000]꫔ṞD\"麵c踝杰X&濿또꣹깳౥葂鿎\\aꡨ?": 3900062609292104525
+                                                                                                                                                                       }
+                                                                                                                                                                      ],
+                                                                                                                                                                      "ਉ샒⊩Lu@S䧰^g": -1.1487677090371648E18,
+                                                                                                                                                                      "⎢k⑊꬗yᏫ7^err糎Dt\u000bJ礯확ㆍ沑サꋽe赔㝢^J\u0004笲㿋idra剰-᪉C錇/Ĝ䂾ညS지?~콮gR敉⬹'䧭": 1901472137232418266,
+                                                                                                                                                                      "灗k䶥:?촽贍쓉꓈㒸g獘[뵎\\胕?\u0014_榙p.j稶,$`糉妋0>Fᡰly㘽$?": "]ꙛO赎&#㠃돱剳\"<◆>0誉齐_|z|裵씪>ᐌ㼍\"Z[琕}O?G뚇諦cs⠜撺5cu痑U圲\u001c?鴴計l춥/╓哼䄗茏ꮅ뫈댽A돌롖뤫V窗讬sHd&\nOi;_u"
+                                                                                                                                                                     }
+                                                                                                                                                                    ],
+                                                                                                                                                                    "Uﺗ\\Y\\梷䄬~\u0002": null,
+                                                                                                                                                                    "k\"Y磓ᗔ휎@U冈<\/w컑)[": false,
+                                                                                                                                                                    "曏J蝷⌻덦\u001f㙳s꥓⍟邫P늮쥄c∬ྡྷ舆렮칤Z趣5콡넛A쳨\\뀙骫(棻.*&輛LiIfi{@EA婳KᬰTXT": -4.3088230431977587E17
+                                                                                                                                                                   }]}
+                                                                                                                                                                  ]
+                                                                                                                                                                 ],
+                                                                                                                                                                 "곃㲧<\/dఓꂟs其ࡧ&N葶=?c㠤Ჴ'횠숄臼#\u001a~": false
+                                                                                                                                                                }
+                                                                                                                                                               ]
+                                                                                                                                                              ]}]
+                                                                                                                                                             }]
+                                                                                                                                                            }}
+                                                                                                                                                           ],
+                                                                                                                                                           "2f`⽰E쵟>J笂裭!〛觬囀ۺ쟰#桊l鹛ⲋ|RA_Vx፭gE됓h﵀mfỐ|?juTU档[d⢼⺻p濚7E峿": 5613688852456817133
+                                                                                                                                                          },
+                                                                                                                                                          "濘끶g忮7㏵殬W팕Q曁 뫰)惃廊5%-蹚zYZ樭ﴷQ锘쯤崫gg": true,
+                                                                                                                                                          "絥ᇑ⦏쒓븣爚H.㗊߄o蘵貆ꂚ(쎔O᥉ﮓ]姨Wꁓ!RMA|o퉢THx轮7M껁U즨'i뾘舯o": "跥f꜃?"
+                                                                                                                                                         }}
+                                                                                                                                                        ],
+                                                                                                                                                        "鷰鹮K-9k;ﰰ?_ݦѷ-ꅣ䩨Zꥱ\"mꠟ屎/콑Y╘2&鸞脇㏢ꀇ࠺ⰼ拾喭틮L꽩bt俸墶 [l/웄\"꾦\u20d3iও-&+\u000fQ+໱뵞": -1.296494662286671E-19
+                                                                                                                                                       },
+                                                                                                                                                       "HX੹/⨇୕붷Uﮘ旧\\쾜͔3l鄈磣糂̖䟎Eᐳw橖b῀_딕hu葰窳闹вU颵|染H죶.fP䗮:j䫢\\b뎖i燕ꜚG⮠W-≚뉗l趕": "ଊ칭Oa᡺$IV㷧L\u0019脴셀붿餲햪$迳向쐯켂PqfT\" ?I屉鴼쿕@硙z^鏕㊵M}㚛T젣쓌-W⩐-g%⺵<뮱~빅╴瑿浂脬\u0005왦燲4Ⴭb|D堧 <\/oEQh",
+                                                                                                                                                       "䘶#㥘੐캔f巋ἡAJ䢚쭈ࣨ뫒*mᇊK,ࣺAꑱ\u000bR<\/A\"1a6鵌㯀bh곿w(\"$ꘁ*rಐ趣.d࿩k/抶면䒎9W⊃9": "漩b挋Sw藎\u0000",
+                                                                                                                                                       "畀e㨼mK꙼HglKb,\"'䤜": null
+                                                                                                                                                      }]}]
+                                                                                                                                                     ]
+                                                                                                                                                    ]
+                                                                                                                                                   }]
+                                                                                                                                                  ]}
+                                                                                                                                                 ]
+                                                                                                                                                ]}
+                                                                                                                                               ],
+                                                                                                                                               "歙>駿ꣂ숰Q`J΋方樛(d鱾뼣(뫖턭\u20f9lচ9歌8o]8윶l얶?镖G摄탗6폋폵+g:䱫홊<멀뀿/س|ꭺs걐跶稚W々c㫣⎖": "㣮蔊깚Cꓔ舊|XRf遻㆚︆'쾉췝\\&言",
+                                                                                                                                               "殭\"cށɨꝙ䞘:嬮e潽Y펪㳅/\"O@ࠗ겴]췖YǞ(t>R\"N?梳LD恭=n氯T豰2R諸#N}*灧4}㶊G䍣b얚": null,
+                                                                                                                                               "襞<\/啧 B|싞W瓇)6簭鼡艆lN쩝`|펭佡\\間邝[z릶&쭟愱ꅅ\\T᰽1鯯偐栈4̸s윜R7⒝/똽?치X": "⏊躖Cﱰ2Qẫ脐&இ?%냝悊",
+                                                                                                                                               ",鰧偵셣싹xᎹ힨᯳EṬH㹖9": -4604276727380542356
+                                                                                                                                              }
+                                                                                                                                             }
+                                                                                                                                            ]]]],
+                                                                                                                                            "웺㚑xs}q䭵䪠馯8?LB犯zK'os䚛HZ\"L?셎s^㿧㴘Cv2": null
+                                                                                                                                           }]
+                                                                                                                                          ]
+                                                                                                                                         ]
+                                                                                                                                        ],
+                                                                                                                                        "Kd2Kv+|z": 7367845130646124107,
+                                                                                                                                        "ᦂⶨ?ᝢ 祂些ഷ牢㋇操\"腭䙾㖪\\(y4cE뽺ㆷ쫺ᔖ%zfۻ$ў1柦,㶢9r漢": -3.133230960444846E-20,
+                                                                                                                                        "琘M焀q%㢟f鸯O⣏蓑맕鯊$O噷|)z褫^㢦⠮ꚯ꫞`毕1qꢚ{ĭ䎀বώT\"뱘3G൴?^^of": null
+                                                                                                                                       }
+                                                                                                                                      ],
+                                                                                                                                      "a8V᯺?:ﺃ/8ꉿBq|9啓댚;*i2": null,
+                                                                                                                                      "cpT瀇H珰Ừpೃi鎪Rr␣숬-鹸ҩ䠚z脚цGoN8入y%趌I┽2ឪЀiJNcN)槣/▟6S숆牟\"箑X僛G殱娇葱T%杻:J諹昰qV쨰": 8331037591040855245
+                                                                                                                                     }],
+                                                                                                                                     "G5ᩜ䄗巢껳": true
+                                                                                                                                    }
+                                                                                                                                   },
+                                                                                                                                   "Ồ巢ゕ@_譙A`碫鄐㡥砄㠓(^K": "?܃B혢▦@犑ὺD~T⧁|醁;o=J牌9냚⢽㨘{4觍蚔9#$∺\u0016p囅\\3Xk阖⪚\"UzA穕롬✎➁㭒춺C㣌ဉ\"2瓑员ᅽꝶ뫍}꽚ꞇ鶂舟彺]ꍽJC蝧銉",
+                                                                                                                                   "␆Ě膝\"b-퉐ACR言J謈53~V튥x䜢?ꃽɄY뮩ꚜ": "K/↾e萃}]Bs⾿q룅鷦-膋?m+死^魊镲6",
+                                                                                                                                   "粡霦c枋AHퟁo礼Ke?qWcA趸㡔ꂏ?\u000e춂8iতᦜ婪\u0015㢼nﵿꍻ!ᐴ関\u001d5j㨻gfῩUK5Ju丝tかTI'?㓏t>⼟o a>i}ᰗ;뤕ܝ": false,
+                                                                                                                                   "ꄮ匴껢ꂰ涽+䜨B蛹H䛓-k蕞fu7kL谖,'涃V~챳逋穞cT\"vQ쓕ObaCRQ㓡Ⲯ?轭⫦輢墳?vA餽=h䮇킵n폲퉅喙?\"'1疬V嬗Qd灗'Lự": "6v!s믁㭟㣯獃!磸餠ቂh0C뿯봗F鷭gꖶ~コkK<ᦈTt\\跓w㭣횋钘ᆹ듡䑚W䟾X'ꅔ4FL勉Vܴ邨y)2'〚쭉⽵-鞣E,Q.?块",
+                                                                                                                                   "?(˧쩯@崟吋歄K": null
+                                                                                                                                  },
+                                                                                                                                  "Gc럃녧>?2DYI鴿\\륨)澔0ᔬlx'觔7젘⤡縷螩%Sv׫묈/]↱&S h\u0006歋ᑛxi̘}ひY蔯_醨鯘煑橾8?䵎쨋z儬ꁏ*@츾:": null
+                                                                                                                                 }
+                                                                                                                                }
+                                                                                                                               }
+                                                                                                                              ]
+                                                                                                                             ]
+                                                                                                                            ]}
+                                                                                                                           },
+                                                                                                                           "HO츧G": 3.694949578823609E17,
+                                                                                                                           "QC\u0012(翻曇Tf㷟bGBJ옉53\\嚇ᛎD/\u001b夾၉4\"핀@祎)쫆yD\"i먎Vn㿿V1W᨝䶀": -6150931500380982286,
+                                                                                                                           "Z㓮P翸鍱鉼K䋞꘺튿⭁Y": -7704503411315138850,
+                                                                                                                           "]모开ꬖP븣c霤<[3aΠ\"黁䖖䰑뮋ꤦ秽∼㑷冹T+YUt\"싳F↭䖏&鋌": -2.7231911483181824E18,
+                                                                                                                           "tꎖ": -4.9517948741799555E-19,
+                                                                                                                           "䋘즊.⬅IꬃۣQ챢ꄑ黐|f?C⾺|兕읯sC鬸섾整腨솷V": "旆柩l<K髝M戶鯮t:wR2ꉱ`9'l픪*폍芦㊢Pjjo堡^  읇얛嶅있ষ0?F",
+                                                                                                                           "下9T挞\\$yᮇk쌋⼇,ਉ": true,
+                                                                                                                           "櫨:ㆣ,邍lr崕祜㐮烜Z,XXD蕼㉴ kM꯽?P0﹉릗": null,
+                                                                                                                           "gv솠歽閘4镳䗄2澾>쪦sᖸMy㦅울썉瘗㎜檵9ꍂ駓ૉᚿ/u3씅徐拉[Z䞸ࡗ1ꆱ&Q풘?ǂ8\u0011BCDY2볨;鸏": null,
+                                                                                                                           "幫 n煥s쁇펇 왊-$C\"衝:\u0014㣯舼.3뙗Yl⋇\"K迎멎[꽵s}9鉳UK8쐥\"掄㹖h㙈!얄સ?Ꜳ봺R伕UTD媚I䜘W鏨蔮": -4.150842714188901E-17,
+                                                                                                                           "ﺯ^㄄\b죵@fྉkf颡팋Ꞧ{/Pm0V둳⻿/落韒ꊔᚬ@5螺G\\咸a谆⊪ቧ慷绖?财(鷇u錝F=r၍橢ឳn:^iᴵtD볠覅N赴": null
+                                                                                                                          }]
+                                                                                                                         }]
+                                                                                                                        }
+                                                                                                                       ]
+                                                                                                                      ]}
+                                                                                                                     ]},
+                                                                                                                     "謯?w厓奰T李헗聝ឍ貖o⪇弒L!캶$ᆅ": -4299324168507841322,
+                                                                                                                     "뺊奉_垐浸延몏孄Z舰2i$q붿좾껇d▵餏\"v暜Ҭ섁m￴g>": -1.60911932510533427E18
+                                                                                                                    }
+                                                                                                                   ]
+                                                                                                                  }
+                                                                                                                 ]
+                                                                                                                ]],
+                                                                                                                "퉝꺔㠦楶Pꅱ": 7517896876489142899,
+                                                                                                                "": false
+                                                                                                               }
+                                                                                                              ]},
+                                                                                                              "是u&I狻餼|谖j\"7c됮sסּ-踳鉷`䣷쉄_A艣鳞凃*m⯾☦椿q㎭N溔铉tlㆈ^": 1.93547720203604352E18,
+                                                                                                              "kⲨ\\%vr#\u000bⒺY\\t<\/3﬌R訤='﹠8蝤Ꞵ렴曔r": false
+                                                                                                             }
+                                                                                                            ]},
+                                                                                                            "阨{c?C\u001d~K?鎌Ԭ8烫#뙣P초遗t㭱E­돒䆺}甗[R*1!\\~h㕅᰺@<9JꏏષI䳖栭6綘걹ᅩM\"▯是∔v鬽顭⋊譬": "운ﶁK敂(欖C취پ℄爦賾"
+                                                                                                           }
+                                                                                                          }}
+                                                                                                         }],
+                                                                                                         "鷨赼鸙+\\䭣t圙ڹx᜾ČN<\/踘\"S_맶a鷺漇T彚⎲i㈥LT-xA캔$\u001cUH=a0츺l릦": "溣㣂0濕=鉵氬駘>Pꌢpb솇쬤h힊줎獪㪬CrQ矠a&脍꼬爼M茴/΅\u0017弝轼y#Ꞡc6둴=?R崏뷠麖w?"
+                                                                                                        },
+                                                                                                        "閕ᘜ]CT)䵞l9z'xZF{:ؐI/躅匽졁:䟇AGF૸\u001cퟗ9)駬慟ꡒꆒRS״툋A<>\u0010\"ꂔ炃7g덚E৏bꅰ輤]o㱏_뷕ܘ暂\"u": "芢+U^+㢩^鱆8*1鈶鮀\u0002뺰9⬳ꪮlL䃣괟,G8\u20a8DF㉪錖0ㄤ瓶8Nଷd?眡GLc陓\\_죌V쁰ल二?c띦捱 \u0019JC\u0011b⤉zẒT볕\"绣蘨뚋cꡉkI\u001e鳴",
+                                                                                                        "ꃣI'{6u^㡃#཰Kq4逹y൒䧠䵮!㱙/n??{L풓ZET㙠퍿X2᩟綳跠葿㚙w཮x캽扳B唕S|尾}촕%N?o䪨": null,
+                                                                                                        "ⰴFjෟ셈[\u0018辷px?椯\\1<ﲻ栘ᣁ봢憠뉴p": -5263694954586507640
+                                                                                                       }
+                                                                                                      ]
+                                                                                                     ]]
+                                                                                                    ]}
+                                                                                                   ]}]
+                                                                                                  ]
+                                                                                                 ],
+                                                                                                 "?#癘82禩鋆ꊝty?&": -1.9419029518535086E-19
+                                                                                                }
+                                                                                               ]
+                                                                                              ]
+                                                                                             ]}
+                                                                                            ]
+                                                                                           ]
+                                                                                          ],
+                                                                                          "훊榲.|῕戄&.㚏Zꛦ2\"䢥ሆ⤢fV_摕婔?≍Fji冀탆꜕i㏬_ẑKᅢ꫄蔻XWc|饡Siẘ^㲦?羡2ぴ1縁ᙅ?쐉Ou": false
+                                                                                         }]]
+                                                                                        ]}}},
+                                                                                        "慂뗄卓蓔ᐓ匐嚖/颹蘯/翻ㆼL?뇊,텵<\\獷ごCボ": null
+                                                                                       },
+                                                                                       "p溉ᑟi짣z:䒤棇r^٫%G9缑r砌롧.물农g?0׼ሩ4ƸO㣥㯄쩞ጩ": null,
+                                                                                       "껎繥YxK\"F젷쨹뤤1wq轫o?鱑뜀瘊?뎃h灑\\ꛣ}K峐^ኖ⤐林ꉓhy": null
+                                                                                      }
+                                                                                     ],
+                                                                                     "᱀n肓ㄛ\"堻2>m殮'1橌%Ꞵ군=Ӳ鯨9耛<\/n據0u彘8㬇៩f᏿诙]嚊": "䋯쪦S럶匏ㅛ#)O`ሀX_鐪渲⛀㨻宅闩➈ꢙஶDR⪍"
+                                                                                    },
+                                                                                    "tA썓龇 ⋥bj왎录r땽✒롰;羋^\\?툳*┎?썀ma䵳넅U䳆૘〹䆀LQ0\b疀U~u$M}(鵸g⳾i抦뛹?䤈땚검.鹆?ꩡtⶥGĒ;!ቹHS峻B츪켏f5≺": 2366175040075384032,
+                                                                                    "전pJjleb]ួ": -7.5418493141528422E18,
+                                                                                    "n.鎖ጲ\n?,$䪘": true
+                                                                                   },
+                                                                                   "欈Ar㉣螵᪚茩?O)": null
+                                                                                  },
+                                                                                  "쫸M#x}D秱欐K=侫们丐.KꕾxẠ\u001e㿯䣛F܍캗qq8꟞ṢFD훎⵳簕꭛^鳜\u205c٫~⑟~冫ऊ2쫰<\/戲윱o<\"": true
+                                                                                 },
+                                                                                 "㷝聥/T뱂\u0010锕|内䞇x侁≦㭖:M?iM᣿IJe煜dG࣯尃⚩gPt*辂.{磼럾䝪@a\\袛?}ᓺB珼": true
+                                                                                }
+                                                                               }
+                                                                              ]]}]}},
+                                                                              "tn\"6ꫤ샾䄄;銞^%VBPwu묪`Y僑N.↺Ws?3C⤻9唩S䠮ᐴm;sᇷ냞඘B/;툥B?lB∤)G+O9m裢0kC햪䪤": -4.5941249382502277E18,
+                                                                              "ᚔt'\\愫?鵀@\\びꂕP큠<<]煹G-b!S?\nꖽ鼫,ݛ&頺y踦?E揆릱H}햧캡b@手.p탻>췽㣬ꒅ`qe佭P>ᓂ&?u}毚ᜉ蟶頳졪ᎏzl2wO": -2.53561440423275936E17
+                                                                             }]}
+                                                                            }
+                                                                           ]
+                                                                          ]],
+                                                                          "潈촒⿂叡": 5495738871964062986
+                                                                         }
+                                                                        ]]
+                                                                       }
+                                                                      ]
+                                                                     ]}
+                                                                    ]]
+                                                                   ]]
+                                                                  ]}
+                                                                 ]
+                                                                ]},
+                                                                "ႁq킍蓅R`謈蟐ᦏ儂槐僻ﹶ9婌櫞釈~\"%匹躾ɢ뤥>࢟瀴愅?殕节/냔O✬H鲽엢?ᮈੁ⋧d␽㫐zCe*": 2.15062231586689536E17,
+                                                                "㶵Ui曚珰鋪ᾼ臧P{䍏䷪쨑̟A뼿T渠誈䏚D1!잶<\/㡍7?)2l≣穷᛾稝{:;㡹nemיּ訊`G": null,
+                                                                "䀕\"飕辭p圁f#뫆䶷뛮;⛴ᩍ3灚덏ᰝ쎓⦷詵%᜖Մfs⇫(\u001e~P|ﭗCⲾផv湟W첋(텪બT<บSꏉ੗⋲X婵i ӵ⇮?L䬇|ꈏ?졸": 1.548341247351782E-19
+                                                               }
+                                                              ]
+                                                             },
+                                                             "t;:N\u0015q鐦Rt缆{ꮐC?஛㷱敪\\+鲊㉫㓪몗릙竏(氵kYS": "XᰂT?൮ô",
+                                                             "碕飦幑|+ 㚦鏶`镥ꁩ B<\/加륙": -4314053432419755959,
+                                                             "秌孳(p!G?V傫%8ሽ8w;5鲗㦙LI檸\u2098": "zG N볞䆭鎍흘\\ONK3횙<\/樚立圌Q튅k쩎Ff쁋aׂJK銆ઘ즐狩6༥✙䩜篥CzP(聻駇HHퟲ讃%,ά{렍p而刲vy䦅ክ^톺M楒鍢㹳]Mdg2>䤉洞",
+                                                             "踛M젧>忔芿㌜Zk": 2215369545966507819,
+                                                             "씐A`$槭頰퍻^U覒\bG毲aᣴU;8!팲f꜇E⸃_卵{嫏羃X쀳C7뗮m(嚼u N܁谟D劯9]#": true,
+                                                             "ﻩ!뵸-筚P᭛}ἰ履lPh?౮ⶹꆛ穉뎃g萑㑓溢CX뾇G㖬A錟]RKaꄘ]Yo+@䘁's섎襠$^홰}F": null
+                                                            },
+                                                            "粘ꪒ4HXᕘ蹵.$區\r\u001d묁77pPc^y笲Q<\/ꖶ 訍䃍ᨕG?*": 1.73773035935040224E17
+                                                           },
+                                                           "婅拳?bkU;#D矠❴vVN쩆t㜷A풃갮娪a%鮏絪3dAv룒#tm쑬⌛qYwc4|L8KZ;xU⓭㳔밆拓EZ7襨eD|隰ऌ䧼u9Ԣ+]贴P荿": 2.9628516456987075E18
+                                                          }]}}]
+                                                         ]}
+                                                        }}
+                                                       ]}]
+                                                      ],
+                                                      "|g翉F*湹̶\u0005⏐1脉̀eI쩓ᖂ㫱0碞l䴨ꑅ㵽7AtἈ턧yq䳥塑:z:遀ᄐX눔擉)`N3昛oQ셖y-ڨ⾶恢ꈵq^<\/": null,
+                                                      "菹\\랓G^璬x৴뭸ゆUS겧﮷Bꮤ ┉銜᯻0%N7}~f洋坄Xꔼ<\/4妟Vꄟ9:౟곡t킅冩䧉笭裟炂4봋ⱳ叺怊t+怯涗\"0㖈Hq": false,
+                                                      "졬믟'ﺇফ圪쓬멤m邸QLব䗁愍4jvs翙 ྍ꧀艳H-|": null,
+                                                      "컮襱⣱뗠 R毪/鹙꾀%헳8&": -5770986448525107020
+                                                     }
+                                                    ],
+                                                    "B䔚bꐻ뙏姓展槰T-똌鷺tc灿᫽^㓟䏀o3o$꘭趙萬I顩)뇭Ἑ䓝\f@{ᣨ`x3蔛": null
+                                                   }
+                                                  ]
+                                                 ]
+                                                }],
+                                                "⦖扚vWꃱ꥙㾠壢輓{-⎳鹷贏璿䜑bG倛⋐磎c皇皩7a~ﳫU╣Q࠭ꎉS摅姽OW.홌ೞ.": null,
+                                                "蚪eVlH献r}ᮏ믠ﰩꔄ@瑄ⲱ": null,
+                                                "퀭$JWoꩢg역쁍䖔㑺h&ୢtXX愰㱇?㾫I_6 OaB瑈q裿": null,
+                                                "꽦ﲼLyr纛Zdu珍B絟쬴糔?㕂짹䏵e": "ḱ\u2009cX9멀i䶛簆㳀k"
+                                               }
+                                              ]]]],
+                                              "(_ꏮg່澮?ᩑyM<艷\u001aꪽ\\庼뙭Z맷㰩Vm\\lY筺]3㋲2㌩㄀Eਟ䝵⨄쐨ᔟgङHn鐖⤇놋瓇Q탚單oY\"♆臾jHᶈ征ቄ??uㇰA?#1侓": null
+                                             },
+                                             "觓^~ሢ&iI띆g륎ḱ캀.ᓡꀮ胙鈉": 1.0664523593012836E-19,
+                                             "y詭Gbᔶऽs댁U:杜⤎ϲ쁗⮼D醄诿q뙰I#즧v蔎xHᵿt᡽[**?崮耖p缫쿃L菝,봬ꤦC쯵#=X1瞻@OZc鱗CQTx": null
+                                            }
+                                           ]
+                                          }}],
+                                          "剘紁\u0004\\Xn⊠6,တױ;嵣崇}讃iႽ)d1\\䔓": null
+                                         },
+                                         "脨z\"{X,1u찜<'k&@?1}Yn$\u0015Rd輲ーa쮂굄+B$l": true,
+                                         "諳>*쭮괐䵟Ґ+<箁}빀䅱⡔檏臒hIH脟ꩪC핝ଗP좕\"0i<\/C褻D۞恗+^5?'ꂱ䚫^7}㡠cq6\\쨪ꔞꥢ?纖䫀氮蒫侲빦敶q{A煲G": -6880961710038544266
+                                        }}]
+                                       },
+                                       "5s⨲JvಽῶꭂᄢI.a৊": null,
+                                       "?1q꽏쿻ꛋDR%U娝>DgN乭G": -1.2105047302732358E-19
+                                      }
+                                     ]
+                                    ]},
+                                    "qZz`撋뙹둣j碇쁏\\ꆥ\u0018@藴疰Wz)O{F䶛l᷂绘訥$]뮍夻䢋䩇萿獰樧猵⣭j萶q)$꬚⵷0馢W:Ⱍ!Qoe": -1666634370862219540,
+                                    "t": "=wp|~碎Q鬳Ӎ\\l-<\/^ﳊhn퐖}䍔t碵ḛ혷?靻䊗",
+                                    "邙쇡㯇%#=,E4勃驆V繚q[Y댻XV㡸[逹ᰏ葢B@u=JS5?bLRn얮㍉⏅ﰳ?a6[&큟!藈": 1.2722786745736667E-19
+                                   },
+                                   "X블땨4{ph鵋ꉯ웸 5p簂䦭s_E徔濧d稝~No穔噕뽲)뉈c5M윅>⚋[岦䲟懷恁?鎐꓆ฬ爋獠䜔s{\u001bm鐚儸煛%bﯿXT>ꗘ@8G": 1157841540507770724,
+                                   "媤娪Q杸\u0011SAyᡈ쿯": true,
+                                   "灚^ಸ%걁<\/蛯<O\"-刷㏠R(kO=䢊䅎l䰓팪A絫픧": "譔\\㚄 ?R7㔪G㋉⣰渆?\\#|gN⤴;W칷A׫癮଼ೣ㏳뒜7d恓꾲0扬S0ᆵi/贎ྡn䆋武",
+                                   "萇砇Gこ朦켋Wq`㞲攊*冁~霓L剢zI腧튴T繙Cঅ뫬╈뮜ㄾ䦧촄椘B⊬츩r2f㶱厊8eϬ{挚␯OM焄覤\\(Kӡ>?\"祴坓\\\\'흍": -3.4614808555942579E18,
+                                   "釴U:O湛㴑䀣렑縓\ta)<D8ﭳ槁髭D.L|xs斋敠\"띋早7wᎍ": true,
+                                   "쵈+쬎簨up䓬?q+~\u0019仇뵈᫯3ᵣ恘枰劫㪢u珘-퀭:컙:u`⌿A(9鄦!<珚nj3:Hࣨ巋䀁旸뎈맻v\"\\(곘vO㤰aZe<\/W鹙鄜;l厮둝": null,
+                                   "": -1.2019926774977002E-18,
+                                   "%者O7.Nꪍs梇接z蕜綛<\/䜭\"죊y<曋漵@Ś⹝sD⟓jݗᢜ?z/9ၲMa쨮긗贎8ᔮ㦛;6p뾥໭䭊0B찛+)(Y㿠鸁䕒^옥": "鬃뫤&痽舎J콮藐󽸰ᨨMꈫ髿v<N\\.삒껅я1ꭼ5䴷5쳬臨wj덥"
+                                  }],
+                                  "鷎'㳗@帚妇OAj' 谬f94ǯ(횡ヒ%io쪖삐좛>(j:숾却䗌gCiB뽬Oyuq輥厁/7)?今hY︺Q": null
+                                 }
+                                ]
+                               ]]]}]
+                              ],
+                              "I笔趠Ph!<ཛྷ㸞诘X$畉F\u0005笷菟.Esr릙!W☆䲖뗷莾뒭U\"䀸犜Uo3Gꯌx4r蔇᡹㧪쨢準<䂀%ࡡꟼ瑍8炝Xs0䀝销?fi쥱ꆝલBB": -8571484181158525797,
+                              "L⦁o#J|\"⽩-㱢d㌛8d\\㶤傩儻E[Y熯)r噤὘勇 }": "e(濨쓌K䧚僒㘍蠤Vᛸ\"络QJL2,嬓왍伢㋒䴿考澰@(㏾`kX$끑эE斡,蜍&~y",
+                              "vj.|统圪ᵮPL?2oŶ`밧\"勃+0ue%⿥绬췈체$6:qa렐Q;~晘3㙘鹑": true,
+                              "ශؙ4獄⶿c︋i⚅:ん閝Ⳙ苆籦kw{䙞셕pC췃ꍬ␜꟯ꚓ酄b힝hwk꭭M鬋8B耳쑘WQ\\偙ac'唀x᪌\u2048*h짎#ፇ鮠뾏ឿ뀌": false,
+                              "⎀jꄒ牺3Ⓝ컴~?親ꕽぼܓ喏瘘!@<튋㐌꿱⩦{a?Yv%⪧笯Uܱ栅E搚i뚬:ꄃx7䙳ꦋ&䓹vq☶I䁘ᾘ涜\\썉뺌Lr%Bc㍜3?ꝭ砿裞]": null,
+                              "⭤뙓z(㡂%亳K䌽꫿AԾ岺㦦㼴輞낚Vꦴw냟鬓㹈뽈+o3譻K1잞": 2091209026076965894,
+                              "ㇲ\t⋇轑ꠤ룫X긒\"zoY읇희wj梐쐑l侸`e%s": -9.9240075473576563E17,
+                              "啸ꮑ㉰!ᚓ}銏": -4.0694813896301194E18,
+                              ">]囋੽EK뇜>_ꀣ緳碖{쐐裔[<ನ\"䇅\"5L?#xTwv#罐\u0005래t应\\N?빗;": "v쮽瞭p뭃"
+                             }
+                            ]],
+                            "斴槾?Z翁\"~慍弞ﻆ=꜡o5鐋dw\"?K蠡i샾ogDﲰ_C*⬟iㇷ4nય蟏[㟉U꽌娛苸 ঢ়操贻洞펻)쿗૊許X⨪VY츚Z䍾㶭~튃ᵦ<\/E臭tve猑x嚢": null,
+                            "锡⛩<\/칥ꈙᬙ蝀&Ꚑ籬■865?_>L詏쿨䈌浿弥爫̫lj&zx<\/C쉾?覯n?": null,
+                            "꾳鑤/꼩d=ᘈn挫ᑩ䰬ZC": "3錢爋6Ƹ䴗v⪿Wr益G韠[\u0010屗9쁡钁u?殢c䳀蓃樄욂NAq赟c튒瘁렶Aૡɚ捍"
+                           }
+                          ]
+                         ]
+                        ]}
+                       ]
+                      ]
+                     }]]]}}
+                    ]}],
+                    "Ej䗳U<\/Q=灒샎䞦,堰頠@褙g_\u0003ꤾfⶽ?퇋!łB〙ד3CC䌴鈌U:뭔咎(Qો臃䡬荋BO7㢝䟸\"Yb": 2.36010731779814E-20,
+                    "逸'0岔j\u000e눘먷翌C츊秦=ꭣ棭ှ;鳸=麱$XP⩉駚橄A\\좱⛌jqv䰞3Ь踌v㳆¹gT┌gvLB賖烡m?@E঳i": null
+                   },
+                   "曺v찘ׁ?&绫O័": 9107241066550187880
+                  }
+                 ]
+                ],
+                "(e屄\u0019昜훕琖b蓘ᬄ0/۲묇Z蘮ဏ⨏蛘胯뢃@㘉8ሪWᨮ⦬ᅳ䅴HI၇쨳z囕陻엣1赳o": true,
+                ",b刈Z,ၠ晐T솝ŕB⩆ou'퐼≃绗雗d譊": null,
+                "a唥KB\"ﳝ肕$u\n^⅄P䟼냉䞸⩪u윗瀱ꔨ#yşs꒬=1|ﲤ爢`t౐튼쳫_Az(Ṋ擬㦷좕耈6": 2099309172767331582,
+                "?㴸U<\/䢔ꯡ阽扆㐤q鐋?f㔫wM嬙-;UV죫嚔픞G&\"Cᗍ䪏풊Q": "VM7疹+陕枡툩窲}翡䖶8欞čsT뮐}璤:jﺋ鎴}HfA൝⧻Zd#Qu茅J髒皣Y-︴[?-~쉜v딏璮㹚䅊﩯<-#\u000e걀h\u0004u抱﵊㼃U<㱷⊱IC進"
+               },
+               "숌dee節鏽邺p넱蹓+e罕U": true
+              }
+             ],
+             "b⧴룏??ᔠ3ぱ>%郿劃翐ꏬꠛW瞳᫏누躨狀ໄy੽\"ីuS=㨞馸k乆E": "トz݈^9R䬑<ﮛG<s~<\/?ⵆᏥ老熷u듷"
+            }}
+           ]
+          }
+         ]}
+        }
+       }
+      }
+     }},
+     "宩j鬅쳜QꝖјy獔Z᭵1v擖}䨿F%cֲ᫺贴m塼딚NP亪\"ᅨsa뺯ꘓ2:9뛓༂쌅䊈#>Rꨳ\u000fTT泠纷꽀MR<CBxP񱒫X쇤": -2.22390568492330598E18,
+     "?䯣ᄽ@Z鸅->ᴱ纊:㠭볮?%N56%鈕1䗍䜁a䲗j陇=뿻偂衋࿘ᓸ?ᕵZ+<\/}H耢b䀁z^f$&㝒LkꢳI脚뙛u": 5.694374481577558E-20
+    }]
+   }
+  ]],
+  "obj": {"key": "wrong value"},
+  "퓲꽪m{㶩/뇿#⼢&᭙硞㪔E嚉c樱㬇1a綑᝖DḾ䝩": null
+ }
+}

+ 88 - 0
engine/source/persistence/rapidjson/bin/data/webapp.json

@@ -0,0 +1,88 @@
+{"web-app": {
+  "servlet": [   
+    {
+      "servlet-name": "cofaxCDS",
+      "servlet-class": "org.cofax.cds.CDSServlet",
+      "init-param": {
+        "configGlossary:installationAt": "Philadelphia, PA",
+        "configGlossary:adminEmail": "[email protected]",
+        "configGlossary:poweredBy": "Cofax",
+        "configGlossary:poweredByIcon": "/images/cofax.gif",
+        "configGlossary:staticPath": "/content/static",
+        "templateProcessorClass": "org.cofax.WysiwygTemplate",
+        "templateLoaderClass": "org.cofax.FilesTemplateLoader",
+        "templatePath": "templates",
+        "templateOverridePath": "",
+        "defaultListTemplate": "listTemplate.htm",
+        "defaultFileTemplate": "articleTemplate.htm",
+        "useJSP": false,
+        "jspListTemplate": "listTemplate.jsp",
+        "jspFileTemplate": "articleTemplate.jsp",
+        "cachePackageTagsTrack": 200,
+        "cachePackageTagsStore": 200,
+        "cachePackageTagsRefresh": 60,
+        "cacheTemplatesTrack": 100,
+        "cacheTemplatesStore": 50,
+        "cacheTemplatesRefresh": 15,
+        "cachePagesTrack": 200,
+        "cachePagesStore": 100,
+        "cachePagesRefresh": 10,
+        "cachePagesDirtyRead": 10,
+        "searchEngineListTemplate": "forSearchEnginesList.htm",
+        "searchEngineFileTemplate": "forSearchEngines.htm",
+        "searchEngineRobotsDb": "WEB-INF/robots.db",
+        "useDataStore": true,
+        "dataStoreClass": "org.cofax.SqlDataStore",
+        "redirectionClass": "org.cofax.SqlRedirection",
+        "dataStoreName": "cofax",
+        "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver",
+        "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
+        "dataStoreUser": "sa",
+        "dataStorePassword": "dataStoreTestQuery",
+        "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';",
+        "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log",
+        "dataStoreInitConns": 10,
+        "dataStoreMaxConns": 100,
+        "dataStoreConnUsageLimit": 100,
+        "dataStoreLogLevel": "debug",
+        "maxUrlLength": 500}},
+    {
+      "servlet-name": "cofaxEmail",
+      "servlet-class": "org.cofax.cds.EmailServlet",
+      "init-param": {
+      "mailHost": "mail1",
+      "mailHostOverride": "mail2"}},
+    {
+      "servlet-name": "cofaxAdmin",
+      "servlet-class": "org.cofax.cds.AdminServlet"},
+ 
+    {
+      "servlet-name": "fileServlet",
+      "servlet-class": "org.cofax.cds.FileServlet"},
+    {
+      "servlet-name": "cofaxTools",
+      "servlet-class": "org.cofax.cms.CofaxToolsServlet",
+      "init-param": {
+        "templatePath": "toolstemplates/",
+        "log": 1,
+        "logLocation": "/usr/local/tomcat/logs/CofaxTools.log",
+        "logMaxSize": "",
+        "dataLog": 1,
+        "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log",
+        "dataLogMaxSize": "",
+        "removePageCache": "/content/admin/remove?cache=pages&id=",
+        "removeTemplateCache": "/content/admin/remove?cache=templates&id=",
+        "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder",
+        "lookInContext": 1,
+        "adminGroupID": 4,
+        "betaServer": true}}],
+  "servlet-mapping": {
+    "cofaxCDS": "/",
+    "cofaxEmail": "/cofaxutil/aemail/*",
+    "cofaxAdmin": "/admin/*",
+    "fileServlet": "/static/*",
+    "cofaxTools": "/tools/*"},
+ 
+  "taglib": {
+    "taglib-uri": "cofax.tld",
+    "taglib-location": "/WEB-INF/tlds/cofax.tld"}}}

+ 26 - 0
engine/source/persistence/rapidjson/bin/data/widget.json

@@ -0,0 +1,26 @@
+{"widget": {
+    "debug": "on",
+    "window": {
+        "title": "Sample Konfabulator Widget",
+        "name": "main_window",
+        "width": 500,
+        "height": 500
+    },
+    "image": { 
+        "src": "Images/Sun.png",
+        "name": "sun1",
+        "hOffset": 250,
+        "vOffset": 250,
+        "alignment": "center"
+    },
+    "text": {
+        "data": "Click Here",
+        "size": 36,
+        "style": "bold",
+        "name": "text1",
+        "hOffset": 250,
+        "vOffset": 100,
+        "alignment": "center",
+        "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
+    }
+}}

BIN
engine/source/persistence/rapidjson/bin/encodings/utf16be.json


BIN
engine/source/persistence/rapidjson/bin/encodings/utf16bebom.json


BIN
engine/source/persistence/rapidjson/bin/encodings/utf16le.json


BIN
engine/source/persistence/rapidjson/bin/encodings/utf16lebom.json


BIN
engine/source/persistence/rapidjson/bin/encodings/utf32be.json


BIN
engine/source/persistence/rapidjson/bin/encodings/utf32bebom.json


BIN
engine/source/persistence/rapidjson/bin/encodings/utf32le.json


BIN
engine/source/persistence/rapidjson/bin/encodings/utf32lebom.json


+ 7 - 0
engine/source/persistence/rapidjson/bin/encodings/utf8.json

@@ -0,0 +1,7 @@
+{
+	"en":"I can eat glass and it doesn't hurt me.",
+	"zh-Hant":"我能吞下玻璃而不傷身體。",
+	"zh-Hans":"我能吞下玻璃而不伤身体。",
+	"ja":"私はガラスを食べられます。それは私を傷つけません。",
+	"ko":"나는 유리를 먹을 수 있어요. 그래도 아프지 않아요"
+}

+ 7 - 0
engine/source/persistence/rapidjson/bin/encodings/utf8bom.json

@@ -0,0 +1,7 @@
+{
+	"en":"I can eat glass and it doesn't hurt me.",
+	"zh-Hant":"我能吞下玻璃而不傷身體。",
+	"zh-Hans":"我能吞下玻璃而不伤身体。",
+	"ja":"私はガラスを食べられます。それは私を傷つけません。",
+	"ko":"나는 유리를 먹을 수 있어요. 그래도 아프지 않아요"
+}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail1.json

@@ -0,0 +1 @@
+"A JSON payload should be an object or array, not a string."

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail10.json

@@ -0,0 +1 @@
+{"Extra value after close": true} "misplaced quoted value"

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail11.json

@@ -0,0 +1 @@
+{"Illegal expression": 1 + 2}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail12.json

@@ -0,0 +1 @@
+{"Illegal invocation": alert()}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail13.json

@@ -0,0 +1 @@
+{"Numbers cannot have leading zeroes": 013}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail14.json

@@ -0,0 +1 @@
+{"Numbers cannot be hex": 0x14}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail15.json

@@ -0,0 +1 @@
+["Illegal backslash escape: \x15"]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail16.json

@@ -0,0 +1 @@
+[\naked]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail17.json

@@ -0,0 +1 @@
+["Illegal backslash escape: \017"]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail18.json

@@ -0,0 +1 @@
+[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail19.json

@@ -0,0 +1 @@
+{"Missing colon" null}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail2.json

@@ -0,0 +1 @@
+["Unclosed array"

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail20.json

@@ -0,0 +1 @@
+{"Double colon":: null}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail21.json

@@ -0,0 +1 @@
+{"Comma instead of colon", null}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail22.json

@@ -0,0 +1 @@
+["Colon instead of comma": false]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail23.json

@@ -0,0 +1 @@
+["Bad value", truth]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail24.json

@@ -0,0 +1 @@
+['single quote']

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail25.json

@@ -0,0 +1 @@
+["	tab	character	in	string	"]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail26.json

@@ -0,0 +1 @@
+["tab\   character\   in\  string\  "]

+ 2 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail27.json

@@ -0,0 +1,2 @@
+["line
+break"]

+ 2 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail28.json

@@ -0,0 +1,2 @@
+["line\
+break"]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail29.json

@@ -0,0 +1 @@
+[0e]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail3.json

@@ -0,0 +1 @@
+{unquoted_key: "keys must be quoted"}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail30.json

@@ -0,0 +1 @@
+[0e+]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail31.json

@@ -0,0 +1 @@
+[0e+-1]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail32.json

@@ -0,0 +1 @@
+{"Comma instead if closing brace": true,

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail33.json

@@ -0,0 +1 @@
+["mismatch"}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail4.json

@@ -0,0 +1 @@
+["extra comma",]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail5.json

@@ -0,0 +1 @@
+["double extra comma",,]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail6.json

@@ -0,0 +1 @@
+[   , "<-- missing value"]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail7.json

@@ -0,0 +1 @@
+["Comma after the close"],

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail8.json

@@ -0,0 +1 @@
+["Extra close"]]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail9.json

@@ -0,0 +1 @@
+{"Extra comma": true,}

+ 58 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/pass1.json

@@ -0,0 +1,58 @@
+[
+    "JSON Test Pattern pass1",
+    {"object with 1 member":["array with 1 element"]},
+    {},
+    [],
+    -42,
+    true,
+    false,
+    null,
+    {
+        "integer": 1234567890,
+        "real": -9876.543210,
+        "e": 0.123456789e-12,
+        "E": 1.234567890E+34,
+        "":  23456789012E66,
+        "zero": 0,
+        "one": 1,
+        "space": " ",
+        "quote": "\"",
+        "backslash": "\\",
+        "controls": "\b\f\n\r\t",
+        "slash": "/ & \/",
+        "alpha": "abcdefghijklmnopqrstuvwyz",
+        "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
+        "digit": "0123456789",
+        "0123456789": "digit",
+        "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
+        "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
+        "true": true,
+        "false": false,
+        "null": null,
+        "array":[  ],
+        "object":{  },
+        "address": "50 St. James Street",
+        "url": "http://www.JSON.org/",
+        "comment": "// /* <!-- --",
+        "# -- --> */": " ",
+        " s p a c e d " :[1,2 , 3
+
+,
+
+4 , 5        ,          6           ,7        ],"compact":[1,2,3,4,5,6,7],
+        "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
+        "quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
+        "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
+: "A key can be any string"
+    },
+    0.5 ,98.6
+,
+99.44
+,
+
+1066,
+1e1,
+0.1e1,
+1e-1,
+1e00,2e+00,2e-00
+,"rosebud"]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/pass2.json

@@ -0,0 +1 @@
+[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]

+ 6 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/pass3.json

@@ -0,0 +1,6 @@
+{
+    "JSON Test Pattern pass3": {
+        "The outermost value": "must be an object or array.",
+        "In this test": "It is an object."
+    }
+}

+ 3 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/readme.txt

@@ -0,0 +1,3 @@
+Test suite from http://json.org/JSON_checker/.
+
+If the JSON_checker is working correctly, it must accept all of the pass*.json files and reject all of the fail*.json files.

+ 1789 - 0
engine/source/persistence/rapidjson/build/Doxyfile

@@ -0,0 +1,1789 @@
+# Doxyfile 1.7.5.1
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file 
+# that follow. The default is UTF-8 which is also the encoding used for all 
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
+# iconv built into libc) for the transcoding. See 
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should 
+# identify the project. Note that if you do not use Doxywizard you need 
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME           = rapidjson
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description 
+# for a project that appears at the top of each page and should give viewer 
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          = "A fast JSON parser/generator for C++ with both SAX/DOM style API"
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is 
+# included in the documentation. The maximum height of the logo should not 
+# exceed 55 pixels and the maximum width should not exceed 200 pixels. 
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           = 
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = ../doc
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, 
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English 
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, 
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, 
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful if your file system 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like regular Qt-style comments 
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
+# interpret the first line (until the first dot) of a Qt-style 
+# comment as the brief description. If set to NO, the comments 
+# will behave just like regular Qt-style comments (thus requiring 
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Java. For instance, namespaces will be presented as packages, qualified 
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
+# sources. Doxygen will then generate output that is tailored for 
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it 
+# parses. With this tag you can assign which parser to use for a given extension. 
+# Doxygen has a built-in mapping, but you can override or extend it using this 
+# tag. The format is ext=language, where ext is a file extension, and language 
+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, 
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make 
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C 
+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions 
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING      = 
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
+# to include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also makes the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to 
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
+# Doxygen will parse them like normal C++ but will assume all classes use public 
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter 
+# and setter methods for a property. Setting this option to YES (the default) 
+# will make doxygen replace the get and set methods by a property in the 
+# documentation. This will only work if the methods are indeed getting or 
+# setting a simple type. If this is not the case, or you want to show the 
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and 
+# unions are shown inside the group in which they are included (e.g. using 
+# @ingroup) instead of on a separate page (for HTML and Man pages) or 
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = YES
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and 
+# unions with only public data fields will be shown inline in the documentation 
+# of the scope in which they are defined (i.e. file, namespace, or group 
+# documentation), provided this scope is documented. If set to NO (the default), 
+# structs, classes, and unions are shown on a separate page (for HTML and Man 
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
+# is documented as struct, union, or enum with the name of the typedef. So 
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
+# with name TypeT. When disabled the typedef will appear as a member of a file, 
+# namespace, or class. And the struct will be named TypeS. This can typically 
+# be useful for C code in case the coding convention dictates that all compound 
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
+# determine which symbols to keep in memory and which to flush to disk. 
+# When the cache is full, less often used symbols will be written to disk. 
+# For small to medium size projects (<1000 input files) the default value is 
+# probably good enough. For larger projects a too small cache size can cause 
+# doxygen to be busy swapping symbols to and from disk most of the time 
+# causing a significant performance penalty. 
+# If the system has enough physical memory increasing the cache will improve the 
+# performance by keeping more symbols in memory. Note that the value works on 
+# a logarithmic scale so increasing the size by one will roughly double the 
+# memory usage. The cache size is given by this formula: 
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be 
+# extracted and appear in the documentation as a namespace called 
+# 'anonymous_namespace{file}', where file will be replaced with the base 
+# name of the file that contains the anonymous namespace. By default 
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen 
+# will list include files with double quotes in the documentation 
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen 
+# will sort the (brief and detailed) documentation of class members so that 
+# constructors and destructors are listed first. If set to NO (the default) 
+# the constructors will appear in the respective orders defined by 
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. 
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO 
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
+# hierarchy of group names into alphabetical order. If set to NO (the default) 
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to 
+# do proper type resolution of all parameters of a function it will reject a 
+# match between the prototype and the implementation of a member function even 
+# if there is only one candidate or it is obvious which candidate to choose 
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen 
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or macro consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and macros in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
+# This will remove the Files entry from the Quick Index and from the 
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index 
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from 
+# the version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed 
+# by doxygen. The layout file controls the global structure of the generated 
+# output files in an output format independent way. The create the layout file 
+# that represents doxygen's defaults, run doxygen with the -l option. 
+# You can optionally specify a file name after the option, if omitted 
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            = 
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files 
+# containing the references data. This must be a list of .bib files. The 
+# .bib extension is automatically appended if omitted. Using this command 
+# requires the bibtex tool to be installed. See also 
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style 
+# of the bibliography can be controlled using LATEX_BIB_STYLE.
+
+CITE_BIB_FILES         = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = ../include/
+
+# This tag can be used to specify the character encoding of the source files 
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
+# also the default input encoding. Doxygen uses libiconv (or the iconv built 
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh 
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py 
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.d \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.idl \
+                         *.odl \
+                         *.cs \
+                         *.php \
+                         *.php3 \
+                         *.inc \
+                         *.m \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.f90 \
+                         *.f \
+                         *.for \
+                         *.vhd \
+                         *.vhdl
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag. 
+# Note that relative paths are relative to directory from which doxygen is run.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix file system feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the 
+# output. The symbol name can be a fully qualified name, a word, or if the 
+# wildcard * is used, a substring. Examples: ANamespace, AClass, 
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty or if 
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file 
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) 
+# and it is also possible to disable source filtering for a specific pattern 
+# using *.ext= (so without naming a filter). This option only has effect when 
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS = 
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
+# link to the source code.  Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header. Note that when using a custom header you are responsible  
+# for the proper inclusion of any scripts and style sheets that doxygen 
+# needs, which is dependent on the configuration options used. 
+# It is adviced to generate a default header using "doxygen -w html 
+# header.html footer.html stylesheet.css YourConfigFile" and then modify 
+# that header. Note that the header is subject to change so you typically 
+# have to redo this when upgrading to a newer version of doxygen or when 
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or 
+# other source files which should be copied to the HTML output directory. Note 
+# that these files will be copied to the base HTML output directory. Use the 
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these 
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that 
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       = 
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. 
+# Doxygen will adjust the colors in the stylesheet and background images 
+# according to this color. Hue is specified as an angle on a colorwheel, 
+# see http://en.wikipedia.org/wiki/Hue for more information. 
+# For instance the value 0 represents red, 60 is yellow, 120 is green, 
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. 
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of 
+# the colors in the HTML output. For a value of 0 the output will use 
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to 
+# the luminance component of the colors in the HTML output. Values below 
+# 100 gradually make the output lighter, whereas values above 100 make 
+# the output darker. The value divided by 100 is the actual gamma applied, 
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, 
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 
+# page will contain the date and time when the page was generated. Setting 
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
+# documentation will contain sections that can be hidden and shown after the 
+# page has loaded. For this to work a browser that supports 
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files 
+# will be generated that can be used as input for Apple's Xcode 3 
+# integrated development environment, introduced with OSX 10.5 (Leopard). 
+# To create a documentation set, doxygen will generate a Makefile in the 
+# HTML output directory. Running make will produce the docset in that 
+# directory and running "make install" will install the docset in 
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
+# it at startup. 
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
+# feed. A documentation feed provides an umbrella under which multiple 
+# documentation sets from a single provider (such as a company or product suite) 
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
+# should uniquely identify the documentation set bundle. This should be a 
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify 
+# the documentation publisher. This should be a reverse domain-name style 
+# string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file 
+# content.
+
+CHM_INDEX_ENCODING     = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and 
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated 
+# that can be used as input for Qt's qhelpgenerator to generate a 
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
+# be used to specify the file name of the resulting .qch file. 
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               = 
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to 
+# add. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   = 
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the 
+# custom filter to add. For more information please see 
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> 
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  = 
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this 
+# project's 
+# filter section matches. 
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> 
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  = 
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
+# be used to specify the location of Qt's qhelpgenerator. 
+# If non-empty doxygen will try to run qhelpgenerator on the generated 
+# .qhp file.
+
+QHG_LOCATION           = 
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files  
+# will be generated, which together with the HTML files, form an Eclipse help 
+# plugin. To install this plugin and make it available under the help contents 
+# menu in Eclipse, the contents of the directory containing the HTML and XML 
+# files needs to be copied into the plugins directory of eclipse. The name of 
+# the directory within the plugins directory should be the same as 
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before 
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin 
+# the directory name containing the HTML and XML files should also have 
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values 
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML 
+# documentation. Note that a value of 0 will completely suppress the enum 
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
+# structure should be generated to display hierarchical information. 
+# If the tag value is set to YES, a side panel will be generated 
+# containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). 
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, 
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES       = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open 
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included 
+# as images in the HTML documentation. The default is 10. Note that 
+# when you change the font size after a successful doxygen run you need 
+# to manually remove any form_*.png images from the HTML output directory 
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images 
+# generated for formulas are transparent PNGs. Transparent PNGs are 
+# not supported properly for IE 6.0, but are supported on all modern browsers. 
+# Note that when changing this option you need to delete any form_*.png files 
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax 
+# (see http://www.mathjax.org) which uses client side Javascript for the 
+# rendering instead of using prerendered bitmaps. Use this if you do not 
+# have LaTeX installed or if you want to formulas look prettier in the HTML 
+# output. When enabled you also need to install MathJax separately and 
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the 
+# HTML output directory using the MATHJAX_RELPATH option. The destination 
+# directory should contain the MathJax.js script. For instance, if the mathjax 
+# directory is located at the same level as the HTML output directory, then 
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the 
+# mathjax.org site, so you can quickly see the result without installing 
+# MathJax, but it is strongly recommended to install a local copy of MathJax 
+# before deployment.
+
+MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension 
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     = 
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box 
+# for the HTML output. The underlying search engine uses javascript 
+# and DHTML and should work on any modern browser. Note that when using 
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets 
+# (GENERATE_DOCSET) there is already a search function so this one should 
+# typically be disabled. For large projects the javascript based search engine 
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be 
+# implemented using a PHP enabled web server instead of at the web client 
+# using Javascript. Doxygen will generate the search PHP script and index 
+# file to put on the web server. The advantage of the server 
+# based approach is that it scales better to large projects and allows 
+# full text search. The disadvantages are that it is more difficult to setup 
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name. 
+# Note that when enabling USE_PDFLATEX this option is only used for 
+# generating bitmaps for formulas in the HTML output, but not in the 
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for 
+# the generated latex document. The footer should contain everything after 
+# the last chapter. If it is left blank doxygen will generate a 
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include 
+# source code with syntax highlighting in the LaTeX output. 
+# Note that which sources are shown also depends on other settings 
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the 
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See 
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition that 
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all references to function-like macros 
+# that are alone on a line, have an all uppercase name, and do not end with a 
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links. 
+# Note that each tag file must have a unique name 
+# (where the name does NOT include the path) 
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option also works with HAVE_DOT disabled, but it is recommended to 
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see 
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
+# the mscgen tool resides. If left empty the tool is assumed to be found in the 
+# default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is 
+# allowed to run in parallel. When set to 0 (the default) doxygen will 
+# base this on the number of processors available in the system. You can set it 
+# explicitly to a value larger than 0 to get control over the balance 
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that 
+# doxygen generates. When you want a differently looking font you can specify 
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find 
+# the font, which can be done by putting it in a standard location or by setting 
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the 
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font. 
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to 
+# set the path where dot can find it.
+
+DOT_FONTPATH           = 
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
+# doxygen will generate a call dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable call graphs 
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
+# doxygen will generate a caller dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable caller 
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include 
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are svg, png, jpg, or gif. 
+# If left blank png will be used. If you choose svg you need to set 
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files 
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to 
+# enable generation of interactive SVG images that allow zooming and panning. 
+# Note that this requires a modern browser other than Internet Explorer. 
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you 
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files 
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that 
+# contain msc files that are included in the documentation (see the 
+# \mscfile command).
+
+MSCFILE_DIRS           = 
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen if the 
+# number of direct children of the root node in a graph is already larger than 
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that the size of a graph can be further restricted by 
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, because dot on Windows does not 
+# seem to support this out of the box. Warning: Depending on the platform used, 
+# enabling this option may lead to badly anti-aliased labels on the edges of 
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES

+ 4 - 0
engine/source/persistence/rapidjson/build/premake

@@ -0,0 +1,4 @@
+premake4 vs2005
+premake4 vs2008
+premake4 vs2010
+premake4 gmake

+ 5 - 0
engine/source/persistence/rapidjson/build/premake.bat

@@ -0,0 +1,5 @@
+@echo off
+premake4 vs2005
+premake4 vs2008
+premake4 vs2010
+premake4 gmake

+ 175 - 0
engine/source/persistence/rapidjson/build/premake4.lua

@@ -0,0 +1,175 @@
+function setTargetObjDir(outDir)
+	for _, cfg in ipairs(configurations()) do
+		for _, plat in ipairs(platforms()) do
+			local action = _ACTION or ""
+			
+			local prj = project()
+			
+			--"_debug_win32_vs2008"
+			local suffix = "_" .. cfg .. "_" .. plat .. "_" .. action
+			
+			targetPath = outDir
+			
+			suffix = string.lower(suffix)
+
+			local obj_path = "../intermediate/" .. cfg .. "/" .. action .. "/" .. prj.name
+			
+			obj_path = string.lower(obj_path)
+			
+			configuration {cfg, plat}
+				targetdir(targetPath)
+				objdir(obj_path)
+				targetsuffix(suffix)
+		end
+	end
+end
+
+function linkLib(libBaseName)
+	for _, cfg in ipairs(configurations()) do
+		for _, plat in ipairs(platforms()) do
+			local action = _ACTION or ""
+			
+			local prj = project()
+			
+			local cfgName = cfg
+			
+			--"_debug_win32_vs2008"
+			local suffix = "_" .. cfgName .. "_" .. plat .. "_" .. action
+			
+			libFullName = libBaseName .. string.lower(suffix)
+			
+			configuration {cfg, plat}
+				links(libFullName)
+		end
+	end
+end
+
+solution "test"
+	configurations { "debug", "release" }
+	platforms { "x32", "x64" }
+
+	location ("./" .. (_ACTION or ""))
+	language "C++"
+	flags { "ExtraWarnings" }
+	
+	configuration "debug"
+		defines { "DEBUG" }
+		flags { "Symbols" }
+
+	configuration "release"
+		defines { "NDEBUG" }
+		flags { "Optimize" }
+
+	configuration "vs*"
+		defines { "_CRT_SECURE_NO_WARNINGS" }
+		
+	configuration "gmake"
+		buildoptions "-msse4.2 -Werror=cast-qual"
+
+	project "gtest"
+		kind "StaticLib"
+		
+		defines { "GTEST_HAS_PTHREAD=0" }
+
+		files { 
+			"../thirdparty/gtest/src/gtest-all.cc",
+			"../thirdparty/gtest/src/**.h",
+		}
+
+		includedirs {
+			"../thirdparty/gtest/",
+			"../thirdparty/gtest/include",
+		}
+
+		setTargetObjDir("../thirdparty/lib")
+
+	project "unittest"
+		kind "ConsoleApp"
+		
+		files { 
+			"../include/**.h",
+			"../test/unittest/**.cpp",
+			"../test/unittest/**.h",
+		}
+		
+		includedirs {
+			"../include/",
+			"../thirdparty/gtest/include/",
+		}
+
+		libdirs "../thirdparty/lib"
+
+		setTargetObjDir("../bin")
+
+		linkLib "gtest"
+		links "gtest"
+		
+	project "perftest"
+		kind "ConsoleApp"
+		
+		files { 
+			"../include/**.h",
+			"../test/perftest/**.cpp",
+			"../test/perftest/**.c",
+			"../test/perftest/**.h",
+		}
+		
+		includedirs {
+			"../include/",
+			"../thirdparty/gtest/include/",
+			"../thirdparty/",
+			"../thirdparty/jsoncpp/include/",
+			"../thirdparty/libjson/",
+			"../thirdparty/yajl/include/",
+		}
+
+		libdirs "../thirdparty/lib"
+
+		setTargetObjDir("../bin")
+
+		linkLib "gtest"
+		links "gtest"
+
+solution "example"
+	configurations { "debug", "release" }
+	platforms { "x32", "x64" }
+	location ("./" .. (_ACTION or ""))
+	language "C++"
+	flags { "ExtraWarnings" }
+	includedirs "../include/"
+
+	configuration "debug"
+		defines { "DEBUG" }
+		flags { "Symbols" }
+
+	configuration "release"
+		defines { "NDEBUG" }
+		flags { "Optimize", "EnableSSE2" }
+
+	configuration "vs*"
+		defines { "_CRT_SECURE_NO_WARNINGS" }
+
+	project "condense"
+		kind "ConsoleApp"
+		files "../example/condense/*"
+		setTargetObjDir("../bin")
+
+	project "pretty"
+		kind "ConsoleApp"
+		files "../example/pretty/*"
+		setTargetObjDir("../bin")
+
+	project "prettyauto"
+		kind "ConsoleApp"
+		files "../example/prettyauto/*"
+		setTargetObjDir("../bin")
+
+	project "tutorial"
+		kind "ConsoleApp"
+		files "../example/tutorial/*"
+		setTargetObjDir("../bin")
+
+	project "serialize"
+		kind "ConsoleApp"
+		files "../example/serialize/*"
+		setTargetObjDir("../bin")

+ 31 - 0
engine/source/persistence/rapidjson/example/condense/condense.cpp

@@ -0,0 +1,31 @@
+// JSON condenser exmaple
+
+// This example parses JSON text from stdin with validation, 
+// and re-output the JSON content to stdout without whitespace.
+
+#include "rapidjson/reader.h"
+#include "rapidjson/writer.h"
+#include "rapidjson/filereadstream.h"
+#include "rapidjson/filewritestream.h"
+
+using namespace rapidjson;
+
+int main(int, char*[]) {
+	// Prepare JSON reader and input stream.
+	Reader reader;
+	char readBuffer[65536];
+	FileReadStream is(stdin, readBuffer, sizeof(readBuffer));
+
+	// Prepare JSON writer and output stream.
+	char writeBuffer[65536];
+	FileWriteStream os(stdout, writeBuffer, sizeof(writeBuffer));
+	Writer<FileWriteStream> writer(os);
+
+	// JSON reader parse from the input stream and let writer generate the output.
+	if (!reader.Parse<0>(is, writer)) {
+		fprintf(stderr, "\nError(%u): %s\n", (unsigned)reader.GetErrorOffset(), reader.GetParseError());
+		return 1;
+	}
+
+	return 0;
+}

+ 29 - 0
engine/source/persistence/rapidjson/example/pretty/pretty.cpp

@@ -0,0 +1,29 @@
+// JSON pretty formatting example
+// This example can only handle UTF-8. For handling other encodings, see prettyauto example.
+
+#include "rapidjson/reader.h"
+#include "rapidjson/prettywriter.h"
+#include "rapidjson/filereadstream.h"
+#include "rapidjson/filewritestream.h"
+
+using namespace rapidjson;
+
+int main(int, char*[]) {
+	// Prepare reader and input stream.
+	Reader reader;
+	char readBuffer[65536];
+	FileReadStream is(stdin, readBuffer, sizeof(readBuffer));
+
+	// Prepare writer and output stream.
+	char writeBuffer[65536];
+	FileWriteStream os(stdout, writeBuffer, sizeof(writeBuffer));
+	PrettyWriter<FileWriteStream> writer(os);
+
+	// JSON reader parse from the input stream and let writer generate the output.
+	if (!reader.Parse<kParseValidateEncodingFlag>(is, writer)) {
+		fprintf(stderr, "\nError(%u): %s\n", (unsigned)reader.GetErrorOffset(), reader.GetParseError());
+		return 1;
+	}
+
+	return 0;
+}

+ 55 - 0
engine/source/persistence/rapidjson/example/prettyauto/prettyauto.cpp

@@ -0,0 +1,55 @@
+// JSON pretty formatting example
+// This example can handle UTF-8/UTF-16LE/UTF-16BE/UTF-32LE/UTF-32BE.
+// The input firstly convert to UTF8, and then write to the original encoding with pretty formatting.
+
+#include "rapidjson/reader.h"
+#include "rapidjson/prettywriter.h"
+#include "rapidjson/filereadstream.h"
+#include "rapidjson/filewritestream.h"
+#include "rapidjson/encodedstream.h"	// NEW
+#ifdef _WIN32
+#include <fcntl.h>
+#include <io.h>
+#endif
+
+using namespace rapidjson;
+
+int main(int, char*[]) {
+#ifdef _WIN32
+	// Prevent Windows converting between CR+LF and LF
+	_setmode(_fileno(stdin), _O_BINARY);	// NEW
+	_setmode(_fileno(stdout), _O_BINARY);	// NEW
+#endif
+
+	// Prepare reader and input stream.
+	//Reader reader;
+	GenericReader<AutoUTF<unsigned>, UTF8<> > reader;		// CHANGED
+	char readBuffer[65536];
+	FileReadStream is(stdin, readBuffer, sizeof(readBuffer));
+	AutoUTFInputStream<unsigned, FileReadStream> eis(is);	// NEW
+
+	// Prepare writer and output stream.
+	char writeBuffer[65536];
+	FileWriteStream os(stdout, writeBuffer, sizeof(writeBuffer));
+
+#if 1
+	// Use the same Encoding of the input. Also use BOM according to input.
+	typedef AutoUTFOutputStream<unsigned, FileWriteStream> OutputStream;	// NEW
+	OutputStream eos(os, eis.GetType(), eis.HasBOM());						// NEW
+	PrettyWriter<OutputStream, UTF8<>, AutoUTF<unsigned> > writer(eos);		// CHANGED
+#else
+	// You may also use static bound encoding type, such as output to UTF-16LE with BOM
+	typedef EncodedOutputStream<UTF16LE<>,FileWriteStream> OutputStream;	// NEW
+	OutputStream eos(os, true);												// NEW
+	PrettyWriter<OutputStream, UTF8<>, UTF16LE<> > writer(eos);				// CHANGED
+#endif
+
+	// JSON reader parse from the input stream and let writer generate the output.
+	//if (!reader.Parse<kParseValidateEncodingFlag>(is, writer)) {
+	if (!reader.Parse<kParseValidateEncodingFlag>(eis, writer)) {	// CHANGED
+		fprintf(stderr, "\nError(%u): %s\n", (unsigned)reader.GetErrorOffset(), reader.GetParseError());
+		return 1;
+	}
+
+	return 0;
+}

+ 129 - 0
engine/source/persistence/rapidjson/example/serialize/serialize.cpp

@@ -0,0 +1,129 @@
+// Serialize example
+// This example shows writing JSON string with writer directly.
+
+#include "rapidjson/prettywriter.h"	// for stringify JSON
+#include "rapidjson/filestream.h"	// wrapper of C stream for prettywriter as output
+#include <cstdio>
+#include <string>
+#include <vector>
+
+using namespace rapidjson;
+
+class Person {
+public:
+	Person(const std::string& name, unsigned age) : name_(name), age_(age) {}
+	virtual ~Person() {}
+
+protected:
+	template <typename Writer>
+	void Serialize(Writer& writer) const {
+		// This base class just write out name-value pairs, without wrapping within an object.
+		writer.String("name");
+		writer.String(name_.c_str(), (SizeType)name_.length());	// Suppling length of string is faster.
+
+		writer.String("age");
+		writer.Uint(age_);
+	}
+
+private:
+	std::string name_;
+	unsigned age_;
+};
+
+class Education {
+public:
+	Education(const std::string& school, double GPA) : school_(school), GPA_(GPA) {}
+
+	template <typename Writer>
+	void Serialize(Writer& writer) const {
+		writer.StartObject();
+		
+		writer.String("school");
+		writer.String(school_.c_str(), (SizeType)school_.length());
+
+		writer.String("GPA");
+		writer.Double(GPA_);
+
+		writer.EndObject();
+	}
+
+private:
+	std::string school_;
+	double GPA_;
+};
+
+class Dependent : public Person {
+public:
+	Dependent(const std::string& name, unsigned age, Education* education = 0) : Person(name, age), education_(education) {}
+	Dependent(const Dependent& rhs) : Person(rhs) { education_ = (rhs.education_ == 0) ? 0 : new Education(*rhs.education_); }
+	~Dependent() { delete education_; }
+
+	template <typename Writer>
+	void Serialize(Writer& writer) const {
+		writer.StartObject();
+
+		Person::Serialize(writer);
+
+		writer.String("education");
+		if (education_)
+			education_->Serialize(writer);
+		else
+			writer.Null();
+
+		writer.EndObject();
+	}
+
+private:
+	Education *education_;
+};
+
+class Employee : public Person {
+public:
+	Employee(const std::string& name, unsigned age, bool married) : Person(name, age), married_(married) {}
+
+	void AddDependent(const Dependent& dependent) {
+		dependents_.push_back(dependent);
+	}
+
+	template <typename Writer>
+	void Serialize(Writer& writer) const {
+		writer.StartObject();
+
+		Person::Serialize(writer);
+
+		writer.String("married");
+		writer.Bool(married_);
+
+		writer.String(("dependents"));
+		writer.StartArray();
+		for (std::vector<Dependent>::const_iterator dependentItr = dependents_.begin(); dependentItr != dependents_.end(); ++dependentItr)
+			dependentItr->Serialize(writer);
+		writer.EndArray();
+
+		writer.EndObject();
+	}
+
+private:
+	bool married_;
+	std::vector<Dependent> dependents_;
+};
+
+int main(int, char*[]) {
+	std::vector<Employee> employees;
+
+	employees.push_back(Employee("Milo YIP", 34, true));
+	employees.back().AddDependent(Dependent("Lua YIP", 3, new Education("Happy Kindergarten", 3.5)));
+	employees.back().AddDependent(Dependent("Mio YIP", 1));
+
+	employees.push_back(Employee("Percy TSE", 30, false));
+
+	FileStream s(stdout);
+	PrettyWriter<FileStream> writer(s);		// Can also use Writer for condensed formatting
+
+	writer.StartArray();
+	for (std::vector<Employee>::const_iterator employeeItr = employees.begin(); employeeItr != employees.end(); ++employeeItr)
+		employeeItr->Serialize(writer);
+	writer.EndArray();
+
+	return 0;
+}

+ 154 - 0
engine/source/persistence/rapidjson/example/tutorial/tutorial.cpp

@@ -0,0 +1,154 @@
+// Hello World example
+// This example shows basic usage of DOM-style API.
+
+#include "rapidjson/document.h"		// rapidjson's DOM-style API
+#include "rapidjson/prettywriter.h"	// for stringify JSON
+#include "rapidjson/filestream.h"	// wrapper of C stream for prettywriter as output
+#include <cstdio>
+
+using namespace rapidjson;
+
+int main(int, char*[]) {
+	////////////////////////////////////////////////////////////////////////////
+	// 1. Parse a JSON text string to a document.
+
+	const char json[] = " { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } ";
+	printf("Original JSON:\n %s\n", json);
+
+	Document document;	// Default template parameter uses UTF8 and MemoryPoolAllocator.
+
+#if 0
+	// "normal" parsing, decode strings to new buffers. Can use other input stream via ParseStream().
+	if (document.Parse<0>(json).HasParseError())
+		return 1;
+#else
+	// In-situ parsing, decode strings directly in the source string. Source must be string.
+	char buffer[sizeof(json)];
+	memcpy(buffer, json, sizeof(json));
+	if (document.ParseInsitu<0>(buffer).HasParseError())
+		return 1;
+#endif
+
+	printf("\nParsing to document succeeded.\n");
+
+	////////////////////////////////////////////////////////////////////////////
+	// 2. Access values in document. 
+
+	printf("\nAccess values in document:\n");
+	assert(document.IsObject());	// Document is a JSON value represents the root of DOM. Root can be either an object or array.
+
+	assert(document.HasMember("hello"));
+	assert(document["hello"].IsString());
+	printf("hello = %s\n", document["hello"].GetString());
+
+	// Since version 0.2, you can use single lookup to check the existing of member and its value:
+	Value::Member* hello = document.FindMember("hello");
+	assert(hello != 0);
+	assert(hello->value.IsString());
+	assert(strcmp("world", hello->value.GetString()) == 0);
+	(void)hello;
+
+	assert(document["t"].IsBool());		// JSON true/false are bool. Can also uses more specific function IsTrue().
+	printf("t = %s\n", document["t"].GetBool() ? "true" : "false");
+
+	assert(document["f"].IsBool());
+	printf("f = %s\n", document["f"].GetBool() ? "true" : "false");
+
+	printf("n = %s\n", document["n"].IsNull() ? "null" : "?");
+
+	assert(document["i"].IsNumber());	// Number is a JSON type, but C++ needs more specific type.
+	assert(document["i"].IsInt());		// In this case, IsUint()/IsInt64()/IsUInt64() also return true.
+	printf("i = %d\n", document["i"].GetInt());	// Alternative (int)document["i"]
+
+	assert(document["pi"].IsNumber());
+	assert(document["pi"].IsDouble());
+	printf("pi = %g\n", document["pi"].GetDouble());
+
+	{
+		const Value& a = document["a"];	// Using a reference for consecutive access is handy and faster.
+		assert(a.IsArray());
+		for (SizeType i = 0; i < a.Size(); i++)	// rapidjson uses SizeType instead of size_t.
+			printf("a[%d] = %d\n", i, a[i].GetInt());
+		
+		// Note:
+		//int x = a[0].GetInt();					// Error: operator[ is ambiguous, as 0 also mean a null pointer of const char* type.
+		int y = a[SizeType(0)].GetInt();			// Cast to SizeType will work.
+		int z = a[0u].GetInt();						// This works too.
+		(void)y;
+		(void)z;
+
+		// Iterating array with iterators
+		printf("a = ");
+		for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr)
+			printf("%d ", itr->GetInt());
+		printf("\n");
+	}
+
+	// Iterating object members
+	static const char* kTypeNames[] = { "Null", "False", "True", "Object", "Array", "String", "Number" };
+	for (Value::ConstMemberIterator itr = document.MemberBegin(); itr != document.MemberEnd(); ++itr)
+		printf("Type of member %s is %s\n", itr->name.GetString(), kTypeNames[itr->value.GetType()]);
+
+	////////////////////////////////////////////////////////////////////////////
+	// 3. Modify values in document.
+
+	// Change i to a bigger number
+	{
+		uint64_t f20 = 1;	// compute factorial of 20
+		for (uint64_t j = 1; j <= 20; j++)
+			f20 *= j;
+		document["i"] = f20;	// Alternate form: document["i"].SetUint64(f20)
+		assert(!document["i"].IsInt());	// No longer can be cast as int or uint.
+	}
+
+	// Adding values to array.
+	{
+		Value& a = document["a"];	// This time we uses non-const reference.
+		Document::AllocatorType& allocator = document.GetAllocator();
+		for (int i = 5; i <= 10; i++)
+			a.PushBack(i, allocator);	// May look a bit strange, allocator is needed for potentially realloc. We normally uses the document's.
+
+		// Fluent API
+		a.PushBack("Lua", allocator).PushBack("Mio", allocator);
+	}
+
+	// Making string values.
+
+	// This version of SetString() just store the pointer to the string.
+	// So it is for literal and string that exists within value's life-cycle.
+	{
+		document["hello"] = "rapidjson";	// This will invoke strlen()
+		// Faster version:
+		// document["hello"].SetString("rapidjson", 9);
+	}
+
+	// This version of SetString() needs an allocator, which means it will allocate a new buffer and copy the the string into the buffer.
+	Value author;
+	{
+		char buffer[10];
+		int len = sprintf(buffer, "%s %s", "Milo", "Yip");	// synthetic example of dynamically created string.
+
+		author.SetString(buffer, len, document.GetAllocator());
+		// Shorter but slower version:
+		// document["hello"].SetString(buffer, document.GetAllocator());
+
+		// Constructor version: 
+		// Value author(buffer, len, document.GetAllocator());
+		// Value author(buffer, document.GetAllocator());
+		memset(buffer, 0, sizeof(buffer)); // For demonstration purpose.
+	}
+	// Variable 'buffer' is unusable now but 'author' has already made a copy.
+	document.AddMember("author", author, document.GetAllocator());
+
+	assert(author.IsNull());		// Move semantic for assignment. After this variable is assigned as a member, the variable becomes null.
+
+	////////////////////////////////////////////////////////////////////////////
+	// 4. Stringify JSON
+
+	printf("\nModified JSON with reformatting:\n");
+	FileStream f(stdout);
+	PrettyWriter<FileStream> writer(f);
+	document.Accept(writer);	// Accept() traverses the DOM and generates Handler events.
+
+	return 0;
+}

+ 221 - 0
engine/source/persistence/rapidjson/include/rapidjson/allocators.h

@@ -0,0 +1,221 @@
+#ifndef RAPIDJSON_ALLOCATORS_H_
+#define RAPIDJSON_ALLOCATORS_H_
+
+#include "rapidjson.h"
+
+namespace rapidjson {
+
+///////////////////////////////////////////////////////////////////////////////
+// Allocator
+
+/*! \class rapidjson::Allocator
+	\brief Concept for allocating, resizing and freeing memory block.
+	
+	Note that Malloc() and Realloc() are non-static but Free() is static.
+	
+	So if an allocator need to support Free(), it needs to put its pointer in 
+	the header of memory block.
+
+\code
+concept Allocator {
+	static const bool kNeedFree;	//!< Whether this allocator needs to call Free().
+
+	// Allocate a memory block.
+	// \param size of the memory block in bytes.
+	// \returns pointer to the memory block.
+	void* Malloc(size_t size);
+
+	// Resize a memory block.
+	// \param originalPtr The pointer to current memory block. Null pointer is permitted.
+	// \param originalSize The current size in bytes. (Design issue: since some allocator may not book-keep this, explicitly pass to it can save memory.)
+	// \param newSize the new size in bytes.
+	void* Realloc(void* originalPtr, size_t originalSize, size_t newSize);
+
+	// Free a memory block.
+	// \param pointer to the memory block. Null pointer is permitted.
+	static void Free(void *ptr);
+};
+\endcode
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// CrtAllocator
+
+//! C-runtime library allocator.
+/*! This class is just wrapper for standard C library memory routines.
+	\implements Allocator
+*/
+class CrtAllocator {
+public:
+	static const bool kNeedFree = true;
+	void* Malloc(size_t size) { return malloc(size); }
+	void* Realloc(void* originalPtr, size_t originalSize, size_t newSize) { (void)originalSize; return realloc(originalPtr, newSize); }
+	static void Free(void *ptr) { free(ptr); }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// MemoryPoolAllocator
+
+//! Default memory allocator used by the parser and DOM.
+/*! This allocator allocate memory blocks from pre-allocated memory chunks. 
+
+    It does not free memory blocks. And Realloc() only allocate new memory.
+
+    The memory chunks are allocated by BaseAllocator, which is CrtAllocator by default.
+
+    User may also supply a buffer as the first chunk.
+
+    If the user-buffer is full then additional chunks are allocated by BaseAllocator.
+
+    The user-buffer is not deallocated by this allocator.
+
+    \tparam BaseAllocator the allocator type for allocating memory chunks. Default is CrtAllocator.
+	\implements Allocator
+*/
+template <typename BaseAllocator = CrtAllocator>
+class MemoryPoolAllocator {
+public:
+	static const bool kNeedFree = false;	//!< Tell users that no need to call Free() with this allocator. (concept Allocator)
+
+	//! Constructor with chunkSize.
+	/*! \param chunkSize The size of memory chunk. The default is kDefaultChunkSize.
+		\param baseAllocator The allocator for allocating memory chunks.
+	*/
+	MemoryPoolAllocator(size_t chunkSize = kDefaultChunkCapacity, BaseAllocator* baseAllocator = 0) : 
+		chunkHead_(0), chunk_capacity_(chunkSize), userBuffer_(0), baseAllocator_(baseAllocator), ownBaseAllocator_(0)
+	{
+		if (!baseAllocator_)
+			ownBaseAllocator_ = baseAllocator_ = new BaseAllocator();
+		AddChunk(chunk_capacity_);
+	}
+
+	//! Constructor with user-supplied buffer.
+	/*! The user buffer will be used firstly. When it is full, memory pool allocates new chunk with chunk size.
+
+		The user buffer will not be deallocated when this allocator is destructed.
+
+		\param buffer User supplied buffer.
+		\param size Size of the buffer in bytes. It must at least larger than sizeof(ChunkHeader).
+		\param chunkSize The size of memory chunk. The default is kDefaultChunkSize.
+		\param baseAllocator The allocator for allocating memory chunks.
+	*/
+	MemoryPoolAllocator(char *buffer, size_t size, size_t chunkSize = kDefaultChunkCapacity, BaseAllocator* baseAllocator = 0) :
+		chunkHead_(0), chunk_capacity_(chunkSize), userBuffer_(buffer), baseAllocator_(baseAllocator), ownBaseAllocator_(0)
+	{
+		RAPIDJSON_ASSERT(buffer != 0);
+		RAPIDJSON_ASSERT(size > sizeof(ChunkHeader));
+		chunkHead_ = (ChunkHeader*)buffer;
+		chunkHead_->capacity = size - sizeof(ChunkHeader);
+		chunkHead_->size = 0;
+		chunkHead_->next = 0;
+	}
+
+	//! Destructor.
+	/*! This deallocates all memory chunks, excluding the user-supplied buffer.
+	*/
+	~MemoryPoolAllocator() {
+		Clear();
+		delete ownBaseAllocator_;
+	}
+
+	//! Deallocates all memory chunks, excluding the user-supplied buffer.
+	void Clear() {
+		while(chunkHead_ != 0 && chunkHead_ != (ChunkHeader *)userBuffer_) {
+			ChunkHeader* next = chunkHead_->next;
+			baseAllocator_->Free(chunkHead_);
+			chunkHead_ = next;
+		}
+	}
+
+	//! Computes the total capacity of allocated memory chunks.
+	/*! \return total capacity in bytes.
+	*/
+	size_t Capacity() {
+		size_t capacity = 0;
+		for (ChunkHeader* c = chunkHead_; c != 0; c = c->next)
+			capacity += c->capacity;
+		return capacity;
+	}
+
+	//! Computes the memory blocks allocated.
+	/*! \return total used bytes.
+	*/
+	size_t Size() {
+		size_t size = 0;
+		for (ChunkHeader* c = chunkHead_; c != 0; c = c->next)
+			size += c->size;
+		return size;
+	}
+
+	//! Allocates a memory block. (concept Allocator)
+	void* Malloc(size_t size) {
+		size = RAPIDJSON_ALIGN(size);
+		if (chunkHead_->size + size > chunkHead_->capacity)
+			AddChunk(chunk_capacity_ > size ? chunk_capacity_ : size);
+
+		char *buffer = (char *)(chunkHead_ + 1) + chunkHead_->size;
+		chunkHead_->size += size;
+		return buffer;
+	}
+
+	//! Resizes a memory block (concept Allocator)
+	void* Realloc(void* originalPtr, size_t originalSize, size_t newSize) {
+		if (originalPtr == 0)
+			return Malloc(newSize);
+
+		// Do not shrink if new size is smaller than original
+		if (originalSize >= newSize)
+			return originalPtr;
+
+		// Simply expand it if it is the last allocation and there is sufficient space
+		if (originalPtr == (char *)(chunkHead_ + 1) + chunkHead_->size - originalSize) {
+			size_t increment = newSize - originalSize;
+			increment = RAPIDJSON_ALIGN(increment);
+			if (chunkHead_->size + increment <= chunkHead_->capacity) {
+				chunkHead_->size += increment;
+				return originalPtr;
+			}
+		}
+
+		// Realloc process: allocate and copy memory, do not free original buffer.
+		void* newBuffer = Malloc(newSize);
+		RAPIDJSON_ASSERT(newBuffer != 0);	// Do not handle out-of-memory explicitly.
+		return memcpy(newBuffer, originalPtr, originalSize);
+	}
+
+	//! Frees a memory block (concept Allocator)
+	static void Free(void *ptr) { (void)ptr; } // Do nothing
+
+private:
+	//! Creates a new chunk.
+	/*! \param capacity Capacity of the chunk in bytes.
+	*/
+	void AddChunk(size_t capacity) {
+		ChunkHeader* chunk = (ChunkHeader*)baseAllocator_->Malloc(sizeof(ChunkHeader) + capacity);
+		chunk->capacity = capacity;
+		chunk->size = 0;
+		chunk->next = chunkHead_;
+		chunkHead_ =  chunk;
+	}
+
+	static const int kDefaultChunkCapacity = 64 * 1024; //!< Default chunk capacity.
+
+	//! Chunk header for perpending to each chunk.
+	/*! Chunks are stored as a singly linked list.
+	*/
+	struct ChunkHeader {
+		size_t capacity;	//!< Capacity of the chunk in bytes (excluding the header itself).
+		size_t size;		//!< Current size of allocated memory in bytes.
+		ChunkHeader *next;	//!< Next chunk in the linked list.
+	};
+
+	ChunkHeader *chunkHead_;	//!< Head of the chunk linked-list. Only the head chunk serves allocation.
+	size_t chunk_capacity_;		//!< The minimum capacity of chunk when they are allocated.
+	char *userBuffer_;			//!< User supplied buffer.
+	BaseAllocator* baseAllocator_;	//!< base allocator for allocating memory chunks.
+	BaseAllocator* ownBaseAllocator_;	//!< base allocator created by this object.
+};
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_ENCODINGS_H_

+ 843 - 0
engine/source/persistence/rapidjson/include/rapidjson/document.h

@@ -0,0 +1,843 @@
+#ifndef RAPIDJSON_DOCUMENT_H_
+#define RAPIDJSON_DOCUMENT_H_
+
+#include "reader.h"
+#include "internal/strfunc.h"
+#include <new>		// placement new
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable : 4127) // conditional expression is constant
+#endif
+
+namespace rapidjson {
+
+///////////////////////////////////////////////////////////////////////////////
+// GenericValue
+
+//! Represents a JSON value. Use Value for UTF8 encoding and default allocator.
+/*!
+	A JSON value can be one of 7 types. This class is a variant type supporting
+	these types.
+
+	Use the Value if UTF8 and default allocator
+
+	\tparam Encoding	Encoding of the value. (Even non-string values need to have the same encoding in a document)
+	\tparam Allocator	Allocator type for allocating memory of object, array and string.
+*/
+#pragma pack (push, 4)
+template <typename Encoding, typename Allocator = MemoryPoolAllocator<> > 
+class GenericValue {
+public:
+	//! Name-value pair in an object.
+	struct Member { 
+		GenericValue<Encoding, Allocator> name;		//!< name of member (must be a string)
+		GenericValue<Encoding, Allocator> value;	//!< value of member.
+	};
+
+	typedef Encoding EncodingType;					//!< Encoding type from template parameter.
+	typedef Allocator AllocatorType;				//!< Allocator type from template parameter.
+	typedef typename Encoding::Ch Ch;				//!< Character type derived from Encoding.
+	typedef Member* MemberIterator;					//!< Member iterator for iterating in object.
+	typedef const Member* ConstMemberIterator;		//!< Constant member iterator for iterating in object.
+	typedef GenericValue* ValueIterator;			//!< Value iterator for iterating in array.
+	typedef const GenericValue* ConstValueIterator;	//!< Constant value iterator for iterating in array.
+
+	//!@name Constructors and destructor.
+	//@{
+
+	//! Default constructor creates a null value.
+	GenericValue() : flags_(kNullFlag) {}
+
+	//! Copy constructor is not permitted.
+private:
+	GenericValue(const GenericValue& rhs);
+
+public:
+
+	//! Constructor with JSON value type.
+	/*! This creates a Value of specified type with default content.
+		\param type	Type of the value.
+		\note Default content for number is zero.
+	*/
+	GenericValue(Type type) {
+		static const unsigned defaultFlags[7] = {
+			kNullFlag, kFalseFlag, kTrueFlag, kObjectFlag, kArrayFlag, kConstStringFlag,
+			kNumberFlag | kIntFlag | kUintFlag | kInt64Flag | kUint64Flag | kDoubleFlag
+		};
+		RAPIDJSON_ASSERT(type <= kNumberType);
+		flags_ = defaultFlags[type];
+		memset(&data_, 0, sizeof(data_));
+	}
+
+	//! Constructor for boolean value.
+	GenericValue(bool b) : flags_(b ? kTrueFlag : kFalseFlag) {}
+
+	//! Constructor for int value.
+	GenericValue(int i) : flags_(kNumberIntFlag) { 
+		data_.n.i64 = i;
+		if (i >= 0)
+			flags_ |= kUintFlag | kUint64Flag;
+	}
+
+	//! Constructor for unsigned value.
+	GenericValue(unsigned u) : flags_(kNumberUintFlag) {
+		data_.n.u64 = u; 
+		if (!(u & 0x80000000))
+			flags_ |= kIntFlag | kInt64Flag;
+	}
+
+	//! Constructor for int64_t value.
+	GenericValue(int64_t i64) : flags_(kNumberInt64Flag) {
+		data_.n.i64 = i64;
+		if (i64 >= 0) {
+			flags_ |= kNumberUint64Flag;
+			if (!(i64 & 0xFFFFFFFF00000000LL))
+				flags_ |= kUintFlag;
+			if (!(i64 & 0xFFFFFFFF80000000LL))
+				flags_ |= kIntFlag;
+		}
+		else if (i64 >= -2147483648LL)
+			flags_ |= kIntFlag;
+	}
+
+	//! Constructor for uint64_t value.
+	GenericValue(uint64_t u64) : flags_(kNumberUint64Flag) {
+		data_.n.u64 = u64;
+		if (!(u64 & 0x8000000000000000ULL))
+			flags_ |= kInt64Flag;
+		if (!(u64 & 0xFFFFFFFF00000000ULL))
+			flags_ |= kUintFlag;
+		if (!(u64 & 0xFFFFFFFF80000000ULL))
+			flags_ |= kIntFlag;
+	}
+
+	//! Constructor for double value.
+	GenericValue(double d) : flags_(kNumberDoubleFlag) { data_.n.d = d; }
+
+	//! Constructor for constant string (i.e. do not make a copy of string)
+	GenericValue(const Ch* s, SizeType length) { 
+		RAPIDJSON_ASSERT(s != NULL);
+		flags_ = kConstStringFlag;
+		data_.s.str = s;
+		data_.s.length = length;
+	}
+
+	//! Constructor for constant string (i.e. do not make a copy of string)
+	GenericValue(const Ch* s) { SetStringRaw(s, internal::StrLen(s)); }
+
+	//! Constructor for copy-string (i.e. do make a copy of string)
+	GenericValue(const Ch* s, SizeType length, Allocator& allocator) { SetStringRaw(s, length, allocator); }
+
+	//! Constructor for copy-string (i.e. do make a copy of string)
+	GenericValue(const Ch*s, Allocator& allocator) { SetStringRaw(s, internal::StrLen(s), allocator); }
+
+	//! Destructor.
+	/*! Need to destruct elements of array, members of object, or copy-string.
+	*/
+	~GenericValue() {
+		if (Allocator::kNeedFree) {	// Shortcut by Allocator's trait
+			switch(flags_) {
+			case kArrayFlag:
+				for (GenericValue* v = data_.a.elements; v != data_.a.elements + data_.a.size; ++v)
+					v->~GenericValue();
+				Allocator::Free(data_.a.elements);
+				break;
+
+			case kObjectFlag:
+				for (Member* m = data_.o.members; m != data_.o.members + data_.o.size; ++m) {
+					m->name.~GenericValue();
+					m->value.~GenericValue();
+				}
+				Allocator::Free(data_.o.members);
+				break;
+
+			case kCopyStringFlag:
+				Allocator::Free(const_cast<Ch*>(data_.s.str));
+				break;
+			}
+		}
+	}
+
+	//@}
+
+	//!@name Assignment operators
+	//@{
+
+	//! Assignment with move semantics.
+	/*! \param rhs Source of the assignment. It will become a null value after assignment.
+	*/
+	GenericValue& operator=(GenericValue& rhs) {
+		RAPIDJSON_ASSERT(this != &rhs);
+		this->~GenericValue();
+		memcpy(this, &rhs, sizeof(GenericValue));
+		rhs.flags_ = kNullFlag;
+		return *this;
+	}
+
+	//! Assignment with primitive types.
+	/*! \tparam T Either Type, int, unsigned, int64_t, uint64_t, const Ch*
+		\param value The value to be assigned.
+	*/
+	template <typename T>
+	GenericValue& operator=(T value) {
+		this->~GenericValue();
+		new (this) GenericValue(value);
+		return *this;
+	}
+	//@}
+
+	//!@name Type
+	//@{
+
+	Type GetType()	const { return static_cast<Type>(flags_ & kTypeMask); }
+	bool IsNull()	const { return flags_ == kNullFlag; }
+	bool IsFalse()	const { return flags_ == kFalseFlag; }
+	bool IsTrue()	const { return flags_ == kTrueFlag; }
+	bool IsBool()	const { return (flags_ & kBoolFlag) != 0; }
+	bool IsObject()	const { return flags_ == kObjectFlag; }
+	bool IsArray()	const { return flags_ == kArrayFlag; }
+	bool IsNumber() const { return (flags_ & kNumberFlag) != 0; }
+	bool IsInt()	const { return (flags_ & kIntFlag) != 0; }
+	bool IsUint()	const { return (flags_ & kUintFlag) != 0; }
+	bool IsInt64()	const { return (flags_ & kInt64Flag) != 0; }
+	bool IsUint64()	const { return (flags_ & kUint64Flag) != 0; }
+	bool IsDouble() const { return (flags_ & kDoubleFlag) != 0; }
+	bool IsString() const { return (flags_ & kStringFlag) != 0; }
+
+	//@}
+
+	//!@name Null
+	//@{
+
+	GenericValue& SetNull() { this->~GenericValue(); new (this) GenericValue(); return *this; }
+
+	//@}
+
+	//!@name Bool
+	//@{
+
+	bool GetBool() const { RAPIDJSON_ASSERT(IsBool()); return flags_ == kTrueFlag; }
+	GenericValue& SetBool(bool b) { this->~GenericValue(); new (this) GenericValue(b); return *this; }
+
+	//@}
+
+	//!@name Object
+	//@{
+
+	//! Set this value as an empty object.
+	GenericValue& SetObject() { this->~GenericValue(); new (this) GenericValue(kObjectType); return *this; }
+
+	//! Get the value associated with the name.
+	/*!
+		\note In version 0.1x, if the member is not found, this function returns a null value. This makes issue 7.
+		Since 0.2, if the name is not correct, it will assert.
+		If user is unsure whether a member exists, user should use HasMember() first.
+		A better approach is to use the now public FindMember().
+	*/
+	GenericValue& operator[](const Ch* name) {
+		if (Member* member = FindMember(name))
+			return member->value;
+		else {
+			RAPIDJSON_ASSERT(false);	// see above note
+			static GenericValue NullValue;
+			return NullValue;
+		}
+	}
+	const GenericValue& operator[](const Ch* name) const { return const_cast<GenericValue&>(*this)[name]; }
+
+	//! Member iterators.
+	ConstMemberIterator MemberBegin() const	{ RAPIDJSON_ASSERT(IsObject()); return data_.o.members; }
+	ConstMemberIterator MemberEnd()	const	{ RAPIDJSON_ASSERT(IsObject()); return data_.o.members + data_.o.size; }
+	MemberIterator MemberBegin()			{ RAPIDJSON_ASSERT(IsObject()); return data_.o.members; }
+	MemberIterator MemberEnd()				{ RAPIDJSON_ASSERT(IsObject()); return data_.o.members + data_.o.size; }
+
+	//! Check whether a member exists in the object.
+	/*!
+		\note It is better to use FindMember() directly if you need the obtain the value as well.
+	*/
+	bool HasMember(const Ch* name) const { return FindMember(name) != 0; }
+
+	//! Find member by name.
+	/*!
+		\return Return the member if exists. Otherwise returns null pointer.
+	*/
+	Member* FindMember(const Ch* name) {
+		RAPIDJSON_ASSERT(name);
+		RAPIDJSON_ASSERT(IsObject());
+
+		Object& o = data_.o;
+		for (Member* member = o.members; member != data_.o.members + data_.o.size; ++member)
+			if (name[member->name.data_.s.length] == '\0' && memcmp(member->name.data_.s.str, name, member->name.data_.s.length * sizeof(Ch)) == 0)
+				return member;
+
+		return 0;
+	}
+	const Member* FindMember(const Ch* name) const { return const_cast<GenericValue&>(*this).FindMember(name); }
+
+	//! Add a member (name-value pair) to the object.
+	/*! \param name A string value as name of member.
+		\param value Value of any type.
+	    \param allocator Allocator for reallocating memory.
+	    \return The value itself for fluent API.
+	    \note The ownership of name and value will be transfered to this object if success.
+	*/
+	GenericValue& AddMember(GenericValue& name, GenericValue& value, Allocator& allocator) {
+		RAPIDJSON_ASSERT(IsObject());
+		RAPIDJSON_ASSERT(name.IsString());
+		Object& o = data_.o;
+		if (o.size >= o.capacity) {
+			if (o.capacity == 0) {
+				o.capacity = kDefaultObjectCapacity;
+				o.members = (Member*)allocator.Malloc(o.capacity * sizeof(Member));
+			}
+			else {
+				SizeType oldCapacity = o.capacity;
+				o.capacity *= 2;
+				o.members = (Member*)allocator.Realloc(o.members, oldCapacity * sizeof(Member), o.capacity * sizeof(Member));
+			}
+		}
+		o.members[o.size].name.RawAssign(name);
+		o.members[o.size].value.RawAssign(value);
+		o.size++;
+		return *this;
+	}
+
+	GenericValue& AddMember(const Ch* name, Allocator& nameAllocator, GenericValue& value, Allocator& allocator) {
+		GenericValue n(name, internal::StrLen(name), nameAllocator);
+		return AddMember(n, value, allocator);
+	}
+
+	GenericValue& AddMember(const Ch* name, GenericValue& value, Allocator& allocator) {
+		GenericValue n(name, internal::StrLen(name));
+		return AddMember(n, value, allocator);
+	}
+
+	template <typename T>
+	GenericValue& AddMember(const Ch* name, T value, Allocator& allocator) {
+		GenericValue n(name, internal::StrLen(name));
+		GenericValue v(value);
+		return AddMember(n, v, allocator);
+	}
+
+	//! Remove a member in object by its name.
+	/*! \param name Name of member to be removed.
+	    \return Whether the member existed.
+	    \note Removing member is implemented by moving the last member. So the ordering of members is changed.
+	*/
+	bool RemoveMember(const Ch* name) {
+		RAPIDJSON_ASSERT(IsObject());
+		if (Member* m = FindMember(name)) {
+			RAPIDJSON_ASSERT(data_.o.size > 0);
+			RAPIDJSON_ASSERT(data_.o.members != 0);
+
+			Member* last = data_.o.members + (data_.o.size - 1);
+			if (data_.o.size > 1 && m != last) {
+				// Move the last one to this place
+				m->name = last->name;
+				m->value = last->value;
+			}
+			else {
+				// Only one left, just destroy
+				m->name.~GenericValue();
+				m->value.~GenericValue();
+			}
+			--data_.o.size;
+			return true;
+		}
+		return false;
+	}
+
+	//@}
+
+	//!@name Array
+	//@{
+
+	//! Set this value as an empty array.
+	GenericValue& SetArray() {	this->~GenericValue(); new (this) GenericValue(kArrayType); return *this; }
+
+	//! Get the number of elements in array.
+	SizeType Size() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.size; }
+
+	//! Get the capacity of array.
+	SizeType Capacity() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.capacity; }
+
+	//! Check whether the array is empty.
+	bool Empty() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.size == 0; }
+
+	//! Remove all elements in the array.
+	/*! This function do not deallocate memory in the array, i.e. the capacity is unchanged.
+	*/
+	void Clear() {
+		RAPIDJSON_ASSERT(IsArray()); 
+		for (SizeType i = 0; i < data_.a.size; ++i)
+			data_.a.elements[i].~GenericValue();
+		data_.a.size = 0;
+	}
+
+	//! Get an element from array by index.
+	/*! \param index Zero-based index of element.
+		\note
+\code
+Value a(kArrayType);
+a.PushBack(123);
+int x = a[0].GetInt();				// Error: operator[ is ambiguous, as 0 also mean a null pointer of const char* type.
+int y = a[SizeType(0)].GetInt();	// Cast to SizeType will work.
+int z = a[0u].GetInt();				// This works too.
+\endcode
+	*/
+	GenericValue& operator[](SizeType index) {
+		RAPIDJSON_ASSERT(IsArray());
+		RAPIDJSON_ASSERT(index < data_.a.size);
+		return data_.a.elements[index];
+	}
+	const GenericValue& operator[](SizeType index) const { return const_cast<GenericValue&>(*this)[index]; }
+
+	//! Element iterator
+	ValueIterator Begin() { RAPIDJSON_ASSERT(IsArray()); return data_.a.elements; }
+	ValueIterator End() { RAPIDJSON_ASSERT(IsArray()); return data_.a.elements + data_.a.size; }
+	ConstValueIterator Begin() const { return const_cast<GenericValue&>(*this).Begin(); }
+	ConstValueIterator End() const { return const_cast<GenericValue&>(*this).End(); }
+
+	//! Request the array to have enough capacity to store elements.
+	/*! \param newCapacity	The capacity that the array at least need to have.
+		\param allocator	The allocator for allocating memory. It must be the same one use previously.
+		\return The value itself for fluent API.
+	*/
+	GenericValue& Reserve(SizeType newCapacity, Allocator &allocator) {
+		RAPIDJSON_ASSERT(IsArray());
+		if (newCapacity > data_.a.capacity) {
+			data_.a.elements = (GenericValue*)allocator.Realloc(data_.a.elements, data_.a.capacity * sizeof(GenericValue), newCapacity * sizeof(GenericValue));
+			data_.a.capacity = newCapacity;
+		}
+		return *this;
+	}
+
+	//! Append a value at the end of the array.
+	/*! \param value		The value to be appended.
+	    \param allocator	The allocator for allocating memory. It must be the same one use previously.
+	    \return The value itself for fluent API.
+	    \note The ownership of the value will be transfered to this object if success.
+	    \note If the number of elements to be appended is known, calls Reserve() once first may be more efficient.
+	*/
+	GenericValue& PushBack(GenericValue& value, Allocator& allocator) {
+		RAPIDJSON_ASSERT(IsArray());
+		if (data_.a.size >= data_.a.capacity)
+			Reserve(data_.a.capacity == 0 ? kDefaultArrayCapacity : data_.a.capacity * 2, allocator);
+		data_.a.elements[data_.a.size++].RawAssign(value);
+		return *this;
+	}
+
+	template <typename T>
+	GenericValue& PushBack(T value, Allocator& allocator) {
+		GenericValue v(value);
+		return PushBack(v, allocator);
+	}
+
+	//! Remove the last element in the array.
+	GenericValue& PopBack() {
+		RAPIDJSON_ASSERT(IsArray());
+		RAPIDJSON_ASSERT(!Empty());
+		data_.a.elements[--data_.a.size].~GenericValue();
+		return *this;
+	}
+	//@}
+
+	//!@name Number
+	//@{
+
+	int GetInt() const			{ RAPIDJSON_ASSERT(flags_ & kIntFlag);   return data_.n.i.i;   }
+	unsigned GetUint() const	{ RAPIDJSON_ASSERT(flags_ & kUintFlag);  return data_.n.u.u;   }
+	int64_t GetInt64() const	{ RAPIDJSON_ASSERT(flags_ & kInt64Flag); return data_.n.i64; }
+	uint64_t GetUint64() const	{ RAPIDJSON_ASSERT(flags_ & kUint64Flag); return data_.n.u64; }
+
+	double GetDouble() const {
+		RAPIDJSON_ASSERT(IsNumber());
+		if ((flags_ & kDoubleFlag) != 0)				return data_.n.d;	// exact type, no conversion.
+		if ((flags_ & kIntFlag) != 0)					return data_.n.i.i;	// int -> double
+		if ((flags_ & kUintFlag) != 0)					return data_.n.u.u;	// unsigned -> double
+		if ((flags_ & kInt64Flag) != 0)					return (double)data_.n.i64; // int64_t -> double (may lose precision)
+		RAPIDJSON_ASSERT((flags_ & kUint64Flag) != 0);	return (double)data_.n.u64;	// uint64_t -> double (may lose precision)
+	}
+
+	GenericValue& SetInt(int i)				{ this->~GenericValue(); new (this) GenericValue(i);	return *this; }
+	GenericValue& SetUint(unsigned u)		{ this->~GenericValue(); new (this) GenericValue(u);	return *this; }
+	GenericValue& SetInt64(int64_t i64)		{ this->~GenericValue(); new (this) GenericValue(i64);	return *this; }
+	GenericValue& SetUint64(uint64_t u64)	{ this->~GenericValue(); new (this) GenericValue(u64);	return *this; }
+	GenericValue& SetDouble(double d)		{ this->~GenericValue(); new (this) GenericValue(d);	return *this; }
+
+	//@}
+
+	//!@name String
+	//@{
+
+	const Ch* GetString() const { RAPIDJSON_ASSERT(IsString()); return data_.s.str; }
+
+	//! Get the length of string.
+	/*! Since rapidjson permits "\u0000" in the json string, strlen(v.GetString()) may not equal to v.GetStringLength().
+	*/
+	SizeType GetStringLength() const { RAPIDJSON_ASSERT(IsString()); return data_.s.length; }
+
+	//! Set this value as a string without copying source string.
+	/*! This version has better performance with supplied length, and also support string containing null character.
+		\param s source string pointer. 
+		\param length The length of source string, excluding the trailing null terminator.
+		\return The value itself for fluent API.
+	*/
+	GenericValue& SetString(const Ch* s, SizeType length) { this->~GenericValue(); SetStringRaw(s, length); return *this; }
+
+	//! Set this value as a string without copying source string.
+	/*! \param s source string pointer. 
+		\return The value itself for fluent API.
+	*/
+	GenericValue& SetString(const Ch* s) { return SetString(s, internal::StrLen(s)); }
+
+	//! Set this value as a string by copying from source string.
+	/*! This version has better performance with supplied length, and also support string containing null character.
+		\param s source string. 
+		\param length The length of source string, excluding the trailing null terminator.
+		\param allocator Allocator for allocating copied buffer. Commonly use document.GetAllocator().
+		\return The value itself for fluent API.
+	*/
+	GenericValue& SetString(const Ch* s, SizeType length, Allocator& allocator) { this->~GenericValue(); SetStringRaw(s, length, allocator); return *this; }
+
+	//! Set this value as a string by copying from source string.
+	/*!	\param s source string. 
+		\param allocator Allocator for allocating copied buffer. Commonly use document.GetAllocator().
+		\return The value itself for fluent API.
+	*/
+	GenericValue& SetString(const Ch* s, Allocator& allocator) {	SetString(s, internal::StrLen(s), allocator); return *this; }
+
+	//@}
+
+	//! Generate events of this value to a Handler.
+	/*! This function adopts the GoF visitor pattern.
+		Typical usage is to output this JSON value as JSON text via Writer, which is a Handler.
+		It can also be used to deep clone this value via GenericDocument, which is also a Handler.
+		\tparam Handler type of handler.
+		\param handler An object implementing concept Handler.
+	*/
+	template <typename Handler>
+	const GenericValue& Accept(Handler& handler) const {
+		switch(GetType()) {
+		case kNullType:		handler.Null(); break;
+		case kFalseType:	handler.Bool(false); break;
+		case kTrueType:		handler.Bool(true); break;
+
+		case kObjectType:
+			handler.StartObject();
+			for (Member* m = data_.o.members; m != data_.o.members + data_.o.size; ++m) {
+				handler.String(m->name.data_.s.str, m->name.data_.s.length, false);
+				m->value.Accept(handler);
+			}
+			handler.EndObject(data_.o.size);
+			break;
+
+		case kArrayType:
+			handler.StartArray();
+			for (GenericValue* v = data_.a.elements; v != data_.a.elements + data_.a.size; ++v)
+				v->Accept(handler);
+			handler.EndArray(data_.a.size);
+			break;
+
+		case kStringType:
+			handler.String(data_.s.str, data_.s.length, false);
+			break;
+
+		case kNumberType:
+			if (IsInt())			handler.Int(data_.n.i.i);
+			else if (IsUint())		handler.Uint(data_.n.u.u);
+			else if (IsInt64())		handler.Int64(data_.n.i64);
+			else if (IsUint64())	handler.Uint64(data_.n.u64);
+			else					handler.Double(data_.n.d);
+			break;
+		}
+		return *this;
+	}
+
+private:
+	template <typename, typename>
+	friend class GenericDocument;
+
+	enum {
+		kBoolFlag = 0x100,
+		kNumberFlag = 0x200,
+		kIntFlag = 0x400,
+		kUintFlag = 0x800,
+		kInt64Flag = 0x1000,
+		kUint64Flag = 0x2000,
+		kDoubleFlag = 0x4000,
+		kStringFlag = 0x100000,
+		kCopyFlag = 0x200000,
+
+		// Initial flags of different types.
+		kNullFlag = kNullType,
+		kTrueFlag = kTrueType | kBoolFlag,
+		kFalseFlag = kFalseType | kBoolFlag,
+		kNumberIntFlag = kNumberType | kNumberFlag | kIntFlag | kInt64Flag,
+		kNumberUintFlag = kNumberType | kNumberFlag | kUintFlag | kUint64Flag | kInt64Flag,
+		kNumberInt64Flag = kNumberType | kNumberFlag | kInt64Flag,
+		kNumberUint64Flag = kNumberType | kNumberFlag | kUint64Flag,
+		kNumberDoubleFlag = kNumberType | kNumberFlag | kDoubleFlag,
+		kConstStringFlag = kStringType | kStringFlag,
+		kCopyStringFlag = kStringType | kStringFlag | kCopyFlag,
+		kObjectFlag = kObjectType,
+		kArrayFlag = kArrayType,
+
+		kTypeMask = 0xFF	// bitwise-and with mask of 0xFF can be optimized by compiler
+	};
+
+	static const SizeType kDefaultArrayCapacity = 16;
+	static const SizeType kDefaultObjectCapacity = 16;
+
+	struct String {
+		const Ch* str;
+		SizeType length;
+		unsigned hashcode;	//!< reserved
+	};	// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode
+
+	// By using proper binary layout, retrieval of different integer types do not need conversions.
+	union Number {
+#if RAPIDJSON_ENDIAN == RAPIDJSON_LITTLEENDIAN
+		struct I {
+			int i;
+			char padding[4];
+		}i;
+		struct U {
+			unsigned u;
+			char padding2[4];
+		}u;
+#else
+		struct I {
+			char padding[4];
+			int i;
+		}i;
+		struct U {
+			char padding2[4];
+			unsigned u;
+		}u;
+#endif
+		int64_t i64;
+		uint64_t u64;
+		double d;
+	};	// 8 bytes
+
+	struct Object {
+		Member* members;
+		SizeType size;
+		SizeType capacity;
+	};	// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode
+
+	struct Array {
+		GenericValue<Encoding, Allocator>* elements;
+		SizeType size;
+		SizeType capacity;
+	};	// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode
+
+	union Data {
+		String s;
+		Number n;
+		Object o;
+		Array a;
+	};	// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode
+
+	// Initialize this value as array with initial data, without calling destructor.
+	void SetArrayRaw(GenericValue* values, SizeType count, Allocator& alloctaor) {
+		flags_ = kArrayFlag;
+		data_.a.elements = (GenericValue*)alloctaor.Malloc(count * sizeof(GenericValue));
+		memcpy(data_.a.elements, values, count * sizeof(GenericValue));
+		data_.a.size = data_.a.capacity = count;
+	}
+
+	//! Initialize this value as object with initial data, without calling destructor.
+	void SetObjectRaw(Member* members, SizeType count, Allocator& alloctaor) {
+		flags_ = kObjectFlag;
+		data_.o.members = (Member*)alloctaor.Malloc(count * sizeof(Member));
+		memcpy(data_.o.members, members, count * sizeof(Member));
+		data_.o.size = data_.o.capacity = count;
+	}
+
+	//! Initialize this value as constant string, without calling destructor.
+	void SetStringRaw(const Ch* s, SizeType length) {
+		RAPIDJSON_ASSERT(s != NULL);
+		flags_ = kConstStringFlag;
+		data_.s.str = s;
+		data_.s.length = length;
+	}
+
+	//! Initialize this value as copy string with initial data, without calling destructor.
+	void SetStringRaw(const Ch* s, SizeType length, Allocator& allocator) {
+		RAPIDJSON_ASSERT(s != NULL);
+		flags_ = kCopyStringFlag;
+		data_.s.str = (Ch *)allocator.Malloc((length + 1) * sizeof(Ch));
+		data_.s.length = length;
+		memcpy(const_cast<Ch*>(data_.s.str), s, length * sizeof(Ch));
+		const_cast<Ch*>(data_.s.str)[length] = '\0';
+	}
+
+	//! Assignment without calling destructor
+	void RawAssign(GenericValue& rhs) {
+		memcpy(this, &rhs, sizeof(GenericValue));
+		rhs.flags_ = kNullFlag;
+	}
+
+	Data data_;
+	unsigned flags_;
+};
+#pragma pack (pop)
+
+//! Value with UTF8 encoding.
+typedef GenericValue<UTF8<> > Value;
+
+///////////////////////////////////////////////////////////////////////////////
+// GenericDocument 
+
+//! A document for parsing JSON text as DOM.
+/*!
+	\implements Handler
+	\tparam Encoding encoding for both parsing and string storage.
+	\tparam Alloactor allocator for allocating memory for the DOM, and the stack during parsing.
+*/
+template <typename Encoding, typename Allocator = MemoryPoolAllocator<> >
+class GenericDocument : public GenericValue<Encoding, Allocator> {
+public:
+	typedef typename Encoding::Ch Ch;						//!< Character type derived from Encoding.
+	typedef GenericValue<Encoding, Allocator> ValueType;	//!< Value type of the document.
+	typedef Allocator AllocatorType;						//!< Allocator type from template parameter.
+
+	//! Constructor
+	/*! \param allocator		Optional allocator for allocating stack memory.
+		\param stackCapacity	Initial capacity of stack in bytes.
+	*/
+	GenericDocument(Allocator* allocator = 0, size_t stackCapacity = kDefaultStackCapacity) : stack_(allocator, stackCapacity), parseError_(0), errorOffset_(0) {}
+
+	//! Parse JSON text from an input stream.
+	/*! \tparam parseFlags Combination of ParseFlag.
+		\param stream Input stream to be parsed.
+		\return The document itself for fluent API.
+	*/
+	template <unsigned parseFlags, typename SourceEncoding, typename InputStream>
+	GenericDocument& ParseStream(InputStream& is) {
+		ValueType::SetNull(); // Remove existing root if exist
+		GenericReader<SourceEncoding, Encoding, Allocator> reader;
+		if (reader.template Parse<parseFlags>(is, *this)) {
+			RAPIDJSON_ASSERT(stack_.GetSize() == sizeof(ValueType)); // Got one and only one root object
+			this->RawAssign(*stack_.template Pop<ValueType>(1));	// Add this-> to prevent issue 13.
+			parseError_ = 0;
+			errorOffset_ = 0;
+		}
+		else {
+			parseError_ = reader.GetParseError();
+			errorOffset_ = reader.GetErrorOffset();
+			ClearStack();
+		}
+		return *this;
+	}
+
+	//! Parse JSON text from a mutable string.
+	/*! \tparam parseFlags Combination of ParseFlag.
+		\param str Mutable zero-terminated string to be parsed.
+		\return The document itself for fluent API.
+	*/
+	template <unsigned parseFlags, typename SourceEncoding>
+	GenericDocument& ParseInsitu(Ch* str) {
+		GenericInsituStringStream<Encoding> s(str);
+		return ParseStream<parseFlags | kParseInsituFlag, SourceEncoding>(s);
+	}
+
+	template <unsigned parseFlags>
+	GenericDocument& ParseInsitu(Ch* str) {
+		return ParseInsitu<parseFlags, Encoding>(str);
+	}
+
+	//! Parse JSON text from a read-only string.
+	/*! \tparam parseFlags Combination of ParseFlag (must not contain kParseInsituFlag).
+		\param str Read-only zero-terminated string to be parsed.
+	*/
+	template <unsigned parseFlags, typename SourceEncoding>
+	GenericDocument& Parse(const Ch* str) {
+		RAPIDJSON_ASSERT(!(parseFlags & kParseInsituFlag));
+		GenericStringStream<SourceEncoding> s(str);
+		return ParseStream<parseFlags, SourceEncoding>(s);
+	}
+
+	template <unsigned parseFlags>
+	GenericDocument& Parse(const Ch* str) {
+		return Parse<parseFlags, Encoding>(str);
+	}
+
+	//! Whether a parse error was occured in the last parsing.
+	bool HasParseError() const { return parseError_ != 0; }
+
+	//! Get the message of parsing error.
+	const char* GetParseError() const { return parseError_; }
+
+	//! Get the offset in character of the parsing error.
+	size_t GetErrorOffset() const { return errorOffset_; }
+
+	//! Get the allocator of this document.
+	Allocator& GetAllocator() {	return stack_.GetAllocator(); }
+
+	//! Get the capacity of stack in bytes.
+	size_t GetStackCapacity() const { return stack_.GetCapacity(); }
+
+//private:
+	//friend class GenericReader<Encoding>;	// for Reader to call the following private handler functions
+
+	// Implementation of Handler
+	void Null()	{ new (stack_.template Push<ValueType>()) ValueType(); }
+	void Bool(bool b) { new (stack_.template Push<ValueType>()) ValueType(b); }
+	void Int(int i) { new (stack_.template Push<ValueType>()) ValueType(i); }
+	void Uint(unsigned i) { new (stack_.template Push<ValueType>()) ValueType(i); }
+	void Int64(int64_t i) { new (stack_.template Push<ValueType>()) ValueType(i); }
+	void Uint64(uint64_t i) { new (stack_.template Push<ValueType>()) ValueType(i); }
+	void Double(double d) { new (stack_.template Push<ValueType>()) ValueType(d); }
+
+	void String(const Ch* str, SizeType length, bool copy) { 
+		if (copy) 
+			new (stack_.template Push<ValueType>()) ValueType(str, length, GetAllocator());
+		else
+			new (stack_.template Push<ValueType>()) ValueType(str, length);
+	}
+
+	void StartObject() { new (stack_.template Push<ValueType>()) ValueType(kObjectType); }
+	
+	void EndObject(SizeType memberCount) {
+		typename ValueType::Member* members = stack_.template Pop<typename ValueType::Member>(memberCount);
+		stack_.template Top<ValueType>()->SetObjectRaw(members, (SizeType)memberCount, GetAllocator());
+	}
+
+	void StartArray() { new (stack_.template Push<ValueType>()) ValueType(kArrayType); }
+	
+	void EndArray(SizeType elementCount) {
+		ValueType* elements = stack_.template Pop<ValueType>(elementCount);
+		stack_.template Top<ValueType>()->SetArrayRaw(elements, elementCount, GetAllocator());
+	}
+
+private:
+	// Prohibit assignment
+	GenericDocument& operator=(const GenericDocument&);
+
+	void ClearStack() {
+		if (Allocator::kNeedFree)
+			while (stack_.GetSize() > 0)	// Here assumes all elements in stack array are GenericValue (Member is actually 2 GenericValue objects)
+				(stack_.template Pop<ValueType>(1))->~ValueType();
+		else
+			stack_.Clear();
+	}
+
+	static const size_t kDefaultStackCapacity = 1024;
+	internal::Stack<Allocator> stack_;
+	const char* parseError_;
+	size_t errorOffset_;
+};
+
+typedef GenericDocument<UTF8<> > Document;
+
+} // namespace rapidjson
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+#endif // RAPIDJSON_DOCUMENT_H_

+ 250 - 0
engine/source/persistence/rapidjson/include/rapidjson/encodedstream.h

@@ -0,0 +1,250 @@
+#ifndef RAPIDJSON_ENCODEDSTREAM_H_
+#define RAPIDJSON_ENCODEDSTREAM_H_
+
+#include "rapidjson.h"
+
+namespace rapidjson {
+
+//! Input byte stream wrapper with a statically bound encoding.
+/*!
+	\tparam Encoding The interpretation of encoding of the stream. Either UTF8, UTF16LE, UTF16BE, UTF32LE, UTF32BE.
+	\tparam InputByteStream Type of input byte stream. For example, FileReadStream.
+*/
+template <typename Encoding, typename InputByteStream>
+class EncodedInputStream {
+	RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+public:
+	typedef typename Encoding::Ch Ch;
+
+	EncodedInputStream(InputByteStream& is) : is_(is) { 
+		current_ = Encoding::TakeBOM(is_);
+	}
+
+	Ch Peek() const { return current_; }
+	Ch Take() { Ch c = current_; current_ = Encoding::Take(is_); return c; }
+	size_t Tell() const { return is_.Tell(); }
+
+	// Not implemented
+	void Put(Ch c) { RAPIDJSON_ASSERT(false); }
+	void Flush() { RAPIDJSON_ASSERT(false); } 
+	Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
+	size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
+
+private:
+	// Prohibit assignment for VC C4512 warning
+	EncodedInputStream& operator=(const EncodedInputStream&);
+
+	InputByteStream& is_;
+	Ch current_;
+};
+
+//! Output byte stream wrapper with statically bound encoding.
+/*!
+	\tparam Encoding The interpretation of encoding of the stream. Either UTF8, UTF16LE, UTF16BE, UTF32LE, UTF32BE.
+	\tparam InputByteStream Type of input byte stream. For example, FileWriteStream.
+*/
+template <typename Encoding, typename OutputByteStream>
+class EncodedOutputStream {
+	RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+public:
+	typedef typename Encoding::Ch Ch;
+
+	EncodedOutputStream(OutputByteStream& os, bool putBOM = true) : os_(os) { 
+		if (putBOM)
+			Encoding::PutBOM(os_);
+	}
+
+	void Put(Ch c) { Encoding::Put(os_, c);  }
+	void Flush() { os_.Flush(); }
+
+	// Not implemented
+	Ch Peek() const { RAPIDJSON_ASSERT(false); }
+	Ch Take() { RAPIDJSON_ASSERT(false);  }
+	size_t Tell() const { RAPIDJSON_ASSERT(false);  return 0; }
+	Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
+	size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
+
+private:
+	// Prohibit assignment for VC C4512 warning
+	EncodedOutputStream& operator=(const EncodedOutputStream&);
+
+	OutputByteStream& os_;
+};
+
+#define RAPIDJSON_ENCODINGS_FUNC(x) UTF8<Ch>::x, UTF16LE<Ch>::x, UTF16BE<Ch>::x, UTF32LE<Ch>::x, UTF32BE<Ch>::x
+
+//! Input stream wrapper with dynamically bound encoding and automatic encoding detection.
+/*!
+	\tparam CharType Type of character for reading.
+	\tparam InputByteStream type of input byte stream to be wrapped.
+*/
+template <typename CharType, typename InputByteStream>
+class AutoUTFInputStream {
+	RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+public:
+	typedef CharType Ch;
+
+	//! Constructor.
+	/*!
+		\param is input stream to be wrapped.
+		\param type UTF encoding type if it is not detected from the stream.
+	*/
+	AutoUTFInputStream(InputByteStream& is, UTFType type = kUTF8) : is_(&is), type_(type), hasBOM_(false) {
+		DetectType();
+		static const TakeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Take) };
+		takeFunc_ = f[type_];
+		current_ = takeFunc_(*is_);
+	}
+
+	UTFType GetType() const { return type_; }
+	bool HasBOM() const { return hasBOM_; }
+
+	Ch Peek() const { return current_; }
+	Ch Take() { Ch c = current_; current_ = takeFunc_(*is_); return c; }
+	size_t Tell() const { return is_->Tell(); }
+
+	// Not implemented
+	void Put(Ch) { RAPIDJSON_ASSERT(false); }
+	void Flush() { RAPIDJSON_ASSERT(false); } 
+	Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
+	size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
+
+private:
+	// Detect encoding type with BOM or RFC 4627
+	void DetectType() {
+		// BOM (Byte Order Mark):
+		// 00 00 FE FF  UTF-32BE
+		// FF FE 00 00  UTF-32LE
+		// FE FF		UTF-16BE
+		// FF FE		UTF-16LE
+		// EF BB BF		UTF-8
+
+		const unsigned char* c = (const unsigned char *)is_->Peek4();
+		if (!c)
+			return;
+
+		unsigned bom = c[0] | (c[1] << 8) | (c[2] << 16) | (c[3] << 24);
+		hasBOM_ = false;
+		if (bom == 0xFFFE0000)					{ type_ = kUTF32BE; hasBOM_ = true; is_->Take(); is_->Take(); is_->Take(); is_->Take(); }
+		else if (bom == 0x0000FEFF)				{ type_ = kUTF32LE;	hasBOM_ = true;	is_->Take(); is_->Take(); is_->Take(); is_->Take();	}
+		else if ((bom & 0xFFFF) == 0xFFFE)		{ type_ = kUTF16BE; hasBOM_ = true; is_->Take(); is_->Take();							}
+		else if ((bom & 0xFFFF) == 0xFEFF)		{ type_ = kUTF16LE; hasBOM_ = true; is_->Take(); is_->Take();							}
+		else if ((bom & 0xFFFFFF) == 0xBFBBEF)	{ type_ = kUTF8;	hasBOM_ = true; is_->Take(); is_->Take(); is_->Take();				}
+
+		// RFC 4627: Section 3
+		// "Since the first two characters of a JSON text will always be ASCII
+		// characters [RFC0020], it is possible to determine whether an octet
+		// stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking
+		// at the pattern of nulls in the first four octets."
+		// 00 00 00 xx  UTF-32BE
+		// 00 xx 00 xx  UTF-16BE
+		// xx 00 00 00  UTF-32LE
+		// xx 00 xx 00  UTF-16LE
+		// xx xx xx xx  UTF-8
+
+		if (!hasBOM_) {
+			unsigned pattern = (c[0] ? 1 : 0) | (c[1] ? 2 : 0) | (c[2] ? 4 : 0) | (c[3] ? 8 : 0);
+			switch (pattern) {
+			case 0x08: type_ = kUTF32BE; break;
+			case 0x0A: type_ = kUTF16BE; break;
+			case 0x01: type_ = kUTF32LE; break;
+			case 0x05: type_ = kUTF16LE; break;
+			case 0x0F: type_ = kUTF8;    break;
+			}
+		}
+
+		// RUntime check whether the size of character type is sufficient. It only perform checks with assertion.
+		switch (type_) {
+		case kUTF8:
+			// Do nothing
+			break;
+		case kUTF16LE:
+		case kUTF16BE:
+			RAPIDJSON_ASSERT(sizeof(Ch) >= 2);
+			break;
+		case kUTF32LE:
+		case kUTF32BE:
+			RAPIDJSON_ASSERT(sizeof(Ch) >= 4);
+			break;
+		}
+	}
+
+	typedef Ch (*TakeFunc)(InputByteStream& is);
+	InputByteStream* is_;
+	UTFType type_;
+	Ch current_;
+	TakeFunc takeFunc_;
+	bool hasBOM_;
+};
+
+//! Output stream wrapper with dynamically bound encoding and automatic encoding detection.
+/*!
+	\tparam CharType Type of character for writing.
+	\tparam InputByteStream type of output byte stream to be wrapped.
+*/
+template <typename CharType, typename OutputByteStream>
+class AutoUTFOutputStream {
+	RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+public:
+	typedef CharType Ch;
+
+	//! Constructor.
+	/*!
+		\param os output stream to be wrapped.
+		\param type UTF encoding type.
+		\param putBOM Whether to write BOM at the beginning of the stream.
+	*/
+	AutoUTFOutputStream(OutputByteStream& os, UTFType type, bool putBOM) : os_(&os), type_(type) {
+		// RUntime check whether the size of character type is sufficient. It only perform checks with assertion.
+		switch (type_) {
+		case kUTF16LE:
+		case kUTF16BE:
+			RAPIDJSON_ASSERT(sizeof(Ch) >= 2);
+			break;
+		case kUTF32LE:
+		case kUTF32BE:
+			RAPIDJSON_ASSERT(sizeof(Ch) >= 4);
+			break;
+		case kUTF8:
+			// Do nothing
+			break;
+		}
+
+		static const PutFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Put) };
+		putFunc_ = f[type_];
+
+		if (putBOM)
+			PutBOM();
+	}
+
+	UTFType GetType() const { return type_; }
+
+	void Put(Ch c) { putFunc_(*os_, c); }
+	void Flush() { os_->Flush(); } 
+
+	// Not implemented
+	Ch Peek() const { RAPIDJSON_ASSERT(false); }
+	Ch Take() { RAPIDJSON_ASSERT(false); }
+	size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; }
+	Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
+	size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
+
+private:
+	void PutBOM() { 
+		typedef void (*PutBOMFunc)(OutputByteStream&);
+		static const PutBOMFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(PutBOM) };
+		f[type_](*os_);
+	}
+
+	typedef void (*PutFunc)(OutputByteStream&, Ch);
+
+	OutputByteStream* os_;
+	UTFType type_;
+	PutFunc putFunc_;
+};
+
+#undef RAPIDJSON_ENCODINGS_FUNC
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_FILESTREAM_H_

+ 527 - 0
engine/source/persistence/rapidjson/include/rapidjson/encodings.h

@@ -0,0 +1,527 @@
+#ifndef RAPIDJSON_ENCODINGS_H_
+#define RAPIDJSON_ENCODINGS_H_
+
+#include "rapidjson.h"
+
+namespace rapidjson {
+
+///////////////////////////////////////////////////////////////////////////////
+// Encoding
+
+/*! \class rapidjson::Encoding
+	\brief Concept for encoding of Unicode characters.
+
+\code
+concept Encoding {
+	typename Ch;	//! Type of character. A "character" is actually a code unit in unicode's definition.
+
+	//! \brief Encode a Unicode codepoint to an output stream.
+	//! \param os Output stream.
+	//! \param codepoint An unicode codepoint, ranging from 0x0 to 0x10FFFF inclusively.
+	template<typename OutputStream>
+	static void Encode(OutputStream& os, unsigned codepoint);
+
+	//! \brief Decode a Unicode codepoint from an input stream.
+	//! \param is Input stream.
+	//! \param codepoint Output of the unicode codepoint.
+	//! \return true if a valid codepoint can be decoded from the stream.
+	template <typename InputStream>
+	static bool Decode(InputStream& is, unsigned* codepoint);
+
+	//! \brief Validate one Unicode codepoint from an encoded stream.
+	//! \param is Input stream to obtain codepoint.
+	//! \param os Output for copying one codepoint.
+	//! \return true if it is valid.
+	//! \note This function just validating and copying the codepoint without actually decode it.
+	template <typename InputStream, typename OutputStream>
+	static bool Validate(InputStream& is, OutputStream& os);
+
+	// The following functions are deal with byte streams.
+
+	//! Take a character from input byte stream, skip BOM if exist.
+	template <typename InputByteStream>
+	static CharType TakeBOM(InputByteStream& is);
+
+	//! Take a character from input byte stream.
+	template <typename InputByteStream>
+	static Ch Take(InputByteStream& is);
+
+	//! Put BOM to output byte stream.
+	template <typename OutputByteStream>
+	static void PutBOM(OutputByteStream& os);
+
+	//! Put a character to output byte stream.
+	template <typename OutputByteStream>
+	static void Put(OutputByteStream& os, Ch c);
+};
+\endcode
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// UTF8
+
+//! UTF-8 encoding.
+/*! http://en.wikipedia.org/wiki/UTF-8
+	http://tools.ietf.org/html/rfc3629
+	\tparam CharType Code unit for storing 8-bit UTF-8 data. Default is char.
+	\implements Encoding
+*/
+template<typename CharType = char>
+struct UTF8 {
+	typedef CharType Ch;
+
+	template<typename OutputStream>
+	static void Encode(OutputStream& os, unsigned codepoint) {
+		if (codepoint <= 0x7F) 
+			os.Put(codepoint & 0xFF);
+		else if (codepoint <= 0x7FF) {
+			os.Put(0xC0 | ((codepoint >> 6) & 0xFF));
+			os.Put(0x80 | ((codepoint & 0x3F)));
+		}
+		else if (codepoint <= 0xFFFF) {
+			os.Put(0xE0 | ((codepoint >> 12) & 0xFF));
+			os.Put(0x80 | ((codepoint >> 6) & 0x3F));
+			os.Put(0x80 | (codepoint & 0x3F));
+		}
+		else {
+			RAPIDJSON_ASSERT(codepoint <= 0x10FFFF);
+			os.Put(0xF0 | ((codepoint >> 18) & 0xFF));
+			os.Put(0x80 | ((codepoint >> 12) & 0x3F));
+			os.Put(0x80 | ((codepoint >> 6) & 0x3F));
+			os.Put(0x80 | (codepoint & 0x3F));
+		}
+	}
+
+	template <typename InputStream>
+	static bool Decode(InputStream& is, unsigned* codepoint) {
+#define COPY() c = is.Take(); *codepoint = (*codepoint << 6) | ((unsigned char)c & 0x3Fu)
+#define TRANS(mask) result &= ((GetRange((unsigned char)c) & mask) != 0)
+#define TAIL() COPY(); TRANS(0x70)
+		Ch c = is.Take();
+		if (!(c & 0x80)) {
+			*codepoint = (unsigned char)c;
+			return true;
+		}
+
+		unsigned char type = GetRange((unsigned char)c);
+		*codepoint = (0xFF >> type) & (unsigned char)c;
+		bool result = true;
+		switch (type) {
+		case 2:	TAIL(); return result;
+		case 3:	TAIL(); TAIL(); return result;
+		case 4:	COPY(); TRANS(0x50); TAIL(); return result;
+		case 5:	COPY(); TRANS(0x10); TAIL(); TAIL(); return result;
+		case 6: TAIL(); TAIL(); TAIL(); return result;
+		case 10: COPY(); TRANS(0x20); TAIL(); return result;
+		case 11: COPY(); TRANS(0x60); TAIL(); TAIL(); return result;
+		default: return false;
+		}
+#undef COPY
+#undef TRANS
+#undef TAIL
+	}
+
+	template <typename InputStream, typename OutputStream>
+	static bool Validate(InputStream& is, OutputStream& os) {
+#define COPY() os.Put(c = is.Take())
+#define TRANS(mask) result &= ((GetRange((unsigned char)c) & mask) != 0)
+#define TAIL() COPY(); TRANS(0x70)
+		Ch c;
+		COPY();
+		if (!(c & 0x80))
+			return true;
+
+		bool result = true;
+		switch (GetRange((unsigned char)c)) {
+		case 2:	TAIL(); return result;
+		case 3:	TAIL(); TAIL(); return result;
+		case 4:	COPY(); TRANS(0x50); TAIL(); return result;
+		case 5:	COPY(); TRANS(0x10); TAIL(); TAIL(); return result;
+		case 6: TAIL(); TAIL(); TAIL(); return result;
+		case 10: COPY(); TRANS(0x20); TAIL(); return result;
+		case 11: COPY(); TRANS(0x60); TAIL(); TAIL(); return result;
+		default: return false;
+		}
+#undef COPY
+#undef TRANS
+#undef TAIL
+	}
+
+	static unsigned char GetRange(unsigned char c) {
+		// Referring to DFA of http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+		// With new mapping 1 -> 0x10, 7 -> 0x20, 9 -> 0x40, such that AND operation can test multiple types.
+		static const unsigned char type[] = {
+			0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+			0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+			0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+			0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+			0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
+			0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+			0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+			0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+			8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+			10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, 11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8,
+		};
+		return type[c];
+	}
+
+	template <typename InputByteStream>
+	static CharType TakeBOM(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		Ch c = Take(is);
+		if ((unsigned char)c != 0xEFu) return c;
+		c = is.Take();
+		if ((unsigned char)c != 0xBBu) return c;
+		c = is.Take();
+		if ((unsigned char)c != 0xBFu) return c;
+		c = is.Take();
+		return c;
+	}
+
+	template <typename InputByteStream>
+	static Ch Take(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		return is.Take();
+	}
+
+	template <typename OutputByteStream>
+	static void PutBOM(OutputByteStream& os) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(0xEFu); os.Put(0xBBu); os.Put(0xBFu);
+	}
+
+	template <typename OutputByteStream>
+	static void Put(OutputByteStream& os, Ch c) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(static_cast<typename OutputByteStream::Ch>(c));
+	}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// UTF16
+
+//! UTF-16 encoding.
+/*! http://en.wikipedia.org/wiki/UTF-16
+	http://tools.ietf.org/html/rfc2781
+	\tparam CharType Type for storing 16-bit UTF-16 data. Default is wchar_t. C++11 may use char16_t instead.
+	\implements Encoding
+
+	\note For in-memory access, no need to concern endianness. The code units and code points are represented by CPU's endianness.
+	For streaming, use UTF16LE and UTF16BE, which handle endianness.
+*/
+template<typename CharType = wchar_t>
+struct UTF16 {
+	typedef CharType Ch;
+	RAPIDJSON_STATIC_ASSERT(sizeof(Ch) >= 2);
+
+	template<typename OutputStream>
+	static void Encode(OutputStream& os, unsigned codepoint) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputStream::Ch) >= 2);
+		if (codepoint <= 0xFFFF) {
+			RAPIDJSON_ASSERT(codepoint < 0xD800 || codepoint > 0xDFFF); // Code point itself cannot be surrogate pair 
+			os.Put(static_cast<typename OutputStream::Ch>(codepoint));
+		}
+		else {
+			RAPIDJSON_ASSERT(codepoint <= 0x10FFFF);
+			unsigned v = codepoint - 0x10000;
+			os.Put(static_cast<typename OutputStream::Ch>((v >> 10) | 0xD800));
+			os.Put((v & 0x3FF) | 0xDC00);
+		}
+	}
+
+	template <typename InputStream>
+	static bool Decode(InputStream& is, unsigned* codepoint) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 2);
+		Ch c = is.Take();
+		if (c < 0xD800 || c > 0xDFFF) {
+			*codepoint = c;
+			return true;
+		}
+		else if (c <= 0xDBFF) {
+			*codepoint = (c & 0x3FF) << 10;
+			c = is.Take();
+			*codepoint |= (c & 0x3FF);
+			*codepoint += 0x10000;
+			return c >= 0xDC00 && c <= 0xDFFF;
+		}
+		return false;
+	}
+
+	template <typename InputStream, typename OutputStream>
+	static bool Validate(InputStream& is, OutputStream& os) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 2);
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputStream::Ch) >= 2);
+		Ch c;
+		os.Put(c = is.Take());
+		if (c < 0xD800 || c > 0xDFFF)
+			return true;
+		else if (c <= 0xDBFF) {
+			os.Put(c = is.Take());
+			return c >= 0xDC00 && c <= 0xDFFF;
+		}
+		return false;
+	}
+};
+
+//! UTF-16 little endian encoding.
+template<typename CharType = wchar_t>
+struct UTF16LE : UTF16<CharType> {
+	template <typename InputByteStream>
+	static CharType TakeBOM(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = Take(is);
+		return (unsigned short)c == 0xFEFFu ? Take(is) : c;
+	}
+
+	template <typename InputByteStream>
+	static CharType Take(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = (unsigned char)is.Take();
+		c |= (unsigned char)is.Take() << 8;
+		return c;
+	}
+
+	template <typename OutputByteStream>
+	static void PutBOM(OutputByteStream& os) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(0xFFu); os.Put(0xFEu);
+	}
+
+	template <typename OutputByteStream>
+	static void Put(OutputByteStream& os, CharType c) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(c & 0xFFu);
+		os.Put((c >> 8) & 0xFFu);
+	}
+};
+
+//! UTF-16 big endian encoding.
+template<typename CharType = wchar_t>
+struct UTF16BE : UTF16<CharType> {
+	template <typename InputByteStream>
+	static CharType TakeBOM(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = Take(is);
+		return (unsigned short)c == 0xFEFFu ? Take(is) : c;
+	}
+
+	template <typename InputByteStream>
+	static CharType Take(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = (unsigned char)is.Take() << 8;
+		c |= (unsigned char)is.Take();
+		return c;
+	}
+
+	template <typename OutputByteStream>
+	static void PutBOM(OutputByteStream& os) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(0xFEu); os.Put(0xFFu);
+	}
+
+	template <typename OutputByteStream>
+	static void Put(OutputByteStream& os, CharType c) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put((c >> 8) & 0xFFu);
+		os.Put(c & 0xFFu);
+	}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// UTF32
+
+//! UTF-32 encoding. 
+/*! http://en.wikipedia.org/wiki/UTF-32
+	\tparam Ch Type for storing 32-bit UTF-32 data. Default is unsigned. C++11 may use char32_t instead.
+	\implements Encoding
+
+	\note For in-memory access, no need to concern endianness. The code units and code points are represented by CPU's endianness.
+	For streaming, use UTF32LE and UTF32BE, which handle endianness.
+*/
+template<typename CharType = unsigned>
+struct UTF32 {
+	typedef CharType Ch;
+	RAPIDJSON_STATIC_ASSERT(sizeof(Ch) >= 4);
+
+	template<typename OutputStream>
+	static void Encode(OutputStream& os, unsigned codepoint) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputStream::Ch) >= 4);
+		RAPIDJSON_ASSERT(codepoint <= 0x10FFFF);
+		os.Put(codepoint);
+	}
+
+	template <typename InputStream>
+	static bool Decode(InputStream& is, unsigned* codepoint) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 4);
+		Ch c = is.Take();
+		*codepoint = c;
+		return c <= 0x10FFFF;
+	}
+
+	template <typename InputStream, typename OutputStream>
+	static bool Validate(InputStream& is, OutputStream& os) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 4);
+		Ch c;
+		os.Put(c = is.Take());
+		return c <= 0x10FFFF;
+	}
+};
+
+//! UTF-32 little endian enocoding.
+template<typename CharType = unsigned>
+struct UTF32LE : UTF32<CharType> {
+	template <typename InputByteStream>
+	static CharType TakeBOM(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = Take(is);
+		return (unsigned)c == 0x0000FEFFu ? Take(is) : c;
+	}
+
+	template <typename InputByteStream>
+	static CharType Take(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = (unsigned char)is.Take();
+		c |= (unsigned char)is.Take() << 8;
+		c |= (unsigned char)is.Take() << 16;
+		c |= (unsigned char)is.Take() << 24;
+		return c;
+	}
+
+	template <typename OutputByteStream>
+	static void PutBOM(OutputByteStream& os) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(0xFFu); os.Put(0xFEu); os.Put(0x00u); os.Put(0x00u);
+	}
+
+	template <typename OutputByteStream>
+	static void Put(OutputByteStream& os, CharType c) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(c & 0xFFu);
+		os.Put((c >> 8) & 0xFFu);
+		os.Put((c >> 16) & 0xFFu);
+		os.Put((c >> 24) & 0xFFu);
+	}
+};
+
+//! UTF-32 big endian encoding.
+template<typename CharType = unsigned>
+struct UTF32BE : UTF32<CharType> {
+	template <typename InputByteStream>
+	static CharType TakeBOM(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = Take(is);
+		return (unsigned)c == 0x0000FEFFu ? Take(is) : c; 
+	}
+
+	template <typename InputByteStream>
+	static CharType Take(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = (unsigned char)is.Take() << 24;
+		c |= (unsigned char)is.Take() << 16;
+		c |= (unsigned char)is.Take() << 8;
+		c |= (unsigned char)is.Take();
+		return c;
+	}
+
+	template <typename OutputByteStream>
+	static void PutBOM(OutputByteStream& os) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(0x00u); os.Put(0x00u); os.Put(0xFEu); os.Put(0xFFu);
+	}
+
+	template <typename OutputByteStream>
+	static void Put(OutputByteStream& os, CharType c) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put((c >> 24) & 0xFFu);
+		os.Put((c >> 16) & 0xFFu);
+		os.Put((c >> 8) & 0xFFu);
+		os.Put(c & 0xFFu);
+	}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// AutoUTF
+
+//! Runtime-specified UTF encoding type of a stream.
+enum UTFType {
+	kUTF8 = 0,		//!< UTF-8.
+	kUTF16LE = 1,	//!< UTF-16 little endian.
+	kUTF16BE = 2,	//!< UTF-16 big endian.
+	kUTF32LE = 3,	//!< UTF-32 little endian.
+	kUTF32BE = 4,	//!< UTF-32 big endian.
+};
+
+//! Dynamically select encoding according to stream's runtime-specified UTF encoding type.
+/*! \note This class can be used with AutoUTFInputtStream and AutoUTFOutputStream, which provides GetType().
+*/
+template<typename CharType>
+struct AutoUTF {
+	typedef CharType Ch;
+
+#define RAPIDJSON_ENCODINGS_FUNC(x) UTF8<Ch>::x, UTF16LE<Ch>::x, UTF16BE<Ch>::x, UTF32LE<Ch>::x, UTF32BE<Ch>::x
+
+	template<typename OutputStream>
+	RAPIDJSON_FORCEINLINE static void Encode(OutputStream& os, unsigned codepoint) {
+		typedef void (*EncodeFunc)(OutputStream&, unsigned);
+		static const EncodeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Encode) };
+		(*f[os.GetType()])(os, codepoint);
+	}
+
+	template <typename InputStream>
+	RAPIDJSON_FORCEINLINE static bool Decode(InputStream& is, unsigned* codepoint) {
+		typedef bool (*DecodeFunc)(InputStream&, unsigned*);
+		static const DecodeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Decode) };
+		return (*f[is.GetType()])(is, codepoint);
+	}
+
+	template <typename InputStream, typename OutputStream>
+	RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) {
+		typedef bool (*ValidateFunc)(InputStream&, OutputStream&);
+		static const ValidateFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Validate) };
+		return (*f[is.GetType()])(is, os);
+	}
+
+#undef RAPIDJSON_ENCODINGS_FUNC
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Transcoder
+
+//! Encoding conversion.
+template<typename SourceEncoding, typename TargetEncoding>
+struct Transcoder {
+	//! Take one Unicode codepoint from source encoding, convert it to target encoding and put it to the output stream.
+	template<typename InputStream, typename OutputStream>
+	RAPIDJSON_FORCEINLINE static bool Transcode(InputStream& is, OutputStream& os) {
+		unsigned codepoint;
+		if (!SourceEncoding::Decode(is, &codepoint))
+			return false;
+		TargetEncoding::Encode(os, codepoint);
+		return true;
+	}
+
+	//! Validate one Unicode codepoint from an encoded stream.
+	template<typename InputStream, typename OutputStream>
+	RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) {
+		return Transcode(is, os);	// Since source/target encoding is different, must transcode.
+	}
+};
+
+//! Specialization of Transcoder with same source and target encoding.
+template<typename Encoding>
+struct Transcoder<Encoding, Encoding> {
+	template<typename InputStream, typename OutputStream>
+	RAPIDJSON_FORCEINLINE static bool Transcode(InputStream& is, OutputStream& os) {
+		os.Put(is.Take());	// Just copy one code unit. This semantic is different from primary template class.
+		return true;
+	}
+	
+	template<typename InputStream, typename OutputStream>
+	RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) {
+		return Encoding::Validate(is, os);	// source/target encoding are the same
+	}
+};
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_ENCODINGS_H_

+ 74 - 0
engine/source/persistence/rapidjson/include/rapidjson/filereadstream.h

@@ -0,0 +1,74 @@
+#ifndef RAPIDJSON_FILEREADSTREAM_H_
+#define RAPIDJSON_FILEREADSTREAM_H_
+
+#include "rapidjson.h"
+#include <cstdio>
+
+namespace rapidjson {
+
+//! File byte stream for input using fread().
+/*!
+	\implements Stream
+*/
+class FileReadStream {
+public:
+	typedef char Ch;	//!< Character type (byte).
+
+	//! Constructor.
+	/*!
+		\param fp File pointer opened for read.
+		\param buffer user-supplied buffer.
+		\param bufferSize size of buffer in bytes. Must >=4 bytes.
+	*/
+	FileReadStream(FILE* fp, char* buffer, size_t bufferSize) : fp_(fp), buffer_(buffer), bufferSize_(bufferSize), bufferLast_(0), current_(buffer_), readCount_(0), count_(0), eof_(false) { 
+		RAPIDJSON_ASSERT(fp_ != 0);
+		RAPIDJSON_ASSERT(bufferSize >= 4);
+		Read();
+	}
+
+	Ch Peek() const { return *current_; }
+	Ch Take() { Ch c = *current_; Read(); return c; }
+	size_t Tell() const { return count_ + (current_ - buffer_); }
+
+	// Not implemented
+	void Put(Ch) { RAPIDJSON_ASSERT(false); }
+	void Flush() { RAPIDJSON_ASSERT(false); } 
+	Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
+	size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
+
+	// For encoding detection only.
+	const Ch* Peek4() const {
+		return (current_ + 4 <= bufferLast_) ? current_ : 0;
+	}
+
+private:
+	void Read() {
+		if (current_ < bufferLast_)
+			++current_;
+		else if (!eof_) {
+			count_ += readCount_;
+			readCount_ = fread(buffer_, 1, bufferSize_, fp_);
+			bufferLast_ = buffer_ + readCount_ - 1;
+			current_ = buffer_;
+
+			if (readCount_ < bufferSize_) {
+				buffer_[readCount_] = '\0';
+				++bufferLast_;
+				eof_ = true;
+			}
+		}
+	}
+
+	FILE* fp_;
+	Ch *buffer_;
+	size_t bufferSize_;
+	Ch *bufferLast_;
+	Ch *current_;
+	size_t readCount_;
+	size_t count_;	//!< Number of characters read
+	bool eof_;
+};
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_FILESTREAM_H_

+ 49 - 0
engine/source/persistence/rapidjson/include/rapidjson/filestream.h

@@ -0,0 +1,49 @@
+#ifndef RAPIDJSON_FILESTREAM_H_
+#define RAPIDJSON_FILESTREAM_H_
+
+#include "rapidjson.h"
+#include <cstdio>
+
+namespace rapidjson {
+
+//! (Depreciated) Wrapper of C file stream for input or output.
+/*!
+	This simple wrapper does not check the validity of the stream.
+	\implements Stream
+	\deprecated { This was only for basic testing in version 0.1, it is found that the performance is very low by using fgetc(). Use FileReadStream instead. }
+*/
+class FileStream {
+public:
+	typedef char Ch;	//!< Character type. Only support char.
+
+	FileStream(FILE* fp) : fp_(fp), count_(0) { Read(); }
+	char Peek() const { return current_; }
+	char Take() { char c = current_; Read(); return c; }
+	size_t Tell() const { return count_; }
+	void Put(char c) { fputc(c, fp_); }
+	void Flush() { fflush(fp_); }
+
+	// Not implemented
+	char* PutBegin() { return 0; }
+	size_t PutEnd(char*) { return 0; }
+
+private:
+	void Read() {
+		RAPIDJSON_ASSERT(fp_ != 0);
+		int c = fgetc(fp_);
+		if (c != EOF) {
+			current_ = (char)c;
+			count_++;
+		}
+		else if (current_ != '\0')
+			current_ = '\0';
+	}
+
+	FILE* fp_;
+	char current_;
+	size_t count_;
+};
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_FILESTREAM_H_

+ 73 - 0
engine/source/persistence/rapidjson/include/rapidjson/filewritestream.h

@@ -0,0 +1,73 @@
+#ifndef RAPIDJSON_FILEWRITESTREAM_H_
+#define RAPIDJSON_FILEWRITESTREAM_H_
+
+#include "rapidjson.h"
+#include <cstdio>
+
+namespace rapidjson {
+
+//! Wrapper of C file stream for input using fread().
+/*!
+	\implements Stream
+*/
+class FileWriteStream {
+public:
+	typedef char Ch;	//!< Character type. Only support char.
+
+	FileWriteStream(FILE* fp, char* buffer, size_t bufferSize) : fp_(fp), buffer_(buffer), bufferEnd_(buffer + bufferSize), current_(buffer_) { 
+		RAPIDJSON_ASSERT(fp_ != 0);
+	}
+
+	void Put(char c) { 
+		if (current_ >= bufferEnd_)
+			Flush();
+
+		*current_++ = c;
+	}
+
+	void PutN(char c, size_t n) {
+		size_t avail = bufferEnd_ - current_;
+		while (n > avail) {
+			memset(current_, c, avail);
+			current_ += avail;
+			Flush();
+			n -= avail;
+			avail = bufferEnd_ - current_;
+		}
+
+		if (n > 0) {
+			memset(current_, c, n);
+			current_ += n;
+		}
+	}
+
+	void Flush() {
+		if (current_ != buffer_) {
+			fwrite(buffer_, 1, current_ - buffer_, fp_);
+			current_ = buffer_;
+		}
+	}
+
+	// Not implemented
+	char Peek() const { RAPIDJSON_ASSERT(false); return 0; }
+	char Take() { RAPIDJSON_ASSERT(false); return 0; }
+	size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; }
+	char* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
+	size_t PutEnd(char*) { RAPIDJSON_ASSERT(false); return 0; }
+
+private:
+	FILE* fp_;
+	char *buffer_;
+	char *bufferEnd_;
+	char *current_;
+};
+
+//! Implement specialized version of PutN() with memset() for better performance.
+template<>
+inline void PutN(FileWriteStream& stream, char c, size_t n) {
+	stream.PutN(c, n);
+}
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_FILESTREAM_H_

+ 54 - 0
engine/source/persistence/rapidjson/include/rapidjson/internal/pow10.h

@@ -0,0 +1,54 @@
+#ifndef RAPIDJSON_POW10_
+#define RAPIDJSON_POW10_
+
+namespace rapidjson {
+namespace internal {
+
+//! Computes integer powers of 10 in double (10.0^n).
+/*! This function uses lookup table for fast and accurate results.
+	\param n positive/negative exponent. Must <= 308.
+	\return 10.0^n
+*/
+inline double Pow10(int n) {
+	static const double e[] = { // 1e-308...1e308: 617 * 8 bytes = 4936 bytes
+		1e-308,1e-307,1e-306,1e-305,1e-304,1e-303,1e-302,1e-301,1e-300,
+		1e-299,1e-298,1e-297,1e-296,1e-295,1e-294,1e-293,1e-292,1e-291,1e-290,1e-289,1e-288,1e-287,1e-286,1e-285,1e-284,1e-283,1e-282,1e-281,1e-280,
+		1e-279,1e-278,1e-277,1e-276,1e-275,1e-274,1e-273,1e-272,1e-271,1e-270,1e-269,1e-268,1e-267,1e-266,1e-265,1e-264,1e-263,1e-262,1e-261,1e-260,
+		1e-259,1e-258,1e-257,1e-256,1e-255,1e-254,1e-253,1e-252,1e-251,1e-250,1e-249,1e-248,1e-247,1e-246,1e-245,1e-244,1e-243,1e-242,1e-241,1e-240,
+		1e-239,1e-238,1e-237,1e-236,1e-235,1e-234,1e-233,1e-232,1e-231,1e-230,1e-229,1e-228,1e-227,1e-226,1e-225,1e-224,1e-223,1e-222,1e-221,1e-220,
+		1e-219,1e-218,1e-217,1e-216,1e-215,1e-214,1e-213,1e-212,1e-211,1e-210,1e-209,1e-208,1e-207,1e-206,1e-205,1e-204,1e-203,1e-202,1e-201,1e-200,
+		1e-199,1e-198,1e-197,1e-196,1e-195,1e-194,1e-193,1e-192,1e-191,1e-190,1e-189,1e-188,1e-187,1e-186,1e-185,1e-184,1e-183,1e-182,1e-181,1e-180,
+		1e-179,1e-178,1e-177,1e-176,1e-175,1e-174,1e-173,1e-172,1e-171,1e-170,1e-169,1e-168,1e-167,1e-166,1e-165,1e-164,1e-163,1e-162,1e-161,1e-160,
+		1e-159,1e-158,1e-157,1e-156,1e-155,1e-154,1e-153,1e-152,1e-151,1e-150,1e-149,1e-148,1e-147,1e-146,1e-145,1e-144,1e-143,1e-142,1e-141,1e-140,
+		1e-139,1e-138,1e-137,1e-136,1e-135,1e-134,1e-133,1e-132,1e-131,1e-130,1e-129,1e-128,1e-127,1e-126,1e-125,1e-124,1e-123,1e-122,1e-121,1e-120,
+		1e-119,1e-118,1e-117,1e-116,1e-115,1e-114,1e-113,1e-112,1e-111,1e-110,1e-109,1e-108,1e-107,1e-106,1e-105,1e-104,1e-103,1e-102,1e-101,1e-100,
+		1e-99, 1e-98, 1e-97, 1e-96, 1e-95, 1e-94, 1e-93, 1e-92, 1e-91, 1e-90, 1e-89, 1e-88, 1e-87, 1e-86, 1e-85, 1e-84, 1e-83, 1e-82, 1e-81, 1e-80, 
+		1e-79, 1e-78, 1e-77, 1e-76, 1e-75, 1e-74, 1e-73, 1e-72, 1e-71, 1e-70, 1e-69, 1e-68, 1e-67, 1e-66, 1e-65, 1e-64, 1e-63, 1e-62, 1e-61, 1e-60, 
+		1e-59, 1e-58, 1e-57, 1e-56, 1e-55, 1e-54, 1e-53, 1e-52, 1e-51, 1e-50, 1e-49, 1e-48, 1e-47, 1e-46, 1e-45, 1e-44, 1e-43, 1e-42, 1e-41, 1e-40, 
+		1e-39, 1e-38, 1e-37, 1e-36, 1e-35, 1e-34, 1e-33, 1e-32, 1e-31, 1e-30, 1e-29, 1e-28, 1e-27, 1e-26, 1e-25, 1e-24, 1e-23, 1e-22, 1e-21, 1e-20, 
+		1e-19, 1e-18, 1e-17, 1e-16, 1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9,  1e-8,  1e-7,  1e-6,  1e-5,  1e-4,  1e-3,  1e-2,  1e-1,  1e+0,  
+		1e+1,  1e+2,  1e+3,  1e+4,  1e+5,  1e+6,  1e+7,  1e+8,  1e+9,  1e+10, 1e+11, 1e+12, 1e+13, 1e+14, 1e+15, 1e+16, 1e+17, 1e+18, 1e+19, 1e+20, 
+		1e+21, 1e+22, 1e+23, 1e+24, 1e+25, 1e+26, 1e+27, 1e+28, 1e+29, 1e+30, 1e+31, 1e+32, 1e+33, 1e+34, 1e+35, 1e+36, 1e+37, 1e+38, 1e+39, 1e+40,
+		1e+41, 1e+42, 1e+43, 1e+44, 1e+45, 1e+46, 1e+47, 1e+48, 1e+49, 1e+50, 1e+51, 1e+52, 1e+53, 1e+54, 1e+55, 1e+56, 1e+57, 1e+58, 1e+59, 1e+60,
+		1e+61, 1e+62, 1e+63, 1e+64, 1e+65, 1e+66, 1e+67, 1e+68, 1e+69, 1e+70, 1e+71, 1e+72, 1e+73, 1e+74, 1e+75, 1e+76, 1e+77, 1e+78, 1e+79, 1e+80,
+		1e+81, 1e+82, 1e+83, 1e+84, 1e+85, 1e+86, 1e+87, 1e+88, 1e+89, 1e+90, 1e+91, 1e+92, 1e+93, 1e+94, 1e+95, 1e+96, 1e+97, 1e+98, 1e+99, 1e+100,
+		1e+101,1e+102,1e+103,1e+104,1e+105,1e+106,1e+107,1e+108,1e+109,1e+110,1e+111,1e+112,1e+113,1e+114,1e+115,1e+116,1e+117,1e+118,1e+119,1e+120,
+		1e+121,1e+122,1e+123,1e+124,1e+125,1e+126,1e+127,1e+128,1e+129,1e+130,1e+131,1e+132,1e+133,1e+134,1e+135,1e+136,1e+137,1e+138,1e+139,1e+140,
+		1e+141,1e+142,1e+143,1e+144,1e+145,1e+146,1e+147,1e+148,1e+149,1e+150,1e+151,1e+152,1e+153,1e+154,1e+155,1e+156,1e+157,1e+158,1e+159,1e+160,
+		1e+161,1e+162,1e+163,1e+164,1e+165,1e+166,1e+167,1e+168,1e+169,1e+170,1e+171,1e+172,1e+173,1e+174,1e+175,1e+176,1e+177,1e+178,1e+179,1e+180,
+		1e+181,1e+182,1e+183,1e+184,1e+185,1e+186,1e+187,1e+188,1e+189,1e+190,1e+191,1e+192,1e+193,1e+194,1e+195,1e+196,1e+197,1e+198,1e+199,1e+200,
+		1e+201,1e+202,1e+203,1e+204,1e+205,1e+206,1e+207,1e+208,1e+209,1e+210,1e+211,1e+212,1e+213,1e+214,1e+215,1e+216,1e+217,1e+218,1e+219,1e+220,
+		1e+221,1e+222,1e+223,1e+224,1e+225,1e+226,1e+227,1e+228,1e+229,1e+230,1e+231,1e+232,1e+233,1e+234,1e+235,1e+236,1e+237,1e+238,1e+239,1e+240,
+		1e+241,1e+242,1e+243,1e+244,1e+245,1e+246,1e+247,1e+248,1e+249,1e+250,1e+251,1e+252,1e+253,1e+254,1e+255,1e+256,1e+257,1e+258,1e+259,1e+260,
+		1e+261,1e+262,1e+263,1e+264,1e+265,1e+266,1e+267,1e+268,1e+269,1e+270,1e+271,1e+272,1e+273,1e+274,1e+275,1e+276,1e+277,1e+278,1e+279,1e+280,
+		1e+281,1e+282,1e+283,1e+284,1e+285,1e+286,1e+287,1e+288,1e+289,1e+290,1e+291,1e+292,1e+293,1e+294,1e+295,1e+296,1e+297,1e+298,1e+299,1e+300,
+		1e+301,1e+302,1e+303,1e+304,1e+305,1e+306,1e+307,1e+308
+	};
+	RAPIDJSON_ASSERT(n <= 308);
+	return n < -308 ? 0.0 : e[n + 308];
+}
+
+} // namespace internal
+} // namespace rapidjson
+
+#endif // RAPIDJSON_POW10_

+ 83 - 0
engine/source/persistence/rapidjson/include/rapidjson/internal/stack.h

@@ -0,0 +1,83 @@
+#ifndef RAPIDJSON_INTERNAL_STACK_H_
+#define RAPIDJSON_INTERNAL_STACK_H_
+
+namespace rapidjson {
+namespace internal {
+
+///////////////////////////////////////////////////////////////////////////////
+// Stack
+
+//! A type-unsafe stack for storing different types of data.
+/*! \tparam Allocator Allocator for allocating stack memory.
+*/
+template <typename Allocator>
+class Stack {
+public:
+	Stack(Allocator* allocator, size_t stack_capacity) : allocator_(allocator), own_allocator_(0), stack_(0), stack_top_(0), stack_end_(0), stack_capacity_(stack_capacity) {
+		RAPIDJSON_ASSERT(stack_capacity_ > 0);
+		if (!allocator_)
+			own_allocator_ = allocator_ = new Allocator();
+		stack_top_ = stack_ = (char*)allocator_->Malloc(stack_capacity_);
+		stack_end_ = stack_ + stack_capacity_;
+	}
+
+	~Stack() {
+		Allocator::Free(stack_);
+		delete own_allocator_; // Only delete if it is owned by the stack
+	}
+
+	void Clear() { /*stack_top_ = 0;*/ stack_top_ = stack_; }
+
+	template<typename T>
+	T* Push(size_t count = 1) {
+		 // Expand the stack if needed
+		if (stack_top_ + sizeof(T) * count >= stack_end_) {
+			size_t new_capacity = stack_capacity_ * 2;
+			size_t size = GetSize();
+			size_t new_size = GetSize() + sizeof(T) * count;
+			if (new_capacity < new_size)
+				new_capacity = new_size;
+			stack_ = (char*)allocator_->Realloc(stack_, stack_capacity_, new_capacity);
+			stack_capacity_ = new_capacity;
+			stack_top_ = stack_ + size;
+			stack_end_ = stack_ + stack_capacity_;
+		}
+		T* ret = (T*)stack_top_;
+		stack_top_ += sizeof(T) * count;
+		return ret;
+	}
+
+	template<typename T>
+	T* Pop(size_t count) {
+		RAPIDJSON_ASSERT(GetSize() >= count * sizeof(T));
+		stack_top_ -= count * sizeof(T);
+		return (T*)stack_top_;
+	}
+
+	template<typename T>
+	T* Top() { 
+		RAPIDJSON_ASSERT(GetSize() >= sizeof(T));
+		return (T*)(stack_top_ - sizeof(T));
+	}
+
+	template<typename T>
+	T* Bottom() { return (T*)stack_; }
+
+	Allocator& GetAllocator() { return *allocator_; }
+	bool Empty() const { return stack_top_ == stack_; }
+	size_t GetSize() const { return stack_top_ - stack_; }
+	size_t GetCapacity() const { return stack_capacity_; }
+
+private:
+	Allocator* allocator_;
+	Allocator* own_allocator_;
+	char *stack_;
+	char *stack_top_;
+	char *stack_end_;
+	size_t stack_capacity_;
+};
+
+} // namespace internal
+} // namespace rapidjson
+
+#endif // RAPIDJSON_STACK_H_

+ 24 - 0
engine/source/persistence/rapidjson/include/rapidjson/internal/strfunc.h

@@ -0,0 +1,24 @@
+#ifndef RAPIDJSON_INTERNAL_STRFUNC_H_
+#define RAPIDJSON_INTERNAL_STRFUNC_H_
+
+namespace rapidjson {
+namespace internal {
+
+//! Custom strlen() which works on different character types.
+/*!	\tparam Ch Character type (e.g. char, wchar_t, short)
+	\param s Null-terminated input string.
+	\return Number of characters in the string. 
+	\note This has the same semantics as strlen(), the return value is not number of Unicode codepoints.
+*/
+template <typename Ch>
+inline SizeType StrLen(const Ch* s) {
+	const Ch* p = s;
+	while (*p != '\0')
+		++p;
+	return SizeType(p - s);
+}
+
+} // namespace internal
+} // namespace rapidjson
+
+#endif // RAPIDJSON_INTERNAL_STRFUNC_H_

+ 160 - 0
engine/source/persistence/rapidjson/include/rapidjson/prettywriter.h

@@ -0,0 +1,160 @@
+#ifndef RAPIDJSON_PRETTYWRITER_H_
+#define RAPIDJSON_PRETTYWRITER_H_
+
+#include "writer.h"
+
+namespace rapidjson {
+
+//! Writer with indentation and spacing.
+/*!
+	\tparam OutputStream Type of ouptut os.
+	\tparam Encoding Encoding of both source strings and output.
+	\tparam Allocator Type of allocator for allocating memory of stack.
+*/
+template<typename OutputStream, typename SourceEncoding = UTF8<>, typename TargetEncoding = UTF8<>, typename Allocator = MemoryPoolAllocator<> >
+class PrettyWriter : public Writer<OutputStream, SourceEncoding, TargetEncoding, Allocator> {
+public:
+	typedef Writer<OutputStream, SourceEncoding, TargetEncoding, Allocator> Base;
+	typedef typename Base::Ch Ch;
+
+	//! Constructor
+	/*! \param os Output os.
+		\param allocator User supplied allocator. If it is null, it will create a private one.
+		\param levelDepth Initial capacity of 
+	*/
+	PrettyWriter(OutputStream& os, Allocator* allocator = 0, size_t levelDepth = Base::kDefaultLevelDepth) : 
+		Base(os, allocator, levelDepth), indentChar_(' '), indentCharCount_(4) {}
+
+	//! Set custom indentation.
+	/*! \param indentChar		Character for indentation. Must be whitespace character (' ', '\t', '\n', '\r').
+		\param indentCharCount	Number of indent characters for each indentation level.
+		\note The default indentation is 4 spaces.
+	*/
+	PrettyWriter& SetIndent(Ch indentChar, unsigned indentCharCount) {
+		RAPIDJSON_ASSERT(indentChar == ' ' || indentChar == '\t' || indentChar == '\n' || indentChar == '\r');
+		indentChar_ = indentChar;
+		indentCharCount_ = indentCharCount;
+		return *this;
+	}
+
+	//@name Implementation of Handler.
+	//@{
+
+	PrettyWriter& Null()				{ PrettyPrefix(kNullType);   Base::WriteNull();			return *this; }
+	PrettyWriter& Bool(bool b)			{ PrettyPrefix(b ? kTrueType : kFalseType); Base::WriteBool(b); return *this; }
+	PrettyWriter& Int(int i)			{ PrettyPrefix(kNumberType); Base::WriteInt(i);			return *this; }
+	PrettyWriter& Uint(unsigned u)		{ PrettyPrefix(kNumberType); Base::WriteUint(u);		return *this; }
+	PrettyWriter& Int64(int64_t i64)	{ PrettyPrefix(kNumberType); Base::WriteInt64(i64);		return *this; }
+	PrettyWriter& Uint64(uint64_t u64)	{ PrettyPrefix(kNumberType); Base::WriteUint64(u64);	return *this; }
+	PrettyWriter& Double(double d)		{ PrettyPrefix(kNumberType); Base::WriteDouble(d);		return *this; }
+
+	PrettyWriter& String(const Ch* str, SizeType length, bool copy = false) {
+		(void)copy;
+		PrettyPrefix(kStringType);
+		Base::WriteString(str, length);
+		return *this;
+	}
+
+	PrettyWriter& StartObject() {
+		PrettyPrefix(kObjectType);
+		new (Base::level_stack_.template Push<typename Base::Level>()) typename Base::Level(false);
+		Base::WriteStartObject();
+		return *this;
+	}
+
+	PrettyWriter& EndObject(SizeType memberCount = 0) {
+		(void)memberCount;
+		RAPIDJSON_ASSERT(Base::level_stack_.GetSize() >= sizeof(typename Base::Level));
+		RAPIDJSON_ASSERT(!Base::level_stack_.template Top<typename Base::Level>()->inArray);
+		bool empty = Base::level_stack_.template Pop<typename Base::Level>(1)->valueCount == 0;
+
+		if (!empty) {
+			Base::os_.Put('\n');
+			WriteIndent();
+		}
+		Base::WriteEndObject();
+		if (Base::level_stack_.Empty())	// end of json text
+			Base::os_.Flush();
+		return *this;
+	}
+
+	PrettyWriter& StartArray() {
+		PrettyPrefix(kArrayType);
+		new (Base::level_stack_.template Push<typename Base::Level>()) typename Base::Level(true);
+		Base::WriteStartArray();
+		return *this;
+	}
+
+	PrettyWriter& EndArray(SizeType memberCount = 0) {
+		(void)memberCount;
+		RAPIDJSON_ASSERT(Base::level_stack_.GetSize() >= sizeof(typename Base::Level));
+		RAPIDJSON_ASSERT(Base::level_stack_.template Top<typename Base::Level>()->inArray);
+		bool empty = Base::level_stack_.template Pop<typename Base::Level>(1)->valueCount == 0;
+
+		if (!empty) {
+			Base::os_.Put('\n');
+			WriteIndent();
+		}
+		Base::WriteEndArray();
+		if (Base::level_stack_.Empty())	// end of json text
+			Base::os_.Flush();
+		return *this;
+	}
+
+	//@}
+
+	//! Simpler but slower overload.
+	PrettyWriter& String(const Ch* str) { return String(str, internal::StrLen(str)); }
+
+protected:
+	void PrettyPrefix(Type type) {
+		(void)type;
+		if (Base::level_stack_.GetSize() != 0) { // this value is not at root
+			typename Base::Level* level = Base::level_stack_.template Top<typename Base::Level>();
+
+			if (level->inArray) {
+				if (level->valueCount > 0) {
+					Base::os_.Put(','); // add comma if it is not the first element in array
+					Base::os_.Put('\n');
+				}
+				else
+					Base::os_.Put('\n');
+				WriteIndent();
+			}
+			else {	// in object
+				if (level->valueCount > 0) {
+					if (level->valueCount % 2 == 0) {
+						Base::os_.Put(',');
+						Base::os_.Put('\n');
+					}
+					else {
+						Base::os_.Put(':');
+						Base::os_.Put(' ');
+					}
+				}
+				else
+					Base::os_.Put('\n');
+
+				if (level->valueCount % 2 == 0)
+					WriteIndent();
+			}
+			if (!level->inArray && level->valueCount % 2 == 0)
+				RAPIDJSON_ASSERT(type == kStringType);  // if it's in object, then even number should be a name
+			level->valueCount++;
+		}
+		else
+			RAPIDJSON_ASSERT(type == kObjectType || type == kArrayType);
+	}
+
+	void WriteIndent()  {
+		size_t count = (Base::level_stack_.GetSize() / sizeof(typename Base::Level)) * indentCharCount_;
+		PutN(Base::os_, indentChar_, count);
+	}
+
+	Ch indentChar_;
+	unsigned indentCharCount_;
+};
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_RAPIDJSON_H_

+ 256 - 0
engine/source/persistence/rapidjson/include/rapidjson/rapidjson.h

@@ -0,0 +1,256 @@
+#ifndef RAPIDJSON_RAPIDJSON_H_
+#define RAPIDJSON_RAPIDJSON_H_
+
+// Copyright (c) 2011 Milo Yip ([email protected])
+// Version 0.1
+
+#include <cstdlib>	// malloc(), realloc(), free()
+#include <cstring>	// memcpy()
+
+///////////////////////////////////////////////////////////////////////////////
+// RAPIDJSON_NO_INT64DEFINE
+
+// Here defines int64_t and uint64_t types in global namespace.
+// If user have their own definition, can define RAPIDJSON_NO_INT64DEFINE to disable this.
+#ifndef RAPIDJSON_NO_INT64DEFINE
+#ifdef _MSC_VER
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+#define RAPIDJSON_FORCEINLINE __forceinline
+#else
+#include <inttypes.h>
+#define RAPIDJSON_FORCEINLINE
+#endif
+#endif // RAPIDJSON_NO_INT64TYPEDEF
+
+///////////////////////////////////////////////////////////////////////////////
+// RAPIDJSON_ENDIAN
+#define RAPIDJSON_LITTLEENDIAN	0	//!< Little endian machine
+#define RAPIDJSON_BIGENDIAN		1	//!< Big endian machine
+
+//! Endianness of the machine.
+/*!	GCC provided macro for detecting endianness of the target machine. But other
+	compilers may not have this. User can define RAPIDJSON_ENDIAN to either
+	RAPIDJSON_LITTLEENDIAN or RAPIDJSON_BIGENDIAN.
+*/
+#ifndef RAPIDJSON_ENDIAN
+#ifdef __BYTE_ORDER__
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+#define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN
+#else
+#define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN
+#endif // __BYTE_ORDER__
+#else
+#define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN	// Assumes little endian otherwise.
+#endif
+#endif // RAPIDJSON_ENDIAN
+
+
+///////////////////////////////////////////////////////////////////////////////
+// RAPIDJSON_ALIGNSIZE
+
+//! Data alignment of the machine.
+/*!
+	Some machine requires strict data alignment.
+	Currently the default uses 4 bytes alignment. User can customize this.
+*/
+#ifndef RAPIDJSON_ALIGN
+#define RAPIDJSON_ALIGN(x) ((x + 3) & ~3)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// RAPIDJSON_SSE2/RAPIDJSON_SSE42/RAPIDJSON_SIMD
+
+// Enable SSE2 optimization.
+//#define RAPIDJSON_SSE2
+
+// Enable SSE4.2 optimization.
+//#define RAPIDJSON_SSE42
+
+#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42)
+#define RAPIDJSON_SIMD
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// RAPIDJSON_NO_SIZETYPEDEFINE
+
+#ifndef RAPIDJSON_NO_SIZETYPEDEFINE
+namespace rapidjson {
+//! Use 32-bit array/string indices even for 64-bit platform, instead of using size_t.
+/*! User may override the SizeType by defining RAPIDJSON_NO_SIZETYPEDEFINE.
+*/
+typedef unsigned SizeType;
+} // namespace rapidjson
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// RAPIDJSON_ASSERT
+
+//! Assertion.
+/*! By default, rapidjson uses C assert() for assertion.
+	User can override it by defining RAPIDJSON_ASSERT(x) macro.
+*/
+#ifndef RAPIDJSON_ASSERT
+#include <cassert>
+#define RAPIDJSON_ASSERT(x) assert(x)
+#endif // RAPIDJSON_ASSERT
+
+///////////////////////////////////////////////////////////////////////////////
+// RAPIDJSON_STATIC_ASSERT
+
+// Adopt from boost
+#ifndef RAPIDJSON_STATIC_ASSERT
+namespace rapidjson {
+template <bool x> struct STATIC_ASSERTION_FAILURE;
+template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };
+template<int x> struct StaticAssertTest {};
+} // namespace rapidjson
+
+#define RAPIDJSON_JOIN(X, Y) RAPIDJSON_DO_JOIN(X, Y)
+#define RAPIDJSON_DO_JOIN(X, Y) RAPIDJSON_DO_JOIN2(X, Y)
+#define RAPIDJSON_DO_JOIN2(X, Y) X##Y
+
+#define RAPIDJSON_STATIC_ASSERT(x) typedef ::rapidjson::StaticAssertTest<\
+	sizeof(::rapidjson::STATIC_ASSERTION_FAILURE<bool(x) >)>\
+	RAPIDJSON_JOIN(StaticAssertTypedef, __LINE__)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Helpers
+
+#define RAPIDJSON_MULTILINEMACRO_BEGIN do {  
+#define RAPIDJSON_MULTILINEMACRO_END \
+} while((void)0, 0)
+
+///////////////////////////////////////////////////////////////////////////////
+// Allocators and Encodings
+
+#include "allocators.h"
+#include "encodings.h"
+
+namespace rapidjson {
+
+///////////////////////////////////////////////////////////////////////////////
+//  Stream
+
+/*! \class rapidjson::Stream
+	\brief Concept for reading and writing characters.
+
+	For read-only stream, no need to implement PutBegin(), Put(), Flush() and PutEnd().
+
+	For write-only stream, only need to implement Put() and Flush().
+
+\code
+concept Stream {
+	typename Ch;	//!< Character type of the stream.
+
+	//! Read the current character from stream without moving the read cursor.
+	Ch Peek() const;
+
+	//! Read the current character from stream and moving the read cursor to next character.
+	Ch Take();
+
+	//! Get the current read cursor.
+	//! \return Number of characters read from start.
+	size_t Tell();
+
+	//! Begin writing operation at the current read pointer.
+	//! \return The begin writer pointer.
+	Ch* PutBegin();
+
+	//! Write a character.
+	void Put(Ch c);
+
+	//! Flush the buffer.
+	void Flush();
+
+	//! End the writing operation.
+	//! \param begin The begin write pointer returned by PutBegin().
+	//! \return Number of characters written.
+	size_t PutEnd(Ch* begin);
+}
+\endcode
+*/
+
+//! Put N copies of a character to a stream.
+template<typename Stream, typename Ch>
+inline void PutN(Stream& stream, Ch c, size_t n) {
+	for (size_t i = 0; i < n; i++)
+		stream.Put(c);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// StringStream
+
+//! Read-only string stream.
+/*! \implements Stream
+*/
+template <typename Encoding>
+struct GenericStringStream {
+	typedef typename Encoding::Ch Ch;
+
+	GenericStringStream(const Ch *src) : src_(src), head_(src) {}
+
+	Ch Peek() const { return *src_; }
+	Ch Take() { return *src_++; }
+	size_t Tell() const { return src_ - head_; }
+
+	Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
+	void Put(Ch) { RAPIDJSON_ASSERT(false); }
+	void Flush() { RAPIDJSON_ASSERT(false); }
+	size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
+
+	const Ch* src_;		//!< Current read position.
+	const Ch* head_;	//!< Original head of the string.
+};
+
+typedef GenericStringStream<UTF8<> > StringStream;
+
+///////////////////////////////////////////////////////////////////////////////
+// InsituStringStream
+
+//! A read-write string stream.
+/*! This string stream is particularly designed for in-situ parsing.
+	\implements Stream
+*/
+template <typename Encoding>
+struct GenericInsituStringStream {
+	typedef typename Encoding::Ch Ch;
+
+	GenericInsituStringStream(Ch *src) : src_(src), dst_(0), head_(src) {}
+
+	// Read
+	Ch Peek() { return *src_; }
+	Ch Take() { return *src_++; }
+	size_t Tell() { return src_ - head_; }
+
+	// Write
+	Ch* PutBegin() { return dst_ = src_; }
+	void Put(Ch c) { RAPIDJSON_ASSERT(dst_ != 0); *dst_++ = c; }
+	void Flush() {}
+	size_t PutEnd(Ch* begin) { return dst_ - begin; }
+
+	Ch* src_;
+	Ch* dst_;
+	Ch* head_;
+};
+
+typedef GenericInsituStringStream<UTF8<> > InsituStringStream;
+
+///////////////////////////////////////////////////////////////////////////////
+// Type
+
+//! Type of JSON value
+enum Type {
+	kNullType = 0,		//!< null
+	kFalseType = 1,		//!< false
+	kTrueType = 2,		//!< true
+	kObjectType = 3,	//!< object
+	kArrayType = 4,		//!< array 
+	kStringType = 5,	//!< string
+	kNumberType = 6,	//!< number
+};
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_RAPIDJSON_H_

+ 669 - 0
engine/source/persistence/rapidjson/include/rapidjson/reader.h

@@ -0,0 +1,669 @@
+#ifndef RAPIDJSON_READER_H_
+#define RAPIDJSON_READER_H_
+
+// Copyright (c) 2011 Milo Yip ([email protected])
+// Version 0.1
+
+#include "rapidjson.h"
+#include "encodings.h"
+#include "internal/pow10.h"
+#include "internal/stack.h"
+#include <csetjmp>
+
+#ifdef RAPIDJSON_SSE42
+#include <nmmintrin.h>
+#elif defined(RAPIDJSON_SSE2)
+#include <emmintrin.h>
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable : 4127) // conditional expression is constant
+#endif
+
+#ifndef RAPIDJSON_PARSE_ERROR
+#define RAPIDJSON_PARSE_ERROR(msg, offset) \
+	RAPIDJSON_MULTILINEMACRO_BEGIN \
+	parseError_ = msg; \
+	errorOffset_ = offset; \
+	longjmp(jmpbuf_, 1); \
+	RAPIDJSON_MULTILINEMACRO_END
+#endif
+
+namespace rapidjson {
+
+///////////////////////////////////////////////////////////////////////////////
+// ParseFlag
+
+//! Combination of parseFlags
+enum ParseFlag {
+	kParseDefaultFlags = 0,			//!< Default parse flags. Non-destructive parsing. Text strings are decoded into allocated buffer.
+	kParseInsituFlag = 1,			//!< In-situ(destructive) parsing.
+	kParseValidateEncodingFlag = 2,	//!< Validate encoding of JSON strings.
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Handler
+
+/*!	\class rapidjson::Handler
+	\brief Concept for receiving events from GenericReader upon parsing.
+\code
+concept Handler {
+	typename Ch;
+
+	void Null();
+	void Bool(bool b);
+	void Int(int i);
+	void Uint(unsigned i);
+	void Int64(int64_t i);
+	void Uint64(uint64_t i);
+	void Double(double d);
+	void String(const Ch* str, SizeType length, bool copy);
+	void StartObject();
+	void EndObject(SizeType memberCount);
+	void StartArray();
+	void EndArray(SizeType elementCount);
+};
+\endcode
+*/
+///////////////////////////////////////////////////////////////////////////////
+// BaseReaderHandler
+
+//! Default implementation of Handler.
+/*! This can be used as base class of any reader handler.
+	\implements Handler
+*/
+template<typename Encoding = UTF8<> >
+struct BaseReaderHandler {
+	typedef typename Encoding::Ch Ch;
+
+	void Default() {}
+	void Null() { Default(); }
+	void Bool(bool) { Default(); }
+	void Int(int) { Default(); }
+	void Uint(unsigned) { Default(); }
+	void Int64(int64_t) { Default(); }
+	void Uint64(uint64_t) { Default(); }
+	void Double(double) { Default(); }
+	void String(const Ch*, SizeType, bool) { Default(); }
+	void StartObject() { Default(); }
+	void EndObject(SizeType) { Default(); }
+	void StartArray() { Default(); }
+	void EndArray(SizeType) { Default(); }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// SkipWhitespace
+
+//! Skip the JSON white spaces in a stream.
+/*! \param stream A input stream for skipping white spaces.
+	\note This function has SSE2/SSE4.2 specialization.
+*/
+template<typename InputStream>
+void SkipWhitespace(InputStream& is) {
+	InputStream s = is;	// Use a local copy for optimization
+	while (s.Peek() == ' ' || s.Peek() == '\n' || s.Peek() == '\r' || s.Peek() == '\t')
+		s.Take();
+	is = s;
+}
+
+#ifdef RAPIDJSON_SSE42
+//! Skip whitespace with SSE 4.2 pcmpistrm instruction, testing 16 8-byte characters at once.
+inline const char *SkipWhitespace_SIMD(const char* p) {
+	static const char whitespace[16] = " \n\r\t";
+	__m128i w = _mm_loadu_si128((const __m128i *)&whitespace[0]);
+
+	for (;;) {
+		__m128i s = _mm_loadu_si128((const __m128i *)p);
+		unsigned r = _mm_cvtsi128_si32(_mm_cmpistrm(w, s, _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_BIT_MASK | _SIDD_NEGATIVE_POLARITY));
+		if (r == 0)	// all 16 characters are whitespace
+			p += 16;
+		else {		// some of characters may be non-whitespace
+#ifdef _MSC_VER		// Find the index of first non-whitespace
+			unsigned long offset;
+			if (_BitScanForward(&offset, r))
+				return p + offset;
+#else
+			if (r != 0)
+				return p + __builtin_ffs(r) - 1;
+#endif
+		}
+	}
+}
+
+#elif defined(RAPIDJSON_SSE2)
+
+//! Skip whitespace with SSE2 instructions, testing 16 8-byte characters at once.
+inline const char *SkipWhitespace_SIMD(const char* p) {
+	static const char whitespaces[4][17] = {
+		"                ",
+		"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
+		"\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r",
+		"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"};
+
+	__m128i w0 = _mm_loadu_si128((const __m128i *)&whitespaces[0][0]);
+	__m128i w1 = _mm_loadu_si128((const __m128i *)&whitespaces[1][0]);
+	__m128i w2 = _mm_loadu_si128((const __m128i *)&whitespaces[2][0]);
+	__m128i w3 = _mm_loadu_si128((const __m128i *)&whitespaces[3][0]);
+
+	for (;;) {
+		__m128i s = _mm_loadu_si128((const __m128i *)p);
+		__m128i x = _mm_cmpeq_epi8(s, w0);
+		x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w1));
+		x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w2));
+		x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w3));
+		unsigned short r = ~_mm_movemask_epi8(x);
+		if (r == 0)	// all 16 characters are whitespace
+			p += 16;
+		else {		// some of characters may be non-whitespace
+#ifdef _MSC_VER		// Find the index of first non-whitespace
+			unsigned long offset;
+			if (_BitScanForward(&offset, r))
+				return p + offset;
+#else
+			if (r != 0)
+				return p + __builtin_ffs(r) - 1;
+#endif
+		}
+	}
+}
+
+#endif // RAPIDJSON_SSE2
+
+#ifdef RAPIDJSON_SIMD
+//! Template function specialization for InsituStringStream
+template<> inline void SkipWhitespace(InsituStringStream& is) { 
+	is.src_ = const_cast<char*>(SkipWhitespace_SIMD(is.src_));
+}
+
+//! Template function specialization for StringStream
+template<> inline void SkipWhitespace(StringStream& is) {
+	is.src_ = SkipWhitespace_SIMD(is.src_);
+}
+#endif // RAPIDJSON_SIMD
+
+///////////////////////////////////////////////////////////////////////////////
+// GenericReader
+
+//! SAX-style JSON parser. Use Reader for UTF8 encoding and default allocator.
+/*! GenericReader parses JSON text from a stream, and send events synchronously to an 
+    object implementing Handler concept.
+
+    It needs to allocate a stack for storing a single decoded string during 
+    non-destructive parsing.
+
+    For in-situ parsing, the decoded string is directly written to the source 
+    text string, no temporary buffer is required.
+
+    A GenericReader object can be reused for parsing multiple JSON text.
+    
+    \tparam SourceEncoding Encoding of the input stream.
+	\tparam TargetEncoding Encoding of the parse output.
+    \tparam Allocator Allocator type for stack.
+*/
+template <typename SourceEncoding, typename TargetEncoding, typename Allocator = MemoryPoolAllocator<> >
+class GenericReader {
+public:
+	typedef typename SourceEncoding::Ch Ch;
+
+	//! Constructor.
+	/*! \param allocator Optional allocator for allocating stack memory. (Only use for non-destructive parsing)
+		\param stackCapacity stack capacity in bytes for storing a single decoded string.  (Only use for non-destructive parsing)
+	*/
+	GenericReader(Allocator* allocator = 0, size_t stackCapacity = kDefaultStackCapacity) : stack_(allocator, stackCapacity), parseError_(0), errorOffset_(0) {}
+
+	//! Parse JSON text.
+	/*! \tparam parseFlags Combination of ParseFlag. 
+		 \tparam InputStream Type of input stream.
+		 \tparam Handler Type of handler which must implement Handler concept.
+		 \param stream Input stream to be parsed.
+		 \param handler The handler to receive events.
+		 \return Whether the parsing is successful.
+	*/
+	template <unsigned parseFlags, typename InputStream, typename Handler>
+	bool Parse(InputStream& is, Handler& handler) {
+		parseError_ = 0;
+		errorOffset_ = 0;
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable : 4611) // interaction between '_setjmp' and C++ object destruction is non-portable
+#endif
+		if (setjmp(jmpbuf_)) {
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+			stack_.Clear();
+			return false;
+		}
+
+		SkipWhitespace(is);
+
+		if (is.Peek() == '\0')
+			RAPIDJSON_PARSE_ERROR("Text only contains white space(s)", is.Tell());
+		else {
+			switch (is.Peek()) {
+				case '{': ParseObject<parseFlags>(is, handler); break;
+				case '[': ParseArray<parseFlags>(is, handler); break;
+				default: RAPIDJSON_PARSE_ERROR("Expect either an object or array at root", is.Tell());
+			}
+			SkipWhitespace(is);
+
+			if (is.Peek() != '\0')
+				RAPIDJSON_PARSE_ERROR("Nothing should follow the root object or array.", is.Tell());
+		}
+
+		return true;
+	}
+
+	bool HasParseError() const { return parseError_ != 0; }
+	const char* GetParseError() const { return parseError_; }
+	size_t GetErrorOffset() const { return errorOffset_; }
+
+private:
+	// Parse object: { string : value, ... }
+	template<unsigned parseFlags, typename InputStream, typename Handler>
+	void ParseObject(InputStream& is, Handler& handler) {
+		RAPIDJSON_ASSERT(is.Peek() == '{');
+		is.Take();	// Skip '{'
+		handler.StartObject();
+		SkipWhitespace(is);
+
+		if (is.Peek() == '}') {
+			is.Take();
+			handler.EndObject(0);	// empty object
+			return;
+		}
+
+		for (SizeType memberCount = 0;;) {
+			if (is.Peek() != '"')
+				RAPIDJSON_PARSE_ERROR("Name of an object member must be a string", is.Tell());
+
+			ParseString<parseFlags>(is, handler);
+			SkipWhitespace(is);
+
+			if (is.Take() != ':')
+				RAPIDJSON_PARSE_ERROR("There must be a colon after the name of object member", is.Tell());
+
+			SkipWhitespace(is);
+
+			ParseValue<parseFlags>(is, handler);
+			SkipWhitespace(is);
+
+			++memberCount;
+
+			switch(is.Take()) {
+				case ',': SkipWhitespace(is); break;
+				case '}': handler.EndObject(memberCount); return;
+				default:  RAPIDJSON_PARSE_ERROR("Must be a comma or '}' after an object member", is.Tell());
+			}
+		}
+	}
+
+	// Parse array: [ value, ... ]
+	template<unsigned parseFlags, typename InputStream, typename Handler>
+	void ParseArray(InputStream& is, Handler& handler) {
+		RAPIDJSON_ASSERT(is.Peek() == '[');
+		is.Take();	// Skip '['
+		handler.StartArray();
+		SkipWhitespace(is);
+
+		if (is.Peek() == ']') {
+			is.Take();
+			handler.EndArray(0); // empty array
+			return;
+		}
+
+		for (SizeType elementCount = 0;;) {
+			ParseValue<parseFlags>(is, handler);
+			++elementCount;
+			SkipWhitespace(is);
+
+			switch (is.Take()) {
+				case ',': SkipWhitespace(is); break;
+				case ']': handler.EndArray(elementCount); return;
+				default:  RAPIDJSON_PARSE_ERROR("Must be a comma or ']' after an array element.", is.Tell());
+			}
+		}
+	}
+
+	template<unsigned parseFlags, typename InputStream, typename Handler>
+	void ParseNull(InputStream& is, Handler& handler) {
+		RAPIDJSON_ASSERT(is.Peek() == 'n');
+		is.Take();
+
+		if (is.Take() == 'u' && is.Take() == 'l' && is.Take() == 'l')
+			handler.Null();
+		else
+			RAPIDJSON_PARSE_ERROR("Invalid value", is.Tell() - 1);
+	}
+
+	template<unsigned parseFlags, typename InputStream, typename Handler>
+	void ParseTrue(InputStream& is, Handler& handler) {
+		RAPIDJSON_ASSERT(is.Peek() == 't');
+		is.Take();
+
+		if (is.Take() == 'r' && is.Take() == 'u' && is.Take() == 'e')
+			handler.Bool(true);
+		else
+			RAPIDJSON_PARSE_ERROR("Invalid value", is.Tell());
+	}
+
+	template<unsigned parseFlags, typename InputStream, typename Handler>
+	void ParseFalse(InputStream& is, Handler& handler) {
+		RAPIDJSON_ASSERT(is.Peek() == 'f');
+		is.Take();
+
+		if (is.Take() == 'a' && is.Take() == 'l' && is.Take() == 's' && is.Take() == 'e')
+			handler.Bool(false);
+		else
+			RAPIDJSON_PARSE_ERROR("Invalid value", is.Tell() - 1);
+	}
+
+	// Helper function to parse four hexidecimal digits in \uXXXX in ParseString().
+	template<typename InputStream>
+	unsigned ParseHex4(InputStream& is) {
+		InputStream s = is;	// Use a local copy for optimization
+		unsigned codepoint = 0;
+		for (int i = 0; i < 4; i++) {
+			Ch c = s.Take();
+			codepoint <<= 4;
+			codepoint += c;
+			if (c >= '0' && c <= '9')
+				codepoint -= '0';
+			else if (c >= 'A' && c <= 'F')
+				codepoint -= 'A' - 10;
+			else if (c >= 'a' && c <= 'f')
+				codepoint -= 'a' - 10;
+			else
+				RAPIDJSON_PARSE_ERROR("Incorrect hex digit after \\u escape", s.Tell() - 1);
+		}
+		is = s; // Restore is
+		return codepoint;
+	}
+
+	class StackStream {
+	public:
+		typedef typename TargetEncoding::Ch Ch;
+
+		StackStream(internal::Stack<Allocator>& stack) : stack_(stack), length_(0) {}
+		void Put(Ch c) {
+			*stack_.template Push<Ch>() = c;
+			++length_;
+		}
+		internal::Stack<Allocator>& stack_;
+		SizeType length_;
+
+	private:
+		// Prohibit assignment for VC C4512 warning
+		StackStream& operator=(const StackStream&);
+	};
+
+	// Parse string and generate String event. Different code paths for kParseInsituFlag.
+	template<unsigned parseFlags, typename InputStream, typename Handler>
+	void ParseString(InputStream& is, Handler& handler) {
+		InputStream s = is;	// Local copy for optimization
+		if (parseFlags & kParseInsituFlag) {
+			Ch *head = s.PutBegin();
+			ParseStringToStream<parseFlags, SourceEncoding, SourceEncoding>(s, s);
+			size_t length = s.PutEnd(head) - 1;
+			RAPIDJSON_ASSERT(length <= 0xFFFFFFFF);
+			handler.String((typename TargetEncoding::Ch*)head, SizeType(length), false);
+		}
+		else {
+			StackStream stackStream(stack_);
+			ParseStringToStream<parseFlags, SourceEncoding, TargetEncoding>(s, stackStream);
+			handler.String(stack_.template Pop<typename TargetEncoding::Ch>(stackStream.length_), stackStream.length_ - 1, true);
+		}
+		is = s;		// Restore is
+	}
+
+	// Parse string to an output is
+	// This function handles the prefix/suffix double quotes, escaping, and optional encoding validation.
+	template<unsigned parseFlags, typename SEncoding, typename TEncoding, typename InputStream, typename OutputStream>
+	RAPIDJSON_FORCEINLINE void ParseStringToStream(InputStream& is, OutputStream& os) {
+#define Z16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+		static const char escape[256] = {
+			Z16, Z16, 0, 0,'\"', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,'/', 
+			Z16, Z16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,'\\', 0, 0, 0, 
+			0, 0,'\b', 0, 0, 0,'\f', 0, 0, 0, 0, 0, 0, 0,'\n', 0, 
+			0, 0,'\r', 0,'\t', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+			Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16
+		};
+#undef Z16
+
+		RAPIDJSON_ASSERT(is.Peek() == '\"');
+		is.Take();	// Skip '\"'
+
+		for (;;) {
+			Ch c = is.Peek();
+			if (c == '\\') {	// Escape
+				is.Take();
+				Ch e = is.Take();
+				if ((sizeof(Ch) == 1 || unsigned(e) < 256) && escape[(unsigned char)e])
+					os.Put(escape[(unsigned char)e]);
+				else if (e == 'u') {	// Unicode
+					unsigned codepoint = ParseHex4(is);
+					if (codepoint >= 0xD800 && codepoint <= 0xDBFF) {
+						// Handle UTF-16 surrogate pair
+						if (is.Take() != '\\' || is.Take() != 'u')
+							RAPIDJSON_PARSE_ERROR("Missing the second \\u in surrogate pair", is.Tell() - 2);
+						unsigned codepoint2 = ParseHex4(is);
+						if (codepoint2 < 0xDC00 || codepoint2 > 0xDFFF)
+							RAPIDJSON_PARSE_ERROR("The second \\u in surrogate pair is invalid", is.Tell() - 2);
+						codepoint = (((codepoint - 0xD800) << 10) | (codepoint2 - 0xDC00)) + 0x10000;
+					}
+					TEncoding::Encode(os, codepoint);
+				}
+				else
+					RAPIDJSON_PARSE_ERROR("Unknown escape character", is.Tell() - 1);
+			}
+			else if (c == '"') {	// Closing double quote
+				is.Take();
+				os.Put('\0');	// null-terminate the string
+				return;
+			}
+			else if (c == '\0')
+				RAPIDJSON_PARSE_ERROR("lacks ending quotation before the end of string", is.Tell() - 1);
+			else if ((unsigned)c < 0x20) // RFC 4627: unescaped = %x20-21 / %x23-5B / %x5D-10FFFF
+				RAPIDJSON_PARSE_ERROR("Incorrect unescaped character in string", is.Tell() - 1);
+			else {
+				if (parseFlags & kParseValidateEncodingFlag ? 
+					!Transcoder<SEncoding, TEncoding>::Validate(is, os) : 
+					!Transcoder<SEncoding, TEncoding>::Transcode(is, os))
+					RAPIDJSON_PARSE_ERROR("Invalid encoding", is.Tell());
+			}
+		}
+	}
+
+	template<unsigned parseFlags, typename InputStream, typename Handler>
+	void ParseNumber(InputStream& is, Handler& handler) {
+		InputStream s = is; // Local copy for optimization
+		// Parse minus
+		bool minus = false;
+		if (s.Peek() == '-') {
+			minus = true;
+			s.Take();
+		}
+
+		// Parse int: zero / ( digit1-9 *DIGIT )
+		unsigned i;
+		bool try64bit = false;
+		if (s.Peek() == '0') {
+			i = 0;
+			s.Take();
+		}
+		else if (s.Peek() >= '1' && s.Peek() <= '9') {
+			i = s.Take() - '0';
+
+			if (minus)
+				while (s.Peek() >= '0' && s.Peek() <= '9') {
+					if (i >= 214748364) { // 2^31 = 2147483648
+						if (i != 214748364 || s.Peek() > '8') {
+							try64bit = true;
+							break;
+						}
+					}
+					i = i * 10 + (s.Take() - '0');
+				}
+			else
+				while (s.Peek() >= '0' && s.Peek() <= '9') {
+					if (i >= 429496729) { // 2^32 - 1 = 4294967295
+						if (i != 429496729 || s.Peek() > '5') {
+							try64bit = true;
+							break;
+						}
+					}
+					i = i * 10 + (s.Take() - '0');
+				}
+		}
+		else
+			RAPIDJSON_PARSE_ERROR("Expect a value here.", is.Tell());
+
+		// Parse 64bit int
+		uint64_t i64 = 0;
+		bool useDouble = false;
+		if (try64bit) {
+			i64 = i;
+			if (minus) 
+				while (s.Peek() >= '0' && s.Peek() <= '9') {					
+					if (i64 >= 922337203685477580uLL) // 2^63 = 9223372036854775808
+						if (i64 != 922337203685477580uLL || s.Peek() > '8') {
+							useDouble = true;
+							break;
+						}
+					i64 = i64 * 10 + (s.Take() - '0');
+				}
+			else
+				while (s.Peek() >= '0' && s.Peek() <= '9') {					
+					if (i64 >= 1844674407370955161uLL) // 2^64 - 1 = 18446744073709551615
+						if (i64 != 1844674407370955161uLL || s.Peek() > '5') {
+							useDouble = true;
+							break;
+						}
+					i64 = i64 * 10 + (s.Take() - '0');
+				}
+		}
+
+		// Force double for big integer
+		double d = 0.0;
+		if (useDouble) {
+			d = (double)i64;
+			while (s.Peek() >= '0' && s.Peek() <= '9') {
+				if (d >= 1E307)
+					RAPIDJSON_PARSE_ERROR("Number too big to store in double", is.Tell());
+				d = d * 10 + (s.Take() - '0');
+			}
+		}
+
+		// Parse frac = decimal-point 1*DIGIT
+		int expFrac = 0;
+		if (s.Peek() == '.') {
+			if (!useDouble) {
+				d = try64bit ? (double)i64 : (double)i;
+				useDouble = true;
+			}
+			s.Take();
+
+			if (s.Peek() >= '0' && s.Peek() <= '9') {
+				d = d * 10 + (s.Take() - '0');
+				--expFrac;
+			}
+			else
+				RAPIDJSON_PARSE_ERROR("At least one digit in fraction part", is.Tell());
+
+			while (s.Peek() >= '0' && s.Peek() <= '9') {
+				if (expFrac > -16) {
+					d = d * 10 + (s.Peek() - '0');
+					--expFrac;
+				}
+				s.Take();
+			}
+		}
+
+		// Parse exp = e [ minus / plus ] 1*DIGIT
+		int exp = 0;
+		if (s.Peek() == 'e' || s.Peek() == 'E') {
+			if (!useDouble) {
+				d = try64bit ? (double)i64 : (double)i;
+				useDouble = true;
+			}
+			s.Take();
+
+			bool expMinus = false;
+			if (s.Peek() == '+')
+				s.Take();
+			else if (s.Peek() == '-') {
+				s.Take();
+				expMinus = true;
+			}
+
+			if (s.Peek() >= '0' && s.Peek() <= '9') {
+				exp = s.Take() - '0';
+				while (s.Peek() >= '0' && s.Peek() <= '9') {
+					exp = exp * 10 + (s.Take() - '0');
+					if (exp > 308)
+						RAPIDJSON_PARSE_ERROR("Number too big to store in double", is.Tell());
+				}
+			}
+			else
+				RAPIDJSON_PARSE_ERROR("At least one digit in exponent", s.Tell());
+
+			if (expMinus)
+				exp = -exp;
+		}
+
+		// Finish parsing, call event according to the type of number.
+		if (useDouble) {
+			d *= internal::Pow10(exp + expFrac);
+			handler.Double(minus ? -d : d);
+		}
+		else {
+			if (try64bit) {
+				if (minus)
+					handler.Int64(-(int64_t)i64);
+				else
+					handler.Uint64(i64);
+			}
+			else {
+				if (minus)
+					handler.Int(-(int)i);
+				else
+					handler.Uint(i);
+			}
+		}
+
+		is = s; // restore is
+	}
+
+	// Parse any JSON value
+	template<unsigned parseFlags, typename InputStream, typename Handler>
+	void ParseValue(InputStream& is, Handler& handler) {
+		switch (is.Peek()) {
+			case 'n': ParseNull  <parseFlags>(is, handler); break;
+			case 't': ParseTrue  <parseFlags>(is, handler); break;
+			case 'f': ParseFalse <parseFlags>(is, handler); break;
+			case '"': ParseString<parseFlags>(is, handler); break;
+			case '{': ParseObject<parseFlags>(is, handler); break;
+			case '[': ParseArray <parseFlags>(is, handler); break;
+			default : ParseNumber<parseFlags>(is, handler);
+		}
+	}
+
+	static const size_t kDefaultStackCapacity = 256;	//!< Default stack capacity in bytes for storing a single decoded string. 
+	internal::Stack<Allocator> stack_;	//!< A stack for storing decoded string temporarily during non-destructive parsing.
+	jmp_buf jmpbuf_;					//!< setjmp buffer for fast exit from nested parsing function calls.
+	const char* parseError_;
+	size_t errorOffset_;
+}; // class GenericReader
+
+//! Reader with UTF8 encoding and default allocator.
+typedef GenericReader<UTF8<>, UTF8<> > Reader;
+
+} // namespace rapidjson
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+#endif // RAPIDJSON_READER_H_

+ 50 - 0
engine/source/persistence/rapidjson/include/rapidjson/stringbuffer.h

@@ -0,0 +1,50 @@
+#ifndef RAPIDJSON_STRINGBUFFER_H_
+#define RAPIDJSON_STRINGBUFFER_H_
+
+#include "rapidjson.h"
+#include "internal/stack.h"
+
+namespace rapidjson {
+
+//! Represents an in-memory output stream.
+/*!
+	\tparam Encoding Encoding of the stream.
+	\tparam Allocator type for allocating memory buffer.
+	\implements Stream
+*/
+template <typename Encoding, typename Allocator = CrtAllocator>
+struct GenericStringBuffer {
+	typedef typename Encoding::Ch Ch;
+
+	GenericStringBuffer(Allocator* allocator = 0, size_t capacity = kDefaultCapacity) : stack_(allocator, capacity) {}
+
+	void Put(Ch c) { *stack_.template Push<Ch>() = c; }
+	void Flush() {}
+
+	void Clear() { stack_.Clear(); }
+
+	const Ch* GetString() const {
+		// Push and pop a null terminator. This is safe.
+		*stack_.template Push<Ch>() = '\0';
+		stack_.template Pop<Ch>(1);
+
+		return stack_.template Bottom<Ch>();
+	}
+
+	size_t GetSize() const { return stack_.GetSize(); }
+
+	static const size_t kDefaultCapacity = 256;
+	mutable internal::Stack<Allocator> stack_;
+};
+
+typedef GenericStringBuffer<UTF8<> > StringBuffer;
+
+//! Implement specialized version of PutN() with memset() for better performance.
+template<>
+inline void PutN(GenericStringBuffer<UTF8<> >& stream, char c, size_t n) {
+	memset(stream.stack_.Push<char>(n), c, n * sizeof(c));
+}
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_STRINGBUFFER_H_

+ 249 - 0
engine/source/persistence/rapidjson/include/rapidjson/writer.h

@@ -0,0 +1,249 @@
+#ifndef RAPIDJSON_WRITER_H_
+#define RAPIDJSON_WRITER_H_
+
+#include "rapidjson.h"
+#include "internal/stack.h"
+#include "internal/strfunc.h"
+#include <cstdio>	// snprintf() or _sprintf_s()
+#include <new>		// placement new
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable : 4127) // conditional expression is constant
+#endif
+
+namespace rapidjson {
+
+//! JSON writer
+/*! Writer implements the concept Handler.
+	It generates JSON text by events to an output os.
+
+	User may programmatically calls the functions of a writer to generate JSON text.
+
+	On the other side, a writer can also be passed to objects that generates events, 
+
+	for example Reader::Parse() and Document::Accept().
+
+	\tparam OutputStream Type of output stream.
+	\tparam SourceEncoding Encoding of both source strings.
+	\tparam TargetEncoding Encoding of and output stream.
+	\implements Handler
+*/
+template<typename OutputStream, typename SourceEncoding = UTF8<>, typename TargetEncoding = UTF8<>, typename Allocator = MemoryPoolAllocator<> >
+class Writer {
+public:
+	typedef typename SourceEncoding::Ch Ch;
+
+	Writer(OutputStream& os, Allocator* allocator = 0, size_t levelDepth = kDefaultLevelDepth) : 
+		os_(os), level_stack_(allocator, levelDepth * sizeof(Level)) {}
+
+	//@name Implementation of Handler
+	//@{
+	Writer& Null()					{ Prefix(kNullType);   WriteNull();			return *this; }
+	Writer& Bool(bool b)			{ Prefix(b ? kTrueType : kFalseType); WriteBool(b); return *this; }
+	Writer& Int(int i)				{ Prefix(kNumberType); WriteInt(i);			return *this; }
+	Writer& Uint(unsigned u)		{ Prefix(kNumberType); WriteUint(u);		return *this; }
+	Writer& Int64(int64_t i64)		{ Prefix(kNumberType); WriteInt64(i64);		return *this; }
+	Writer& Uint64(uint64_t u64)	{ Prefix(kNumberType); WriteUint64(u64);	return *this; }
+	Writer& Double(double d)		{ Prefix(kNumberType); WriteDouble(d);		return *this; }
+
+	Writer& String(const Ch* str, SizeType length, bool copy = false) {
+		(void)copy;
+		Prefix(kStringType);
+		WriteString(str, length);
+		return *this;
+	}
+
+	Writer& StartObject() {
+		Prefix(kObjectType);
+		new (level_stack_.template Push<Level>()) Level(false);
+		WriteStartObject();
+		return *this;
+	}
+
+	Writer& EndObject(SizeType memberCount = 0) {
+		(void)memberCount;
+		RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level));
+		RAPIDJSON_ASSERT(!level_stack_.template Top<Level>()->inArray);
+		level_stack_.template Pop<Level>(1);
+		WriteEndObject();
+		if (level_stack_.Empty())	// end of json text
+			os_.Flush();
+		return *this;
+	}
+
+	Writer& StartArray() {
+		Prefix(kArrayType);
+		new (level_stack_.template Push<Level>()) Level(true);
+		WriteStartArray();
+		return *this;
+	}
+
+	Writer& EndArray(SizeType elementCount = 0) {
+		(void)elementCount;
+		RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level));
+		RAPIDJSON_ASSERT(level_stack_.template Top<Level>()->inArray);
+		level_stack_.template Pop<Level>(1);
+		WriteEndArray();
+		if (level_stack_.Empty())	// end of json text
+			os_.Flush();
+		return *this;
+	}
+	//@}
+
+	//! Simpler but slower overload.
+	Writer& String(const Ch* str) { return String(str, internal::StrLen(str)); }
+
+protected:
+	//! Information for each nested level
+	struct Level {
+		Level(bool inArray_) : inArray(inArray_), valueCount(0) {}
+		bool inArray;		//!< true if in array, otherwise in object
+		size_t valueCount;	//!< number of values in this level
+	};
+
+	static const size_t kDefaultLevelDepth = 32;
+
+	void WriteNull()  {
+		os_.Put('n'); os_.Put('u'); os_.Put('l'); os_.Put('l');
+	}
+
+	void WriteBool(bool b)  {
+		if (b) {
+			os_.Put('t'); os_.Put('r'); os_.Put('u'); os_.Put('e');
+		}
+		else {
+			os_.Put('f'); os_.Put('a'); os_.Put('l'); os_.Put('s'); os_.Put('e');
+		}
+	}
+
+	void WriteInt(int i) {
+		if (i < 0) {
+			os_.Put('-');
+			i = -i;
+		}
+		WriteUint((unsigned)i);
+	}
+
+	void WriteUint(unsigned u) {
+		char buffer[10];
+		char *p = buffer;
+		do {
+			*p++ = (u % 10) + '0';
+			u /= 10;
+		} while (u > 0);
+
+		do {
+			--p;
+			os_.Put(*p);
+		} while (p != buffer);
+	}
+
+	void WriteInt64(int64_t i64) {
+		if (i64 < 0) {
+			os_.Put('-');
+			i64 = -i64;
+		}
+		WriteUint64((uint64_t)i64);
+	}
+
+	void WriteUint64(uint64_t u64) {
+		char buffer[20];
+		char *p = buffer;
+		do {
+			*p++ = char(u64 % 10) + '0';
+			u64 /= 10;
+		} while (u64 > 0);
+
+		do {
+			--p;
+			os_.Put(*p);
+		} while (p != buffer);
+	}
+
+	//! \todo Optimization with custom double-to-string converter.
+	void WriteDouble(double d) {
+		char buffer[100];
+#if _MSC_VER
+		int ret = sprintf_s(buffer, sizeof(buffer), "%g", d);
+#else
+		int ret = snprintf(buffer, sizeof(buffer), "%g", d);
+#endif
+		RAPIDJSON_ASSERT(ret >= 1);
+		for (int i = 0; i < ret; i++)
+			os_.Put(buffer[i]);
+	}
+
+	void WriteString(const Ch* str, SizeType length)  {
+		static const char hexDigits[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+		static const char escape[256] = {
+#define Z16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+			//0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
+			'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'b', 't', 'n', 'u', 'f', 'r', 'u', 'u', // 00
+			'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', // 10
+			  0,   0, '"',   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, // 20
+			Z16, Z16,																		// 30~4F
+			  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,'\\',   0,   0,   0, // 50
+			Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16								// 60~FF
+#undef Z16
+		};
+
+		os_.Put('\"');
+		GenericStringStream<SourceEncoding> is(str);
+		while (is.Tell() < length) {
+			const Ch c = is.Peek();
+			if ((sizeof(Ch) == 1 || (unsigned)c < 256) && escape[(unsigned char)c])  {
+				is.Take();
+				os_.Put('\\');
+				os_.Put(escape[(unsigned char)c]);
+				if (escape[(unsigned char)c] == 'u') {
+					os_.Put('0');
+					os_.Put('0');
+					os_.Put(hexDigits[(unsigned char)c >> 4]);
+					os_.Put(hexDigits[(unsigned char)c & 0xF]);
+				}
+			}
+			else
+				Transcoder<SourceEncoding, TargetEncoding>::Transcode(is, os_);
+		}
+		os_.Put('\"');
+	}
+
+	void WriteStartObject()	{ os_.Put('{'); }
+	void WriteEndObject()	{ os_.Put('}'); }
+	void WriteStartArray()	{ os_.Put('['); }
+	void WriteEndArray()	{ os_.Put(']'); }
+
+	void Prefix(Type type) {
+		(void)type;
+		if (level_stack_.GetSize() != 0) { // this value is not at root
+			Level* level = level_stack_.template Top<Level>();
+			if (level->valueCount > 0) {
+				if (level->inArray) 
+					os_.Put(','); // add comma if it is not the first element in array
+				else  // in object
+					os_.Put((level->valueCount % 2 == 0) ? ',' : ':');
+			}
+			if (!level->inArray && level->valueCount % 2 == 0)
+				RAPIDJSON_ASSERT(type == kStringType);  // if it's in object, then even number should be a name
+			level->valueCount++;
+		}
+		else
+			RAPIDJSON_ASSERT(type == kObjectType || type == kArrayType);
+	}
+
+	OutputStream& os_;
+	internal::Stack<Allocator> level_stack_;
+
+private:
+	// Prohibit assignment for VC C4512 warning
+	Writer& operator=(const Writer& w);
+};
+
+} // namespace rapidjson
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+#endif // RAPIDJSON_RAPIDJSON_H_

+ 19 - 0
engine/source/persistence/rapidjson/license.txt

@@ -0,0 +1,19 @@
+Copyright (C) 2011 Milo Yip
+
+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.

+ 34 - 0
engine/source/persistence/rapidjson/readme.txt

@@ -0,0 +1,34 @@
+Rapidjson v0.1
+
+Copyright (c) 2011 Milo Yip ([email protected])
+
+http://code.google.com/p/rapidjson/
+
+19 Nov 2011
+
+1. Introduction
+Rapidjson is a JSON parser and generator for C++. It was inspired by rapidxml http://rapidxml.sourceforge.net/
+Rapidjson is small but complete. It supports both SAX and DOM style API. The SAX parser is only a half thousand lines of code.
+Rapidjson is fast. Its performance can be comparable to strlen(). It also optionally supports SSE2/SSE4.1 for acceleration.
+Rapidjson is self-contained. It does not depend on external libraries such as BOOST. It even does not depend on STL.
+Rapidjson is memory friendly. Each JSON value costs exactly 16/20 bytes for 32/64-bit machines (excluding text string). By default it uses a fast memory allocator, and the parser allocates memory compactly during parsing. 
+
+For the full features please refer to the user guide.
+
+JSON(JavaScript Object Notation) is a light-weight data exchange format.
+More information about JSON can be obtained at
+http://json.org/
+http://www.ietf.org/rfc/rfc4627.txt
+
+2. Installation
+
+Rapidjson is a header-only C++ library. Just copy the rapidjson/include/rapidjson folder to system or project's include path.
+
+To build the tests and examples,
+1. obtain premake4 http://industriousone.com/premake/download
+2. Copy premake4 executable to rapidjson/build
+3. Run rapidjson/build/premake.bat on Windows, rapidjson/build/premake on Linux or other platforms
+4. On Windows, build the solution at rapidjson/build/vs2008/ or /vs2010/
+5. On other platforms, run GNU make at rapidjson/build/gmake/ (e.g., make -f test.make config=release32, make -f example.make config=debug32)
+6. On success, the executable are generated at rapidjson/bin
+

+ 57 - 0
engine/source/persistence/rapidjson/test/perftest/jsoncpptest.cpp

@@ -0,0 +1,57 @@
+#include "perftest.h"
+
+#if TEST_JSONCPP
+
+#include "jsoncpp/src/lib_json/json_reader.cpp"
+#include "jsoncpp/src/lib_json/json_value.cpp"
+#include "jsoncpp/src/lib_json/json_writer.cpp"
+
+using namespace Json;
+
+class JsonCpp : public PerfTest {
+public:
+	virtual void SetUp() {
+		PerfTest::SetUp();
+		Reader reader;
+		ASSERT_TRUE(reader.parse(json_, root_));
+	}
+
+protected:
+	Value root_;
+};
+
+TEST_F(JsonCpp, ReaderParse) {
+	for (int i = 0; i < kTrialCount; i++) {
+		Value root;
+		Reader reader;
+		ASSERT_TRUE(reader.parse(json_, root));
+	}
+}
+
+TEST_F(JsonCpp, FastWriter) {
+	for (int i = 0; i < kTrialCount; i++) {
+		FastWriter writer;
+		std::string str = writer.write(root_);
+		//if (i == 0)
+		//	std::cout << str.length() << std::endl;
+	}
+}
+
+TEST_F(JsonCpp, StyledWriter) {
+	for (int i = 0; i < kTrialCount; i++) {
+		StyledWriter writer;
+		std::string str = writer.write(root_);
+		//if (i == 0)
+		//	std::cout << str.length() << std::endl;
+	}
+}
+
+TEST_F(JsonCpp, Whitespace) {
+	for (int i = 0; i < kTrialCount; i++) {
+		Value root;
+		Reader reader;
+		ASSERT_TRUE(reader.parse(whitespace_, root));
+	}
+}
+
+#endif // TEST_JSONCPP

+ 61 - 0
engine/source/persistence/rapidjson/test/perftest/misctest.cpp

@@ -0,0 +1,61 @@
+#include "perftest.h"
+
+#if TEST_MISC
+
+class Misc : public PerfTest {
+};
+
+// Copyright (c) 2008-2010 Bjoern Hoehrmann <[email protected]>
+// See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details.
+
+#define UTF8_ACCEPT 0
+#define UTF8_REJECT 12
+
+static const unsigned char utf8d[] = {
+	// The first part of the table maps bytes to character classes that
+	// to reduce the size of the transition table and create bitmasks.
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,  9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+	7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+	8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+	10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, 11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8,
+
+	// The second part is a transition table that maps a combination
+	// of a state of the automaton and a character class to a state.
+	0,12,24,36,60,96,84,12,12,12,48,72, 12,12,12,12,12,12,12,12,12,12,12,12,
+	12, 0,12,12,12,12,12, 0,12, 0,12,12, 12,24,12,12,12,12,12,24,12,24,12,12,
+	12,12,12,12,12,12,12,24,12,12,12,12, 12,24,12,12,12,12,12,12,12,24,12,12,
+	12,12,12,12,12,12,12,36,12,36,12,12, 12,36,12,12,12,12,12,36,12,36,12,12,
+	12,36,12,12,12,12,12,12,12,12,12,12, 
+};
+
+static unsigned inline decode(unsigned* state, unsigned* codep, unsigned byte) {
+	unsigned type = utf8d[byte];
+
+	*codep = (*state != UTF8_ACCEPT) ?
+		(byte & 0x3fu) | (*codep << 6) :
+	(0xff >> type) & (byte);
+
+	*state = utf8d[256 + *state + type];
+	return *state;
+}
+
+static bool IsUTF8(unsigned char* s) {
+	unsigned codepoint, state = 0;
+
+	while (*s)
+		decode(&state, &codepoint, *s++);
+
+	return state == UTF8_ACCEPT;
+}
+
+TEST_F(Misc, Hoehrmann_IsUTF8) {
+	for (int i = 0; i < kTrialCount; i++) {
+		EXPECT_TRUE(IsUTF8((unsigned char*)json_));
+	}
+}
+
+#endif // TEST_ULTRAJSON

+ 10 - 0
engine/source/persistence/rapidjson/test/perftest/perftest.cpp

@@ -0,0 +1,10 @@
+#include "perftest.h"
+
+int main(int argc, char **argv) {
+#if _MSC_VER
+	_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
+	//void *testWhetherMemoryLeakDetectionWorks = malloc(1);
+#endif
+	::testing::InitGoogleTest(&argc, argv);
+	return RUN_ALL_TESTS();
+}

+ 85 - 0
engine/source/persistence/rapidjson/test/perftest/perftest.h

@@ -0,0 +1,85 @@
+#ifndef PERFTEST_H_
+#define PERFTEST_H_
+
+#define TEST_RAPIDJSON	1
+#define TEST_JSONCPP	0
+#define TEST_YAJL		0
+#define TEST_ULTRAJSON  0
+#define TEST_PLATFORM   0
+#define TEST_MISC		0
+
+#if TEST_RAPIDJSON
+//#define RAPIDJSON_SSE2
+#define RAPIDJSON_SSE42
+#endif
+
+#if TEST_YAJL
+#include "yajl/yajl_common.h"
+#undef YAJL_MAX_DEPTH
+#define YAJL_MAX_DEPTH 1024
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// Google Test
+
+#ifdef __cplusplus
+
+#include "gtest/gtest.h"
+
+#ifdef _MSC_VER
+#define _CRTDBG_MAP_ALLOC
+#include <crtdbg.h>
+#pragma warning(disable : 4996) // 'function': was declared deprecated
+#endif
+
+//! Base class for all performance tests
+class PerfTest : public ::testing::Test {
+public:
+	virtual void SetUp() {
+		FILE *fp = fopen(filename_ = "data/sample.json", "rb");
+		if (!fp) 
+			fp = fopen(filename_ = "../../bin/data/sample.json", "rb");
+		ASSERT_TRUE(fp != 0);
+
+		fseek(fp, 0, SEEK_END);
+		length_ = (size_t)ftell(fp);
+		fseek(fp, 0, SEEK_SET);
+		json_ = (char*)malloc(length_ + 1);
+		ASSERT_EQ(length_, fread(json_, 1, length_, fp));
+		json_[length_] = '\0';
+		fclose(fp);
+
+		// whitespace test
+		whitespace_length_ = 1024 * 1024;
+		whitespace_ = (char *)malloc(whitespace_length_  + 4);
+		char *p = whitespace_;
+		for (size_t i = 0; i < whitespace_length_; i += 4) {
+			*p++ = ' ';
+			*p++ = '\n';
+			*p++ = '\r';
+			*p++ = '\t';
+		}
+		*p++ = '[';
+		*p++ = '0';
+		*p++ = ']';
+		*p++ = '\0';
+	}
+
+	virtual void TearDown() {
+		free(json_);
+		free(whitespace_);
+	}
+
+protected:
+	const char* filename_;
+	char *json_;
+	size_t length_;
+	char *whitespace_;
+	size_t whitespace_length_;
+
+	static const size_t kTrialCount = 1000;
+};
+
+#endif // __cplusplus
+
+#endif // PERFTEST_H_

+ 152 - 0
engine/source/persistence/rapidjson/test/perftest/platformtest.cpp

@@ -0,0 +1,152 @@
+#include "perftest.h"
+
+// This file is for giving the performance characteristics of the platform (compiler/OS/CPU).
+
+#if TEST_PLATFORM
+
+#include <cmath>
+#include <fcntl.h>
+
+// Windows
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
+// UNIX
+#if defined(unix) || defined(__unix__) || defined(__unix)
+#include <unistd.h>
+#ifdef _POSIX_MAPPED_FILES
+#include <sys/mman.h>
+#endif
+#endif
+
+class Platform : public PerfTest {
+public:
+	virtual void SetUp() {
+		PerfTest::SetUp();
+
+		// temp buffer for testing
+		temp_ = (char *)malloc(length_ + 1);
+		memcpy(temp_, json_, length_);
+		checkSum_ = CheckSum();
+	}
+
+	char CheckSum() {
+		char c = 0;
+		for (size_t i = 0; i < length_; ++i)
+			c += temp_[i];
+		return c;
+	}
+
+	virtual void TearDown() {
+		PerfTest::TearDown();
+		free(temp_);
+	}
+
+protected:
+	char *temp_;
+	char checkSum_;
+};
+
+TEST_F(Platform, CheckSum) {
+	for (int i = 0; i < kTrialCount; i++)
+		EXPECT_EQ(checkSum_, CheckSum());
+}
+
+TEST_F(Platform, strlen) {
+	for (int i = 0; i < kTrialCount; i++) {
+		size_t l = strlen(json_);
+		EXPECT_EQ(length_, l);
+	}
+}
+
+TEST_F(Platform, memcmp) {
+	for (int i = 0; i < kTrialCount; i++) {
+		EXPECT_EQ(0, memcmp(temp_, json_, length_));
+	}
+}
+
+TEST_F(Platform, pow) {
+	double sum = 0;
+	for (int i = 0; i < kTrialCount * kTrialCount; i++)
+		sum += pow(10.0, i & 255);
+	EXPECT_GT(sum, 0.0);
+}
+
+TEST_F(Platform, Whitespace_strlen) {
+	for (int i = 0; i < kTrialCount; i++) {
+		size_t l = strlen(whitespace_);
+		EXPECT_GT(l, whitespace_length_);
+	}		
+}
+
+TEST_F(Platform, Whitespace_strspn) {
+	for (int i = 0; i < kTrialCount; i++) {
+		size_t l = strspn(whitespace_, " \n\r\t");
+		EXPECT_EQ(whitespace_length_, l);
+	}		
+}
+
+TEST_F(Platform, fread) {
+	for (int i = 0; i < kTrialCount; i++) {
+		FILE *fp = fopen(filename_, "rb");
+		ASSERT_EQ(length_, fread(temp_, 1, length_, fp));
+		EXPECT_EQ(checkSum_, CheckSum());
+		fclose(fp);
+	}
+}
+
+#ifdef _MSC_VER
+TEST_F(Platform, read) {
+	for (int i = 0; i < kTrialCount; i++) {
+		int fd = _open(filename_, _O_BINARY | _O_RDONLY);
+		ASSERT_NE(-1, fd);
+		ASSERT_EQ(length_, _read(fd, temp_, length_));
+		EXPECT_EQ(checkSum_, CheckSum());
+		_close(fd);
+	}
+}
+#else
+TEST_F(Platform, read) {
+	for (int i = 0; i < kTrialCount; i++) {
+		int fd = open(filename_, O_RDONLY);
+		ASSERT_NE(-1, fd);
+		ASSERT_EQ(length_, read(fd, temp_, length_));
+		EXPECT_EQ(checkSum_, CheckSum());
+		close(fd);
+	}
+}
+#endif
+
+#ifdef _WIN32
+TEST_F(Platform, MapViewOfFile) {
+	for (int i = 0; i < kTrialCount; i++) {
+		HANDLE file = CreateFile(filename_, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+		ASSERT_NE(INVALID_HANDLE_VALUE, file);
+		HANDLE mapObject = CreateFileMapping(file, NULL, PAGE_READONLY, 0, length_, NULL);
+		ASSERT_NE(INVALID_HANDLE_VALUE, mapObject);
+		void *p = MapViewOfFile(mapObject, FILE_MAP_READ, 0, 0, length_);
+		ASSERT_TRUE(p != NULL);
+		EXPECT_EQ(checkSum_, CheckSum());
+		ASSERT_TRUE(UnmapViewOfFile(p) == TRUE);
+		ASSERT_TRUE(CloseHandle(mapObject) == TRUE);
+		ASSERT_TRUE(CloseHandle(file) == TRUE);
+	}
+}
+#endif
+
+#ifdef _POSIX_MAPPED_FILES
+TEST_F(Platform, mmap) {
+	for (int i = 0; i < kTrialCount; i++) {
+		int fd = open(filename_, O_RDONLY);
+		ASSERT_NE(-1, fd);
+		void *p = mmap(NULL, length_, PROT_READ, MAP_PRIVATE, fd, 0);
+		ASSERT_TRUE(p != NULL);
+		EXPECT_EQ(checkSum_, CheckSum());
+		munmap(p, length_);
+		close(fd);
+	}
+}
+#endif
+
+#endif // TEST_PLATFORM

+ 287 - 0
engine/source/persistence/rapidjson/test/perftest/rapidjsontest.cpp

@@ -0,0 +1,287 @@
+#include "perftest.h"
+
+#if TEST_RAPIDJSON
+
+#include "rapidjson/rapidjson.h"
+#include "rapidjson/document.h"
+#include "rapidjson/prettywriter.h"
+#include "rapidjson/stringbuffer.h"
+#include "rapidjson/filestream.h"
+#include "rapidjson/filereadstream.h"
+
+#ifdef RAPIDJSON_SSE2
+#define SIMD_SUFFIX(name) name##_SSE2
+#elif defined(RAPIDJSON_SSE42)
+#define SIMD_SUFFIX(name) name##_SSE42
+#else
+#define SIMD_SUFFIX(name) name
+#endif
+
+using namespace rapidjson;
+
+class RapidJson : public PerfTest {
+public:
+	virtual void SetUp() {
+		PerfTest::SetUp();
+
+		// temp buffer for insitu parsing.
+		temp_ = (char *)malloc(length_ + 1);
+
+		// Parse as a document
+		EXPECT_FALSE(doc_.Parse<0>(json_).IsNull());
+	}
+
+	virtual void TearDown() {
+		PerfTest::TearDown();
+		free(temp_);
+	}
+
+protected:
+	char *temp_;
+	Document doc_;
+};
+
+TEST_F(RapidJson, SIMD_SUFFIX(ReaderParseInsitu_DummyHandler)) {
+	for (size_t i = 0; i < kTrialCount; i++) {
+		memcpy(temp_, json_, length_ + 1);
+		InsituStringStream s(temp_);
+		BaseReaderHandler<> h;
+		Reader reader;
+		EXPECT_TRUE(reader.Parse<kParseInsituFlag>(s, h));
+	}
+}
+
+TEST_F(RapidJson, SIMD_SUFFIX(ReaderParseInsitu_DummyHandler_ValidateEncoding)) {
+	for (size_t i = 0; i < kTrialCount; i++) {
+		memcpy(temp_, json_, length_ + 1);
+		InsituStringStream s(temp_);
+		BaseReaderHandler<> h;
+		Reader reader;
+		EXPECT_TRUE(reader.Parse<kParseInsituFlag | kParseValidateEncodingFlag>(s, h));
+	}
+}
+
+TEST_F(RapidJson, SIMD_SUFFIX(ReaderParse_DummyHandler)) {
+	for (size_t i = 0; i < kTrialCount; i++) {
+		StringStream s(json_);
+		BaseReaderHandler<> h;
+		Reader reader;
+		EXPECT_TRUE(reader.Parse<0>(s, h));
+	}
+}
+
+TEST_F(RapidJson, SIMD_SUFFIX(ReaderParse_DummyHandler_ValidateEncoding)) {
+	for (size_t i = 0; i < kTrialCount; i++) {
+		StringStream s(json_);
+		BaseReaderHandler<> h;
+		Reader reader;
+		EXPECT_TRUE(reader.Parse<kParseValidateEncodingFlag>(s, h));
+	}
+}
+
+TEST_F(RapidJson, SIMD_SUFFIX(DoucmentParseInsitu_MemoryPoolAllocator)) {
+	//const size_t userBufferSize = 128 * 1024;
+	//char* userBuffer = (char*)malloc(userBufferSize);
+
+	for (size_t i = 0; i < kTrialCount; i++) {
+		memcpy(temp_, json_, length_ + 1);
+		//MemoryPoolAllocator<> allocator(userBuffer, userBufferSize);
+		//Document doc(&allocator);
+		Document doc;
+		doc.ParseInsitu<0>(temp_);
+		ASSERT_TRUE(doc.IsObject());
+		//if (i == 0) {
+		//	size_t size = doc.GetAllocator().Size();
+		//	size_t capacity = doc.GetAllocator().Capacity();
+		//	size_t stack_capacity = doc.GetStackCapacity();
+		//	size_t actual = size - stack_capacity;
+		//	std::cout << "Size:" << size << " Capacity:" << capacity  << " Stack:" << stack_capacity << " Actual:" << actual << std::endl;
+		//}
+	}
+
+	//free(userBuffer);
+}
+
+TEST_F(RapidJson, SIMD_SUFFIX(DoucmentParse_MemoryPoolAllocator)) {
+	//const size_t userBufferSize = 128 * 1024;
+	//char* userBuffer = (char*)malloc(userBufferSize);
+
+	for (size_t i = 0; i < kTrialCount; i++) {
+		//MemoryPoolAllocator<> allocator(userBuffer, userBufferSize);
+		//Document doc(&allocator);
+		Document doc;
+		doc.Parse<0>(json_);
+		ASSERT_TRUE(doc.IsObject());
+		//if (i == 0) {
+		//	size_t size = doc.GetAllocator().Size();
+		//	size_t capacity = doc.GetAllocator().Capacity();
+		//	size_t stack_capacity = doc.GetStackCapacity();
+		//	size_t actual = size - stack_capacity;
+		//	std::cout << "Size:" << size << " Capacity:" << capacity  << " Stack:" << stack_capacity << " Actual:" << actual << std::endl;
+		//}
+	}
+
+	//free(userBuffer);
+}
+
+TEST_F(RapidJson, SIMD_SUFFIX(DoucmentParse_CrtAllocator)) {
+	for (size_t i = 0; i < kTrialCount; i++) {
+		memcpy(temp_, json_, length_ + 1);
+		GenericDocument<UTF8<>, CrtAllocator> doc;
+		doc.Parse<0>(temp_);
+		ASSERT_TRUE(doc.IsObject());
+	}
+}
+
+template<typename T>
+size_t Traverse(const T& value) {
+	size_t count = 1;
+	switch(value.GetType()) {
+		case kObjectType:
+			for (typename T::ConstMemberIterator itr = value.MemberBegin(); itr != value.MemberEnd(); ++itr) {
+				count++;	// name
+				count += Traverse(itr->value);
+			}
+			break;
+
+		case kArrayType:
+			for (typename T::ConstValueIterator itr = value.Begin(); itr != value.End(); ++itr)
+				count += Traverse(*itr);
+			break;
+
+		default:
+			// Do nothing.
+			break;
+	}
+	return count;
+}
+
+TEST_F(RapidJson, DocumentTraverse) {
+	for (size_t i = 0; i < kTrialCount; i++) {
+		size_t count = Traverse(doc_);
+		EXPECT_EQ(4339u, count);
+		//if (i == 0)
+		//	std::cout << count << std::endl;
+	}
+}
+
+struct ValueCounter : public BaseReaderHandler<> {
+	ValueCounter() : count_(1) {}	// root
+
+	void EndObject(SizeType memberCount) { count_ += memberCount * 2; }
+	void EndArray(SizeType elementCount) { count_ += elementCount; }
+
+	SizeType count_;
+};
+
+TEST_F(RapidJson, DocumentAccept) {
+	for (size_t i = 0; i < kTrialCount; i++) {
+		ValueCounter counter;
+		doc_.Accept(counter);
+		EXPECT_EQ(4339u, counter.count_);
+	}
+}
+
+struct NullStream {
+	NullStream() /*: length_(0)*/ {}
+	void Put(char) { /*++length_;*/ }
+	void Flush() {}
+	//size_t length_;
+};
+
+TEST_F(RapidJson, Writer_NullStream) {
+	for (size_t i = 0; i < kTrialCount; i++) {
+		NullStream s;
+		Writer<NullStream> writer(s);
+		doc_.Accept(writer);
+		//if (i == 0)
+		//	std::cout << s.length_ << std::endl;
+	}
+}
+
+TEST_F(RapidJson, Writer_StringBuffer) {
+	for (size_t i = 0; i < kTrialCount; i++) {
+		StringBuffer s(0, 1024 * 1024);
+		Writer<StringBuffer> writer(s);
+		doc_.Accept(writer);
+		const char* str = s.GetString();
+		(void)str;
+		//if (i == 0)
+		//	std::cout << strlen(str) << std::endl;
+	}
+}
+
+TEST_F(RapidJson, PrettyWriter_StringBuffer) {
+	for (size_t i = 0; i < kTrialCount; i++) {
+		StringBuffer s(0, 2048 * 1024);
+		PrettyWriter<StringBuffer> writer(s);
+		writer.SetIndent(' ', 1);
+		doc_.Accept(writer);
+		const char* str = s.GetString();
+		(void)str;
+		//if (i == 0)
+		//	std::cout << strlen(str) << std::endl;
+	}
+}
+
+TEST_F(RapidJson, internal_Pow10) {
+	double sum = 0;
+	for (size_t i = 0; i < kTrialCount * kTrialCount; i++)
+		sum += internal::Pow10(i & 255);
+	EXPECT_GT(sum, 0.0);
+}
+
+TEST_F(RapidJson, SIMD_SUFFIX(Whitespace)) {
+	for (size_t i = 0; i < kTrialCount; i++) {
+		Document doc;
+		ASSERT_TRUE(doc.Parse<0>(whitespace_).IsArray());
+	}		
+}
+
+TEST_F(RapidJson, UTF8_Validate) {
+	NullStream os;
+
+	for (size_t i = 0; i < kTrialCount; i++) {
+		StringStream is(json_);
+		bool result = true;
+		while (is.Peek() != '\0')
+			result &= UTF8<>::Validate(is, os);
+		EXPECT_TRUE(result);
+	}
+}
+
+// Depreciated.
+//TEST_F(RapidJson, FileStream_Read) {
+//	for (size_t i = 0; i < kTrialCount; i++) {
+//		FILE *fp = fopen(filename_, "rb");
+//		FileStream s(fp);
+//		while (s.Take() != '\0')
+//			;
+//		fclose(fp);
+//	}
+//}
+
+TEST_F(RapidJson, FileReadStream) {
+	for (size_t i = 0; i < kTrialCount; i++) {
+		FILE *fp = fopen(filename_, "rb");
+		char buffer[65536];
+		FileReadStream s(fp, buffer, sizeof(buffer));
+		while (s.Take() != '\0')
+			;
+		fclose(fp);
+	}
+}
+
+TEST_F(RapidJson, SIMD_SUFFIX(ReaderParse_DummyHandler_FileReadStream)) {
+	for (size_t i = 0; i < kTrialCount; i++) {
+		FILE *fp = fopen(filename_, "rb");
+		char buffer[65536];
+		FileReadStream s(fp, buffer, sizeof(buffer));
+		BaseReaderHandler<> h;
+		Reader reader;
+		reader.Parse<0>(s, h);
+		fclose(fp);
+	}
+}
+
+#endif // TEST_RAPIDJSON

+ 64 - 0
engine/source/persistence/rapidjson/test/perftest/ultrajsontest.cpp

@@ -0,0 +1,64 @@
+#include "perftest.h"
+
+#if TEST_ULTRAJSON
+
+#include "ultrajson/ultrajsondec.c"
+#include "ultrajson/ultrajsonenc.c"
+
+class UltraJson : public PerfTest {
+};
+
+static char dummy = 0;
+
+static void Object_objectAddKey(JSOBJ obj, JSOBJ name, JSOBJ value) {}
+static void Object_arrayAddItem(JSOBJ obj, JSOBJ value) {}
+
+static JSOBJ Object_newString(wchar_t *start, wchar_t *end)	{ return &dummy; }
+static JSOBJ Object_newTrue(void)							{ return &dummy; }
+static JSOBJ Object_newFalse(void)							{ return &dummy; }
+static JSOBJ Object_newNull(void)							{ return &dummy; }
+static JSOBJ Object_newObject(void)							{ return &dummy; }
+static JSOBJ Object_newArray(void)							{ return &dummy; }
+static JSOBJ Object_newInteger(JSINT32 value)				{ return &dummy; }
+static JSOBJ Object_newLong(JSINT64 value)					{ return &dummy; }
+static JSOBJ Object_newDouble(double value)					{ return &dummy; }
+
+static void Object_releaseObject(JSOBJ obj) {}
+
+static JSONObjectDecoder decoder = {
+	Object_newString,
+	Object_objectAddKey,
+	Object_arrayAddItem,
+	Object_newTrue,
+	Object_newFalse,
+	Object_newNull,
+	Object_newObject,
+	Object_newArray,
+	Object_newInteger,
+	Object_newLong,
+	Object_newDouble,
+	Object_releaseObject,
+	malloc,
+	free,
+	realloc
+};
+
+TEST_F(UltraJson, Decode) {
+	for (int i = 0; i < kTrialCount; i++) {
+		decoder.errorStr = NULL;
+		decoder.errorOffset = NULL;
+		void *ret = JSON_DecodeObject(&decoder, json_, length_);
+		ASSERT_TRUE(ret != 0);
+	}
+}
+
+TEST_F(UltraJson, Whitespace) {
+	for (int i = 0; i < kTrialCount; i++) {
+		decoder.errorStr = NULL;
+		decoder.errorOffset = NULL;
+		void *ret = JSON_DecodeObject(&decoder, whitespace_, whitespace_length_);
+		ASSERT_TRUE(ret != 0);
+	}
+}
+
+#endif // TEST_ULTRAJSON

+ 22 - 0
engine/source/persistence/rapidjson/test/perftest/yajl_all.c

@@ -0,0 +1,22 @@
+#include "perftest.h"
+
+#if TEST_YAJL
+
+#ifdef _MSC_VER
+#include <float.h>
+#define isinf !_finite
+#define isnan _isnan
+#define snprintf _snprintf
+#endif
+
+#include "yajl/src/yajl.c"
+#include "yajl/src/yajl_alloc.c"
+#include "yajl/src/yajl_buf.c"
+#include "yajl/src/yajl_encode.c"
+#include "yajl/src/yajl_gen.c"
+#include "yajl/src/yajl_lex.c"
+#include "yajl/src/yajl_parser.c"
+#include "yajl/src/yajl_tree.c"
+#include "yajl/src/yajl_version.c"
+
+#endif // TEST_YAJL

+ 188 - 0
engine/source/persistence/rapidjson/test/perftest/yajltest.cpp

@@ -0,0 +1,188 @@
+#include "perftest.h"
+
+#if TEST_YAJL
+
+extern "C" {
+#include "yajl/yajl_gen.h"
+#include "yajl/yajl_parse.h"
+#include "yajl/yajl_tree.h"
+};
+
+class Yajl : public PerfTest {
+public:
+	virtual void SetUp() {
+		PerfTest::SetUp();
+		root_ = yajl_tree_parse(json_, NULL, 0);
+		ASSERT_TRUE(root_ != NULL);
+	}
+
+	virtual void TearDown() {
+		PerfTest::TearDown();
+		yajl_tree_free(root_);
+	}
+
+protected:
+	yajl_val root_;
+};
+
+static int null_null(void *) { return 1; }
+static int null_boolean(void *, int) { return 1; }
+static int null_integer(void *, long long) { return 1; }
+static int null_double(void *, double) { return 1; }
+static int null_string(void *, const unsigned char*, size_t) { return 1; }
+static int null_start_map(void *) { return 1; }
+static int null_map_key(void *, const unsigned char*, size_t) { return 1; }
+static int null_end_map(void *) { return 1; }
+static int null_start_array(void*) { return 1; }
+static int null_end_array(void *) { return 1; }
+
+static yajl_callbacks nullcallbacks = {
+	null_null,
+	null_boolean,
+	null_integer,
+	null_double,
+	NULL,			// yajl_number(). Here we want to test full-parsing performance.
+	null_string,
+	null_start_map,
+	null_map_key,
+	null_end_map,
+	null_start_array,
+	null_end_array
+};
+
+TEST_F(Yajl, yajl_parse_nullcallbacks) {
+	for (int i = 0; i < kTrialCount; i++) {
+		yajl_handle hand = yajl_alloc(&nullcallbacks, NULL, NULL);
+		yajl_status stat = yajl_parse(hand, (unsigned char*)json_, length_);
+		//ASSERT_EQ(yajl_status_ok, stat);
+		if (stat != yajl_status_ok) {
+			unsigned char * str = yajl_get_error(hand, 1, (unsigned char*)json_, length_);
+			fprintf(stderr, "%s", (const char *) str);
+		}
+		stat = yajl_complete_parse(hand);
+		ASSERT_EQ(yajl_status_ok, stat);
+		yajl_free(hand);
+	}	
+}
+
+TEST_F(Yajl, yajl_tree_parse) {
+	for (int i = 0; i < kTrialCount; i++) {
+		yajl_val root = yajl_tree_parse(json_, NULL, 0);
+		ASSERT_TRUE(root != NULL);
+		yajl_tree_free(root);
+	}
+}
+
+yajl_gen_status GenVal(yajl_gen g, yajl_val v) {
+	yajl_gen_status status;
+	switch (v->type) {
+	case yajl_t_string:	return yajl_gen_string(g, (unsigned char*)v->u.string, strlen(v->u.string));
+
+	case yajl_t_number: 
+		{
+			char buffer[100];
+			char *num = buffer;
+			size_t len;
+			//if (YAJL_IS_INTEGER(v)) // buggy
+			if (v->u.number.flags & YAJL_NUMBER_INT_VALID)
+#if _MSC_VER
+				len = sprintf(num, "%I64d", YAJL_GET_INTEGER(v));
+#else
+				len = sprintf(num, "%lld", YAJL_GET_INTEGER(v));
+#endif
+			//else if (YAJL_IS_DOUBLE(v))	// buggy
+			else if (v->u.number.flags & YAJL_NUMBER_DOUBLE_VALID)
+				len = sprintf(num, "%g", YAJL_GET_DOUBLE(v));
+			else {
+				num = YAJL_GET_NUMBER(v);
+				len = strlen(buffer);
+			}
+			return yajl_gen_number(g, num, len);
+		}
+
+	case yajl_t_object:
+		status = yajl_gen_map_open(g);
+		if (status != yajl_gen_status_ok)
+			return status;
+		
+		for (size_t i = 0; i < v->u.object.len; i++) {
+			status = yajl_gen_string(g, (unsigned char *)v->u.object.keys[i], strlen(v->u.object.keys[i]));
+			if (status != yajl_gen_status_ok)
+				return status;
+			status = GenVal(g, v->u.object.values[i]);
+			if (status != yajl_gen_status_ok)
+				return status;
+		}
+		return yajl_gen_map_close(g);
+
+	case yajl_t_array:
+		status = yajl_gen_array_open(g);
+		if (status != yajl_gen_status_ok)
+			return status;
+		
+		for (size_t i = 0; i < v->u.array.len; i++) {
+			status = GenVal(g, v->u.array.values[i]);
+			if (status != yajl_gen_status_ok)
+				return status;
+		}
+
+		return yajl_gen_array_close(g);
+
+	case yajl_t_true: return yajl_gen_bool(g, 1);
+	case yajl_t_false: return yajl_gen_bool(g, 0);
+	case yajl_t_null: return yajl_gen_null(g);
+	}
+	return yajl_gen_in_error_state;
+}
+
+TEST_F(Yajl, yajl_gen) {
+	for (int i = 0; i < kTrialCount; i++) {
+		yajl_gen g = yajl_gen_alloc(NULL);
+
+		yajl_gen_status status = GenVal(g, root_);
+		if (status != yajl_gen_status_ok) {
+			std::cout << "gen error: " << status << std::endl;
+			FAIL();
+		}
+
+		const unsigned char * buf;
+		size_t len;
+		status = yajl_gen_get_buf(g, &buf, &len);
+		ASSERT_EQ(yajl_gen_status_ok, status);
+		//if (i == 0)
+		//	std::cout << len << std::endl;
+		yajl_gen_free(g);
+	}	
+}
+
+TEST_F(Yajl, yajl_gen_beautify) {
+	for (int i = 0; i < kTrialCount; i++) {
+		yajl_gen g = yajl_gen_alloc(NULL);
+		yajl_gen_config(g, yajl_gen_beautify, 1);
+		yajl_gen_config(g, yajl_gen_indent_string, " ");
+
+		yajl_gen_status status = GenVal(g, root_);
+		if (status != yajl_gen_status_ok) {
+			std::cout << "gen error: " << status << std::endl;
+			FAIL();
+		}
+
+		const unsigned char * buf;
+		size_t len;
+		status = yajl_gen_get_buf(g, &buf, &len);
+		ASSERT_EQ(yajl_gen_status_ok, status);
+		//if (i == 0)
+		//	std::cout << len << std::endl;
+		yajl_gen_free(g);
+	}	
+}
+
+TEST_F(Yajl, Whitespace) {
+	for (int i = 0; i < kTrialCount; i++) {
+		yajl_val root = yajl_tree_parse(whitespace_, NULL, 0);
+		ASSERT_TRUE(root != NULL);
+		yajl_tree_free(root);
+	}
+}
+
+#endif // TEST_YAJL

+ 92 - 0
engine/source/persistence/rapidjson/test/unittest/documenttest.cpp

@@ -0,0 +1,92 @@
+#include "unittest.h"
+#include "rapidjson/document.h"
+#include "rapidjson/writer.h"
+#include <sstream>
+
+using namespace rapidjson;
+
+TEST(Document, Parse) {
+	Document doc;
+
+	doc.Parse<0>(" { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } ");
+
+	EXPECT_TRUE(doc.IsObject());
+
+	EXPECT_TRUE(doc.HasMember("hello"));
+	Value& hello = doc["hello"];
+	EXPECT_TRUE(hello.IsString());
+	EXPECT_STREQ("world", hello.GetString());
+
+	EXPECT_TRUE(doc.HasMember("t"));
+	Value& t = doc["t"];
+	EXPECT_TRUE(t.IsTrue());
+
+	EXPECT_TRUE(doc.HasMember("f"));
+	Value& f = doc["f"];
+	EXPECT_TRUE(f.IsFalse());
+
+	EXPECT_TRUE(doc.HasMember("n"));
+	Value& n = doc["n"];
+	EXPECT_TRUE(n.IsNull());
+
+	EXPECT_TRUE(doc.HasMember("i"));
+	Value& i = doc["i"];
+	EXPECT_TRUE(i.IsNumber());
+	EXPECT_EQ(123, i.GetInt());
+
+	EXPECT_TRUE(doc.HasMember("pi"));
+	Value& pi = doc["pi"];
+	EXPECT_TRUE(pi.IsNumber());
+	EXPECT_EQ(3.1416, pi.GetDouble());
+
+	EXPECT_TRUE(doc.HasMember("a"));
+	Value& a = doc["a"];
+	EXPECT_TRUE(a.IsArray());
+	EXPECT_EQ(4u, a.Size());
+	for (SizeType i = 0; i < 4; i++)
+		EXPECT_EQ(i + 1, a[i].GetUint());
+}
+
+// This should be slow due to assignment in inner-loop.
+struct OutputStringStream : public std::ostringstream {
+	typedef char Ch;
+
+	void Put(char c) {
+		put(c);
+	}
+	void Flush() {}
+};
+
+TEST(Document, AcceptWriter) {
+	Document doc;
+	doc.Parse<0>(" { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } ");
+
+	OutputStringStream os;
+	Writer<OutputStringStream> writer(os);
+	doc.Accept(writer);
+
+	EXPECT_EQ("{\"hello\":\"world\",\"t\":true,\"f\":false,\"n\":null,\"i\":123,\"pi\":3.1416,\"a\":[1,2,3,4]}", os.str());
+}
+
+// Issue 44:	SetStringRaw doesn't work with wchar_t
+TEST(Document, UTF16_Document) {
+	GenericDocument< UTF16<> > json;
+	json.Parse<kParseValidateEncodingFlag>(L"[{\"created_at\":\"Wed Oct 30 17:13:20 +0000 2012\"}]");
+
+	ASSERT_TRUE(json.IsArray());
+	GenericValue< UTF16<> >& v = json[0u];
+	ASSERT_TRUE(v.IsObject());
+
+	GenericValue< UTF16<> >& s = v[L"created_at"];
+	ASSERT_TRUE(s.IsString());
+
+	EXPECT_EQ(0, wcscmp(L"Wed Oct 30 17:13:20 +0000 2012", s.GetString()));
+}
+
+// Issue 22: Memory corruption via operator=
+// Fixed by making unimplemented assignment operator private.
+//TEST(Document, Assignment) {
+//	Document d1;
+//	Document d2;
+//	d1 = d2;
+//}

+ 189 - 0
engine/source/persistence/rapidjson/test/unittest/encodedstreamtest.cpp

@@ -0,0 +1,189 @@
+#include "unittest.h"
+#include "rapidjson/filereadstream.h"
+#include "rapidjson/filewritestream.h"
+#include "rapidjson/encodedstream.h"
+#include "rapidjson/stringbuffer.h"
+
+using namespace rapidjson;
+
+class EncodedStreamTest : public ::testing::Test {
+public:
+	virtual void SetUp() {
+		json_ = ReadFile("utf8.json", true, &length_);
+	}
+
+	virtual void TearDown() {
+		free(json_);
+	}
+
+protected:
+	static FILE* Open(const char* filename) {
+		char buffer[1024];
+		sprintf(buffer, "encodings/%s", filename);
+		FILE *fp = fopen(buffer, "rb");
+		if (!fp) {
+			sprintf(buffer, "../../bin/encodings/%s", filename);
+			fp = fopen(buffer, "rb");
+		}
+		return fp;
+	}
+
+	static char *ReadFile(const char* filename, bool appendPath, size_t* outLength) {
+		FILE *fp = appendPath ? Open(filename) : fopen(filename, "rb");
+
+		if (!fp) {
+			*outLength = 0;
+			return 0;
+		}
+
+		fseek(fp, 0, SEEK_END);
+		*outLength = (size_t)ftell(fp);
+		fseek(fp, 0, SEEK_SET);
+		char* buffer = (char*)malloc(*outLength + 1);
+		fread(buffer, 1, *outLength, fp);
+		buffer[*outLength] = '\0';
+		fclose(fp);
+		return buffer;
+	}
+
+	template <typename FileEncoding, typename MemoryEncoding>
+	void TestEncodedInputStream(const char* filename) {
+		char buffer[16];
+		FILE *fp = Open(filename);
+		ASSERT_TRUE(fp != 0);
+		FileReadStream fs(fp, buffer, sizeof(buffer));
+		EncodedInputStream<FileEncoding, FileReadStream> eis(fs);
+		StringStream s(json_);
+
+		while (eis.Peek() != '\0') {
+			unsigned expected, actual;
+			EXPECT_TRUE(UTF8<>::Decode(s, &expected));
+			EXPECT_TRUE(MemoryEncoding::Decode(eis, &actual));
+			EXPECT_EQ(expected, actual);
+		}
+		EXPECT_EQ('\0', s.Peek());
+		fclose(fp);
+	}
+
+	void TestAutoUTFInputStream(const char *filename) {
+		char buffer[16];
+		FILE *fp = Open(filename);
+		ASSERT_TRUE(fp != 0);
+		FileReadStream fs(fp, buffer, sizeof(buffer));
+		AutoUTFInputStream<unsigned, FileReadStream> eis(fs);
+		StringStream s(json_);
+		while (eis.Peek() != '\0') {
+			unsigned expected, actual;
+			EXPECT_TRUE(UTF8<>::Decode(s, &expected));
+			EXPECT_TRUE(AutoUTF<unsigned>::Decode(eis, &actual));
+			EXPECT_EQ(expected, actual);
+		}
+		EXPECT_EQ('\0', s.Peek());
+		fclose(fp);
+	}
+
+	template <typename FileEncoding, typename MemoryEncoding>
+	void TestEncodedOutputStream(const char* expectedFilename, bool putBOM) {
+		char filename[L_tmpnam];
+		tmpnam(filename);
+
+		FILE *fp = fopen(filename, "wb");
+		char buffer[16];
+		FileWriteStream os(fp, buffer, sizeof(buffer));
+		EncodedOutputStream<FileEncoding, FileWriteStream> eos(os, putBOM);
+		StringStream s(json_);
+		while (s.Peek() != '\0') {
+			bool success = Transcoder<UTF8<>, MemoryEncoding>::Transcode(s, eos);
+			EXPECT_TRUE(success);
+		}
+		eos.Flush();
+		fclose(fp);
+		EXPECT_TRUE(CompareFile(filename, expectedFilename));
+		remove(filename);
+	}
+
+	bool CompareFile(char * filename, const char* expectedFilename) {
+		size_t actualLength, expectedLength;
+		char* actualBuffer = ReadFile(filename, false, &actualLength);
+		char* expectedBuffer = ReadFile(expectedFilename, true, &expectedLength);
+		bool ret = (expectedLength == actualLength) && memcmp(expectedBuffer, actualBuffer, actualLength) == 0;
+		free(actualBuffer);
+		free(expectedBuffer);
+		return ret;
+	}
+
+	void TestAutoUTFOutputStream(UTFType type, bool putBOM, const char *expectedFilename) {
+		char filename[L_tmpnam];
+		tmpnam(filename);
+
+		FILE *fp = fopen(filename, "wb");
+		char buffer[16];
+		FileWriteStream os(fp, buffer, sizeof(buffer));
+		AutoUTFOutputStream<unsigned, FileWriteStream> eos(os, type, putBOM);
+		StringStream s(json_);
+		while (s.Peek() != '\0') {
+			bool success = Transcoder<UTF8<>, AutoUTF<unsigned> >::Transcode(s, eos);
+			EXPECT_TRUE(success);
+		}
+		eos.Flush();
+		fclose(fp);
+		EXPECT_TRUE(CompareFile(filename, expectedFilename));
+		remove(filename);
+	}
+
+	const char* filename_;
+	char *json_;
+	size_t length_;
+};
+
+TEST_F(EncodedStreamTest, EncodedInputStream) {
+	TestEncodedInputStream<UTF8<>,	  UTF8<>  >("utf8.json");
+	TestEncodedInputStream<UTF8<>,	  UTF8<>  >("utf8bom.json");
+	TestEncodedInputStream<UTF16LE<>, UTF16<> >("utf16le.json");
+	TestEncodedInputStream<UTF16LE<>, UTF16<> >("utf16lebom.json");
+	TestEncodedInputStream<UTF16BE<>, UTF16<> >("utf16be.json");
+	TestEncodedInputStream<UTF16BE<>, UTF16<> >("utf16bebom.json");
+	TestEncodedInputStream<UTF32LE<>, UTF32<> >("utf32le.json");
+	TestEncodedInputStream<UTF32LE<>, UTF32<> >("utf32lebom.json");
+	TestEncodedInputStream<UTF32BE<>, UTF32<> >("utf32be.json");
+	TestEncodedInputStream<UTF32BE<>, UTF32<> >("utf32bebom.json");
+}
+
+TEST_F(EncodedStreamTest, AutoUTFInputStream) {
+	TestAutoUTFInputStream("utf8.json");
+	TestAutoUTFInputStream("utf8bom.json");
+	TestAutoUTFInputStream("utf16le.json");
+	TestAutoUTFInputStream("utf16lebom.json");
+	TestAutoUTFInputStream("utf16be.json");
+	TestAutoUTFInputStream("utf16bebom.json");
+	TestAutoUTFInputStream("utf32le.json");
+	TestAutoUTFInputStream("utf32lebom.json");
+	TestAutoUTFInputStream("utf32be.json");
+	TestAutoUTFInputStream("utf32bebom.json");
+}
+
+TEST_F(EncodedStreamTest, EncodedOutputStream) {
+	TestEncodedOutputStream<UTF8<>,		UTF8<>	>("utf8.json",		false);
+	TestEncodedOutputStream<UTF8<>,		UTF8<>	>("utf8bom.json",	true);
+	TestEncodedOutputStream<UTF16LE<>,	UTF16<> >("utf16le.json",	false);
+	TestEncodedOutputStream<UTF16LE<>,	UTF16<> >("utf16lebom.json",true);
+	TestEncodedOutputStream<UTF16BE<>,	UTF16<> >("utf16be.json",	false);
+	TestEncodedOutputStream<UTF16BE<>,	UTF16<> >("utf16bebom.json",true);
+	TestEncodedOutputStream<UTF32LE<>,	UTF32<> >("utf32le.json",	false);
+	TestEncodedOutputStream<UTF32LE<>,	UTF32<> >("utf32lebom.json",true);
+	TestEncodedOutputStream<UTF32BE<>,	UTF32<> >("utf32be.json",	false);
+	TestEncodedOutputStream<UTF32BE<>,	UTF32<> >("utf32bebom.json",true);
+}
+
+TEST_F(EncodedStreamTest, AutoUTFOutputStream) {
+	TestAutoUTFOutputStream(kUTF8,		false,	"utf8.json");
+	TestAutoUTFOutputStream(kUTF8,		true,	"utf8bom.json");
+	TestAutoUTFOutputStream(kUTF16LE,	false,	"utf16le.json");
+	TestAutoUTFOutputStream(kUTF16LE,	true,	"utf16lebom.json");
+	TestAutoUTFOutputStream(kUTF16BE,	false,	"utf16be.json");
+	TestAutoUTFOutputStream(kUTF16BE,	true,	"utf16bebom.json");
+	TestAutoUTFOutputStream(kUTF32LE,	false,	"utf32le.json");
+	TestAutoUTFOutputStream(kUTF32LE,	true,	"utf32lebom.json");
+	TestAutoUTFOutputStream(kUTF32BE,	false,	"utf32be.json");
+	TestAutoUTFOutputStream(kUTF32BE,	true,	"utf32bebom.json");
+}

Some files were not shown because too many files changed in this diff