diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/3rdparty/LuaJIT-2.0.5/src/buildvm.lib | bin | 33996 -> 33996 bytes | |||
-rw-r--r-- | src/3rdparty/LuaJIT-2.0.5/src/minilua.lib | bin | 33996 -> 33996 bytes | |||
-rw-r--r-- | src/jin/main.cpp | 2 | ||||
-rw-r--r-- | src/libjin-lua/je_lua_embed.h | 4 | ||||
-rw-r--r-- | src/libjin-lua/scripts/graphics/graphics.lua | 12 | ||||
-rw-r--r-- | src/libjin-lua/scripts/graphics/graphics.lua.h | 25 | ||||
-rw-r--r-- | src/libjin-lua/scripts/log.lua | 2 | ||||
-rw-r--r-- | src/libjin-lua/scripts/log.lua.h | 198 | ||||
-rw-r--r-- | src/libjin-lua/scripts/physics/physics.lua | 750 | ||||
-rw-r--r-- | src/libjin-lua/scripts/physics/physics.lua.h | 1146 | ||||
-rw-r--r-- | src/libjin-lua/scripts/utils/xml.lua | 1 | ||||
-rw-r--r-- | src/libjin-lua/scripts/utils/xml.lua.h | 206 | ||||
-rw-r--r-- | src/libjin/graphics/je_graphics.h | 12 |
13 files changed, 2140 insertions, 218 deletions
diff --git a/src/3rdparty/LuaJIT-2.0.5/src/buildvm.lib b/src/3rdparty/LuaJIT-2.0.5/src/buildvm.lib Binary files differindex d4372fd..c7be727 100644 --- a/src/3rdparty/LuaJIT-2.0.5/src/buildvm.lib +++ b/src/3rdparty/LuaJIT-2.0.5/src/buildvm.lib diff --git a/src/3rdparty/LuaJIT-2.0.5/src/minilua.lib b/src/3rdparty/LuaJIT-2.0.5/src/minilua.lib Binary files differindex a3cce18..e2b3ac3 100644 --- a/src/3rdparty/LuaJIT-2.0.5/src/minilua.lib +++ b/src/3rdparty/LuaJIT-2.0.5/src/minilua.lib diff --git a/src/jin/main.cpp b/src/jin/main.cpp index 9d7fcbe..13dcc20 100644 --- a/src/jin/main.cpp +++ b/src/jin/main.cpp @@ -64,8 +64,8 @@ bool BrowseFolder(string& cwd) if (FAILED(hr)) return false; cwd = wstrtostr(filePath); CoTaskMemFree(filePath); - pItem->Release(); pfd->Release(); + pItem->Release(); CoUninitialize(); return true; #endif diff --git a/src/libjin-lua/je_lua_embed.h b/src/libjin-lua/je_lua_embed.h index 6689be7..47d85ff 100644 --- a/src/libjin-lua/je_lua_embed.h +++ b/src/libjin-lua/je_lua_embed.h @@ -20,9 +20,10 @@ namespace JinEngine #include "scripts/utils/xml.lua.h" #include "scripts/log.lua.h" #include "scripts/tiledmap/tiledmap.lua.h" + #include "scripts/physics/physics.lua.h" #include "scripts/app.lua.h" - + // Embed structure. struct jin_Embed { @@ -42,6 +43,7 @@ namespace JinEngine { "json.lua", json_lua }, { "xml.lua", xml_lua }, { "tiledmap.lua", tiledmap_lua }, + { "physics.lua", physics_lua }, // { "log.lua", log_lua }, { 0, 0 } diff --git a/src/libjin-lua/scripts/graphics/graphics.lua b/src/libjin-lua/scripts/graphics/graphics.lua index 65a320f..423de74 100644 --- a/src/libjin-lua/scripts/graphics/graphics.lua +++ b/src/libjin-lua/scripts/graphics/graphics.lua @@ -160,3 +160,15 @@ jg.reset = function() jg.unsetFont() jg.unuseShader() end + +jg.getStatsStr = function() + local stats = jin.graphics.getStats() + local str = "draw call: " .. stats.drawCalls .. '\n' + .. "canvas switches: " .. stats.canvasSwitches .. '\n' + .. "shader switches: " .. stats.shaderSwitches .. '\n' + .. "font switches: " .. stats.fontSwitches .. '\n' + .. "textures: " .. stats.textures .. '\n' + .. "canvases: " .. stats.canvases .. '\n' + .. "fonts: " .. stats.fonts + return str +end
\ No newline at end of file diff --git a/src/libjin-lua/scripts/graphics/graphics.lua.h b/src/libjin-lua/scripts/graphics/graphics.lua.h index 9e4c5d5..31f15b6 100644 --- a/src/libjin-lua/scripts/graphics/graphics.lua.h +++ b/src/libjin-lua/scripts/graphics/graphics.lua.h @@ -156,6 +156,29 @@ static char graphics_lua[] = { 48,44,32,48,44,32,48,44,32,50,53,53,41,13,10,32,32,32,32,106, 103,46,99,108,101,97,114,40,41,13,10,32,32,32,32,106,103,46,117,110, 115,101,116,70,111,110,116,40,41,13,10,32,32,32,32,106,103,46,117,110, -117,115,101,83,104,97,100,101,114,40,41,13,10,101,110,100,13,10 +117,115,101,83,104,97,100,101,114,40,41,13,10,101,110,100,13,10,13,10, +106,103,46,103,101,116,83,116,97,116,115,83,116,114,32,61,32,102,117,110, +99,116,105,111,110,40,41,32,13,10,32,32,32,32,108,111,99,97,108,32, +115,116,97,116,115,32,61,32,106,105,110,46,103,114,97,112,104,105,99,115, +46,103,101,116,83,116,97,116,115,40,41,13,10,9,108,111,99,97,108,32, +115,116,114,32,61,32,34,100,114,97,119,32,99,97,108,108,58,32,34,32, +46,46,32,115,116,97,116,115,46,100,114,97,119,67,97,108,108,115,32,46, +46,32,39,92,110,39,13,10,9,9,9,32,46,46,32,34,99,97,110,118, +97,115,32,115,119,105,116,99,104,101,115,58,32,34,32,46,46,32,115,116, +97,116,115,46,99,97,110,118,97,115,83,119,105,116,99,104,101,115,32,46, +46,32,39,92,110,39,13,10,9,9,9,32,46,46,32,34,115,104,97,100, +101,114,32,115,119,105,116,99,104,101,115,58,32,34,32,46,46,32,115,116, +97,116,115,46,115,104,97,100,101,114,83,119,105,116,99,104,101,115,32,46, +46,32,39,92,110,39,13,10,9,9,9,32,46,46,32,34,102,111,110,116, +32,115,119,105,116,99,104,101,115,58,32,34,32,46,46,32,115,116,97,116, +115,46,102,111,110,116,83,119,105,116,99,104,101,115,32,46,46,32,39,92, +110,39,13,10,9,9,9,32,46,46,32,34,116,101,120,116,117,114,101,115, +58,32,34,32,46,46,32,115,116,97,116,115,46,116,101,120,116,117,114,101, +115,32,46,46,32,39,92,110,39,13,10,9,9,9,32,46,46,32,34,99, +97,110,118,97,115,101,115,58,32,34,32,46,46,32,115,116,97,116,115,46, +99,97,110,118,97,115,101,115,32,46,46,32,39,92,110,39,13,10,9,9, +9,32,46,46,32,34,102,111,110,116,115,58,32,34,32,46,46,32,115,116, +97,116,115,46,102,111,110,116,115,32,32,32,32,13,10,32,32,32,32,114, +101,116,117,114,110,32,115,116,114,13,10,101,110,100 }; diff --git a/src/libjin-lua/scripts/log.lua b/src/libjin-lua/scripts/log.lua index bf88399..40298cf 100644 --- a/src/libjin-lua/scripts/log.lua +++ b/src/libjin-lua/scripts/log.lua @@ -11,7 +11,7 @@ local log = { _version = "0.1.0" } -log.usecolor = true +log.usecolor = false log.outfile = nil log.level = "trace" diff --git a/src/libjin-lua/scripts/log.lua.h b/src/libjin-lua/scripts/log.lua.h index 266975c..e7d3d16 100644 --- a/src/libjin-lua/scripts/log.lua.h +++ b/src/libjin-lua/scripts/log.lua.h @@ -14,116 +14,116 @@ static char log_lua[] = { 114,32,100,101,116,97,105,108,115,46,13,10,45,45,13,10,13,10,108,111, 99,97,108,32,108,111,103,32,61,32,123,32,95,118,101,114,115,105,111,110, 32,61,32,34,48,46,49,46,48,34,32,125,13,10,13,10,108,111,103,46, -117,115,101,99,111,108,111,114,32,61,32,116,114,117,101,13,10,108,111,103, -46,111,117,116,102,105,108,101,32,61,32,110,105,108,13,10,108,111,103,46, -108,101,118,101,108,32,61,32,34,116,114,97,99,101,34,13,10,13,10,13, -10,108,111,99,97,108,32,109,111,100,101,115,32,61,32,123,13,10,32,32, -32,32,123,32,110,97,109,101,32,61,32,34,116,114,97,99,101,34,44,32, -99,111,108,111,114,32,61,32,34,92,50,55,91,51,52,109,34,44,32,125, -44,13,10,32,32,32,32,123,32,110,97,109,101,32,61,32,34,100,101,98, -117,103,34,44,32,99,111,108,111,114,32,61,32,34,92,50,55,91,51,54, +117,115,101,99,111,108,111,114,32,61,32,102,97,108,115,101,13,10,108,111, +103,46,111,117,116,102,105,108,101,32,61,32,110,105,108,13,10,108,111,103, +46,108,101,118,101,108,32,61,32,34,116,114,97,99,101,34,13,10,13,10, +13,10,108,111,99,97,108,32,109,111,100,101,115,32,61,32,123,13,10,32, +32,32,32,123,32,110,97,109,101,32,61,32,34,116,114,97,99,101,34,44, +32,99,111,108,111,114,32,61,32,34,92,50,55,91,51,52,109,34,44,32, +125,44,13,10,32,32,32,32,123,32,110,97,109,101,32,61,32,34,100,101, +98,117,103,34,44,32,99,111,108,111,114,32,61,32,34,92,50,55,91,51, +54,109,34,44,32,125,44,13,10,32,32,32,32,123,32,110,97,109,101,32, +61,32,34,105,110,102,111,34,44,32,32,32,32,99,111,108,111,114,32,61, +32,34,92,50,55,91,51,50,109,34,44,32,125,44,13,10,32,32,32,32, +123,32,110,97,109,101,32,61,32,34,119,97,114,110,34,44,32,32,32,32, +99,111,108,111,114,32,61,32,34,92,50,55,91,51,51,109,34,44,32,125, +44,13,10,32,32,32,32,123,32,110,97,109,101,32,61,32,34,101,114,114, +111,114,34,44,32,99,111,108,111,114,32,61,32,34,92,50,55,91,51,49, 109,34,44,32,125,44,13,10,32,32,32,32,123,32,110,97,109,101,32,61, -32,34,105,110,102,111,34,44,32,32,32,32,99,111,108,111,114,32,61,32, -34,92,50,55,91,51,50,109,34,44,32,125,44,13,10,32,32,32,32,123, -32,110,97,109,101,32,61,32,34,119,97,114,110,34,44,32,32,32,32,99, -111,108,111,114,32,61,32,34,92,50,55,91,51,51,109,34,44,32,125,44, -13,10,32,32,32,32,123,32,110,97,109,101,32,61,32,34,101,114,114,111, -114,34,44,32,99,111,108,111,114,32,61,32,34,92,50,55,91,51,49,109, -34,44,32,125,44,13,10,32,32,32,32,123,32,110,97,109,101,32,61,32, -34,102,97,116,97,108,34,44,32,99,111,108,111,114,32,61,32,34,92,50, -55,91,51,53,109,34,44,32,125,44,13,10,125,13,10,13,10,13,10,108, -111,99,97,108,32,108,101,118,101,108,115,32,61,32,123,125,13,10,102,111, -114,32,105,44,32,118,32,105,110,32,105,112,97,105,114,115,40,109,111,100, -101,115,41,32,100,111,13,10,32,32,32,32,108,101,118,101,108,115,91,118, -46,110,97,109,101,93,32,61,32,105,13,10,101,110,100,13,10,13,10,13, -10,108,111,99,97,108,32,114,111,117,110,100,32,61,32,102,117,110,99,116, -105,111,110,40,120,44,32,105,110,99,114,101,109,101,110,116,41,13,10,32, -32,32,32,105,110,99,114,101,109,101,110,116,32,61,32,105,110,99,114,101, -109,101,110,116,32,111,114,32,49,13,10,32,32,32,32,120,32,61,32,120, -32,47,32,105,110,99,114,101,109,101,110,116,13,10,32,32,32,32,114,101, -116,117,114,110,32,40,120,32,62,32,48,32,97,110,100,32,109,97,116,104, -46,102,108,111,111,114,40,120,32,43,32,46,53,41,32,111,114,32,109,97, -116,104,46,99,101,105,108,40,120,32,45,32,46,53,41,41,32,42,32,105, -110,99,114,101,109,101,110,116,13,10,101,110,100,13,10,13,10,13,10,108, -111,99,97,108,32,95,116,111,115,116,114,105,110,103,32,61,32,116,111,115, -116,114,105,110,103,13,10,13,10,108,111,99,97,108,32,116,111,115,116,114, -105,110,103,32,61,32,102,117,110,99,116,105,111,110,40,46,46,46,41,13, -10,32,32,32,32,108,111,99,97,108,32,116,32,61,32,123,125,13,10,32, -32,32,32,102,111,114,32,105,32,61,32,49,44,32,115,101,108,101,99,116, -40,39,35,39,44,32,46,46,46,41,32,100,111,13,10,32,32,32,32,32, -32,32,32,108,111,99,97,108,32,120,32,61,32,115,101,108,101,99,116,40, -105,44,32,46,46,46,41,13,10,32,32,32,32,32,32,32,32,105,102,32, -116,121,112,101,40,120,41,32,61,61,32,34,110,117,109,98,101,114,34,32, -116,104,101,110,13,10,32,32,32,32,32,32,32,32,32,32,32,32,120,32, -61,32,114,111,117,110,100,40,120,44,32,46,48,49,41,13,10,32,32,32, -32,32,32,32,32,101,110,100,13,10,32,32,32,32,32,32,32,32,116,91, -35,116,32,43,32,49,93,32,61,32,95,116,111,115,116,114,105,110,103,40, -120,41,13,10,32,32,32,32,101,110,100,13,10,32,32,32,32,114,101,116, -117,114,110,32,116,97,98,108,101,46,99,111,110,99,97,116,40,116,44,32, -34,32,34,41,13,10,101,110,100,13,10,13,10,13,10,102,111,114,32,105, -44,32,120,32,105,110,32,105,112,97,105,114,115,40,109,111,100,101,115,41, -32,100,111,13,10,32,32,32,32,108,111,99,97,108,32,110,97,109,101,117, -112,112,101,114,32,61,32,120,46,110,97,109,101,58,117,112,112,101,114,40, -41,13,10,32,32,32,32,108,111,103,91,120,46,110,97,109,101,93,32,61, -32,102,117,110,99,116,105,111,110,40,46,46,46,41,13,10,32,32,32,32, -32,32,32,32,13,10,32,32,32,32,32,32,32,32,45,45,32,82,101,116, -117,114,110,32,101,97,114,108,121,32,105,102,32,119,101,39,114,101,32,98, -101,108,111,119,32,116,104,101,32,108,111,103,32,108,101,118,101,108,13,10, -32,32,32,32,32,32,32,32,105,102,32,105,32,60,32,108,101,118,101,108, -115,91,108,111,103,46,108,101,118,101,108,93,32,116,104,101,110,13,10,32, -32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,13,10,32, -32,32,32,32,32,32,32,101,110,100,13,10,13,10,32,32,32,32,32,32, -32,32,108,111,99,97,108,32,109,115,103,32,61,32,116,111,115,116,114,105, -110,103,40,46,46,46,41,13,10,32,32,32,32,32,32,32,32,108,111,99, -97,108,32,105,110,102,111,32,61,32,100,101,98,117,103,46,103,101,116,105, -110,102,111,40,50,44,32,34,83,108,34,41,13,10,32,32,32,32,32,32, -32,32,108,111,99,97,108,32,108,105,110,101,105,110,102,111,32,61,32,105, -110,102,111,46,115,104,111,114,116,95,115,114,99,32,46,46,32,34,58,34, -32,46,46,32,105,110,102,111,46,99,117,114,114,101,110,116,108,105,110,101, -13,10,13,10,32,32,32,32,32,32,32,32,45,45,32,79,117,116,112,117, -116,32,116,111,32,99,111,110,115,111,108,101,13,10,32,32,32,32,32,32, -32,32,112,114,105,110,116,40,115,116,114,105,110,103,46,102,111,114,109,97, -116,40,34,37,115,91,37,45,54,115,37,115,93,37,115,32,37,115,58,32, -37,115,34,44,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,34,102,97,116,97,108,34,44,32,99,111,108,111,114,32,61,32,34,92, +50,55,91,51,53,109,34,44,32,125,44,13,10,125,13,10,13,10,13,10, +108,111,99,97,108,32,108,101,118,101,108,115,32,61,32,123,125,13,10,102, +111,114,32,105,44,32,118,32,105,110,32,105,112,97,105,114,115,40,109,111, +100,101,115,41,32,100,111,13,10,32,32,32,32,108,101,118,101,108,115,91, +118,46,110,97,109,101,93,32,61,32,105,13,10,101,110,100,13,10,13,10, +13,10,108,111,99,97,108,32,114,111,117,110,100,32,61,32,102,117,110,99, +116,105,111,110,40,120,44,32,105,110,99,114,101,109,101,110,116,41,13,10, +32,32,32,32,105,110,99,114,101,109,101,110,116,32,61,32,105,110,99,114, +101,109,101,110,116,32,111,114,32,49,13,10,32,32,32,32,120,32,61,32, +120,32,47,32,105,110,99,114,101,109,101,110,116,13,10,32,32,32,32,114, +101,116,117,114,110,32,40,120,32,62,32,48,32,97,110,100,32,109,97,116, +104,46,102,108,111,111,114,40,120,32,43,32,46,53,41,32,111,114,32,109, +97,116,104,46,99,101,105,108,40,120,32,45,32,46,53,41,41,32,42,32, +105,110,99,114,101,109,101,110,116,13,10,101,110,100,13,10,13,10,13,10, +108,111,99,97,108,32,95,116,111,115,116,114,105,110,103,32,61,32,116,111, +115,116,114,105,110,103,13,10,13,10,108,111,99,97,108,32,116,111,115,116, +114,105,110,103,32,61,32,102,117,110,99,116,105,111,110,40,46,46,46,41, +13,10,32,32,32,32,108,111,99,97,108,32,116,32,61,32,123,125,13,10, +32,32,32,32,102,111,114,32,105,32,61,32,49,44,32,115,101,108,101,99, +116,40,39,35,39,44,32,46,46,46,41,32,100,111,13,10,32,32,32,32, +32,32,32,32,108,111,99,97,108,32,120,32,61,32,115,101,108,101,99,116, +40,105,44,32,46,46,46,41,13,10,32,32,32,32,32,32,32,32,105,102, +32,116,121,112,101,40,120,41,32,61,61,32,34,110,117,109,98,101,114,34, +32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,32,32,32,32,120, +32,61,32,114,111,117,110,100,40,120,44,32,46,48,49,41,13,10,32,32, +32,32,32,32,32,32,101,110,100,13,10,32,32,32,32,32,32,32,32,116, +91,35,116,32,43,32,49,93,32,61,32,95,116,111,115,116,114,105,110,103, +40,120,41,13,10,32,32,32,32,101,110,100,13,10,32,32,32,32,114,101, +116,117,114,110,32,116,97,98,108,101,46,99,111,110,99,97,116,40,116,44, +32,34,32,34,41,13,10,101,110,100,13,10,13,10,13,10,102,111,114,32, +105,44,32,120,32,105,110,32,105,112,97,105,114,115,40,109,111,100,101,115, +41,32,100,111,13,10,32,32,32,32,108,111,99,97,108,32,110,97,109,101, +117,112,112,101,114,32,61,32,120,46,110,97,109,101,58,117,112,112,101,114, +40,41,13,10,32,32,32,32,108,111,103,91,120,46,110,97,109,101,93,32, +61,32,102,117,110,99,116,105,111,110,40,46,46,46,41,13,10,32,32,32, +32,32,32,32,32,13,10,32,32,32,32,32,32,32,32,45,45,32,82,101, +116,117,114,110,32,101,97,114,108,121,32,105,102,32,119,101,39,114,101,32, +98,101,108,111,119,32,116,104,101,32,108,111,103,32,108,101,118,101,108,13, +10,32,32,32,32,32,32,32,32,105,102,32,105,32,60,32,108,101,118,101, +108,115,91,108,111,103,46,108,101,118,101,108,93,32,116,104,101,110,13,10, +32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,13,10, +32,32,32,32,32,32,32,32,101,110,100,13,10,13,10,32,32,32,32,32, +32,32,32,108,111,99,97,108,32,109,115,103,32,61,32,116,111,115,116,114, +105,110,103,40,46,46,46,41,13,10,32,32,32,32,32,32,32,32,108,111, +99,97,108,32,105,110,102,111,32,61,32,100,101,98,117,103,46,103,101,116, +105,110,102,111,40,50,44,32,34,83,108,34,41,13,10,32,32,32,32,32, +32,32,32,108,111,99,97,108,32,108,105,110,101,105,110,102,111,32,61,32, +105,110,102,111,46,115,104,111,114,116,95,115,114,99,32,46,46,32,34,58, +34,32,46,46,32,105,110,102,111,46,99,117,114,114,101,110,116,108,105,110, +101,13,10,13,10,32,32,32,32,32,32,32,32,45,45,32,79,117,116,112, +117,116,32,116,111,32,99,111,110,115,111,108,101,13,10,32,32,32,32,32, +32,32,32,112,114,105,110,116,40,115,116,114,105,110,103,46,102,111,114,109, +97,116,40,34,37,115,91,37,45,54,115,37,115,93,37,115,32,37,115,58, +32,37,115,34,44,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,108,111,103,46,117,115, -101,99,111,108,111,114,32,97,110,100,32,120,46,99,111,108,111,114,32,111, -114,32,34,34,44,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,108,111,103,46,117, +115,101,99,111,108,111,114,32,97,110,100,32,120,46,99,111,108,111,114,32, +111,114,32,34,34,44,13,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,110,97,109,101,117, -112,112,101,114,44,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,110,97,109,101, +117,112,112,101,114,44,13,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,115,46,100,97, -116,101,40,34,37,72,58,37,77,58,37,83,34,41,44,13,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,115,46,100, +97,116,101,40,34,37,72,58,37,77,58,37,83,34,41,44,13,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,108,111,103,46,117,115,101,99,111,108,111,114,32,97,110, -100,32,34,92,50,55,91,48,109,34,32,111,114,32,34,34,44,13,10,32, +32,32,32,32,32,32,108,111,103,46,117,115,101,99,111,108,111,114,32,97, +110,100,32,34,92,50,55,91,48,109,34,32,111,114,32,34,34,44,13,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,108,105,110,101,105,110,102,111,44,13,10,32,32, +32,32,32,32,32,32,32,32,108,105,110,101,105,110,102,111,44,13,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,109,115,103,41,41,13,10,13,10,32,32,32,32,32, -32,32,32,45,45,32,79,117,116,112,117,116,32,116,111,32,108,111,103,32, -102,105,108,101,13,10,32,32,32,32,32,32,32,32,105,102,32,108,111,103, -46,111,117,116,102,105,108,101,32,116,104,101,110,13,10,32,32,32,32,32, -32,32,32,32,32,32,32,108,111,99,97,108,32,102,112,32,61,32,105,111, -46,111,112,101,110,40,108,111,103,46,111,117,116,102,105,108,101,44,32,34, -97,34,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,108,111,99, -97,108,32,115,116,114,32,61,32,115,116,114,105,110,103,46,102,111,114,109, -97,116,40,34,91,37,45,54,115,37,115,93,32,37,115,58,32,37,115,92, -110,34,44,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,109,115,103,41,41,13,10,13,10,32,32,32,32, +32,32,32,32,45,45,32,79,117,116,112,117,116,32,116,111,32,108,111,103, +32,102,105,108,101,13,10,32,32,32,32,32,32,32,32,105,102,32,108,111, +103,46,111,117,116,102,105,108,101,32,116,104,101,110,13,10,32,32,32,32, +32,32,32,32,32,32,32,32,108,111,99,97,108,32,102,112,32,61,32,105, +111,46,111,112,101,110,40,108,111,103,46,111,117,116,102,105,108,101,44,32, +34,97,34,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,108,111, +99,97,108,32,115,116,114,32,61,32,115,116,114,105,110,103,46,102,111,114, +109,97,116,40,34,91,37,45,54,115,37,115,93,32,37,115,58,32,37,115, +92,110,34,44,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,110,97,109,101,117,112,112,101,114,44,32, -111,115,46,100,97,116,101,40,41,44,32,108,105,110,101,105,110,102,111,44, -32,109,115,103,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,102, -112,58,119,114,105,116,101,40,115,116,114,41,13,10,32,32,32,32,32,32, -32,32,32,32,32,32,102,112,58,99,108,111,115,101,40,41,13,10,32,32, -32,32,32,32,32,32,101,110,100,13,10,13,10,32,32,32,32,101,110,100, -13,10,101,110,100,13,10,13,10,45,45,32,69,120,112,111,114,116,32,116, -111,32,74,105,110,46,32,13,10,13,10,106,105,110,46,108,111,103,32,61, -32,108,111,103,13,10 +32,32,32,32,32,32,32,32,32,32,110,97,109,101,117,112,112,101,114,44, +32,111,115,46,100,97,116,101,40,41,44,32,108,105,110,101,105,110,102,111, +44,32,109,115,103,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32, +102,112,58,119,114,105,116,101,40,115,116,114,41,13,10,32,32,32,32,32, +32,32,32,32,32,32,32,102,112,58,99,108,111,115,101,40,41,13,10,32, +32,32,32,32,32,32,32,101,110,100,13,10,13,10,32,32,32,32,101,110, +100,13,10,101,110,100,13,10,13,10,45,45,32,69,120,112,111,114,116,32, +116,111,32,74,105,110,46,32,13,10,13,10,106,105,110,46,108,111,103,32, +61,32,108,111,103,13,10 }; diff --git a/src/libjin-lua/scripts/physics/physics.lua b/src/libjin-lua/scripts/physics/physics.lua new file mode 100644 index 0000000..d312762 --- /dev/null +++ b/src/libjin-lua/scripts/physics/physics.lua @@ -0,0 +1,750 @@ +jin.physics = jin.physics or {} + +-- https://github.com/kikito/bump.lua + +local bump = {} + +------------------------------------------ +-- Auxiliary functions +------------------------------------------ +local DELTA = 1e-10 -- floating-point margin of error + +local abs, floor, ceil, min, max = math.abs, math.floor, math.ceil, math.min, math.max + +local function sign(x) + if x > 0 then return 1 end + if x == 0 then return 0 end + return -1 +end + +local function nearest(x, a, b) + if abs(a - x) < abs(b - x) then return a else return b end +end + +local function assertType(desiredType, value, name) + if type(value) ~= desiredType then + error(name .. ' must be a ' .. desiredType .. ', but was ' .. tostring(value) .. '(a ' .. type(value) .. ')') + end +end + +local function assertIsPositiveNumber(value, name) + if type(value) ~= 'number' or value <= 0 then + error(name .. ' must be a positive integer, but was ' .. tostring(value) .. '(' .. type(value) .. ')') + end +end + +local function assertIsRect(x,y,w,h) + assertType('number', x, 'x') + assertType('number', y, 'y') + assertIsPositiveNumber(w, 'w') + assertIsPositiveNumber(h, 'h') +end + +local defaultFilter = function() + return 'slide' +end + +------------------------------------------ +-- Rectangle functions +------------------------------------------ + +local function rect_getNearestCorner(x,y,w,h, px, py) + return nearest(px, x, x+w), nearest(py, y, y+h) +end + +-- This is a generalized implementation of the liang-barsky algorithm, which also returns +-- the normals of the sides where the segment intersects. +-- Returns nil if the segment never touches the rect +-- Notice that normals are only guaranteed to be accurate when initially ti1, ti2 == -math.huge, math.huge +local function rect_getSegmentIntersectionIndices(x,y,w,h, x1,y1,x2,y2, ti1,ti2) + ti1, ti2 = ti1 or 0, ti2 or 1 + local dx, dy = x2-x1, y2-y1 + local nx, ny + local nx1, ny1, nx2, ny2 = 0,0,0,0 + local p, q, r + + for side = 1,4 do + if side == 1 then nx,ny,p,q = -1, 0, -dx, x1 - x -- left + elseif side == 2 then nx,ny,p,q = 1, 0, dx, x + w - x1 -- right + elseif side == 3 then nx,ny,p,q = 0, -1, -dy, y1 - y -- top + else nx,ny,p,q = 0, 1, dy, y + h - y1 -- bottom + end + + if p == 0 then + if q <= 0 then return nil end + else + r = q / p + if p < 0 then + if r > ti2 then return nil + elseif r > ti1 then ti1,nx1,ny1 = r,nx,ny + end + else -- p > 0 + if r < ti1 then return nil + elseif r < ti2 then ti2,nx2,ny2 = r,nx,ny + end + end + end + end + + return ti1,ti2, nx1,ny1, nx2,ny2 +end + +-- Calculates the minkowsky difference between 2 rects, which is another rect +local function rect_getDiff(x1,y1,w1,h1, x2,y2,w2,h2) + return x2 - x1 - w1, + y2 - y1 - h1, + w1 + w2, + h1 + h2 +end + +local function rect_containsPoint(x,y,w,h, px,py) + return px - x > DELTA and py - y > DELTA and + x + w - px > DELTA and y + h - py > DELTA +end + +local function rect_isIntersecting(x1,y1,w1,h1, x2,y2,w2,h2) + return x1 < x2+w2 and x2 < x1+w1 and + y1 < y2+h2 and y2 < y1+h1 +end + +local function rect_getSquareDistance(x1,y1,w1,h1, x2,y2,w2,h2) + local dx = x1 - x2 + (w1 - w2)/2 + local dy = y1 - y2 + (h1 - h2)/2 + return dx*dx + dy*dy +end + +local function rect_detectCollision(x1,y1,w1,h1, x2,y2,w2,h2, goalX, goalY) + goalX = goalX or x1 + goalY = goalY or y1 + + local dx, dy = goalX - x1, goalY - y1 + local x,y,w,h = rect_getDiff(x1,y1,w1,h1, x2,y2,w2,h2) + + local overlaps, ti, nx, ny + + if rect_containsPoint(x,y,w,h, 0,0) then -- item was intersecting other + local px, py = rect_getNearestCorner(x,y,w,h, 0, 0) + local wi, hi = min(w1, abs(px)), min(h1, abs(py)) -- area of intersection + ti = -wi * hi -- ti is the negative area of intersection + overlaps = true + else + local ti1,ti2,nx1,ny1 = rect_getSegmentIntersectionIndices(x,y,w,h, 0,0,dx,dy, -math.huge, math.huge) + + -- item tunnels into other + if ti1 + and ti1 < 1 + and (abs(ti1 - ti2) >= DELTA) -- special case for rect going through another rect's corner + and (0 < ti1 + DELTA + or 0 == ti1 and ti2 > 0) + then + ti, nx, ny = ti1, nx1, ny1 + overlaps = false + end + end + + if not ti then return end + + local tx, ty + + if overlaps then + if dx == 0 and dy == 0 then + -- intersecting and not moving - use minimum displacement vector + local px, py = rect_getNearestCorner(x,y,w,h, 0,0) + if abs(px) < abs(py) then py = 0 else px = 0 end + nx, ny = sign(px), sign(py) + tx, ty = x1 + px, y1 + py + else + -- intersecting and moving - move in the opposite direction + local ti1, _ + ti1,_,nx,ny = rect_getSegmentIntersectionIndices(x,y,w,h, 0,0,dx,dy, -math.huge, 1) + if not ti1 then return end + tx, ty = x1 + dx * ti1, y1 + dy * ti1 + end + else -- tunnel + tx, ty = x1 + dx * ti, y1 + dy * ti + end + + return { + overlaps = overlaps, + ti = ti, + move = {x = dx, y = dy}, + normal = {x = nx, y = ny}, + touch = {x = tx, y = ty}, + itemRect = {x = x1, y = y1, w = w1, h = h1}, + otherRect = {x = x2, y = y2, w = w2, h = h2} + } +end + +------------------------------------------ +-- Grid functions +------------------------------------------ + +local function grid_toWorld(cellSize, cx, cy) + return (cx - 1)*cellSize, (cy-1)*cellSize +end + +local function grid_toCell(cellSize, x, y) + return floor(x / cellSize) + 1, floor(y / cellSize) + 1 +end + +-- grid_traverse* functions are based on "A Fast Voxel Traversal Algorithm for Ray Tracing", +-- by John Amanides and Andrew Woo - http://www.cse.yorku.ca/~amana/research/grid.pdf +-- It has been modified to include both cells when the ray "touches a grid corner", +-- and with a different exit condition + +local function grid_traverse_initStep(cellSize, ct, t1, t2) + local v = t2 - t1 + if v > 0 then + return 1, cellSize / v, ((ct + v) * cellSize - t1) / v + elseif v < 0 then + return -1, -cellSize / v, ((ct + v - 1) * cellSize - t1) / v + else + return 0, math.huge, math.huge + end +end + +local function grid_traverse(cellSize, x1,y1,x2,y2, f) + local cx1,cy1 = grid_toCell(cellSize, x1,y1) + local cx2,cy2 = grid_toCell(cellSize, x2,y2) + local stepX, dx, tx = grid_traverse_initStep(cellSize, cx1, x1, x2) + local stepY, dy, ty = grid_traverse_initStep(cellSize, cy1, y1, y2) + local cx,cy = cx1,cy1 + + f(cx, cy) + + -- The default implementation had an infinite loop problem when + -- approaching the last cell in some occassions. We finish iterating + -- when we are *next* to the last cell + while abs(cx - cx2) + abs(cy - cy2) > 1 do + if tx < ty then + tx, cx = tx + dx, cx + stepX + f(cx, cy) + else + -- Addition: include both cells when going through corners + if tx == ty then f(cx + stepX, cy) end + ty, cy = ty + dy, cy + stepY + f(cx, cy) + end + end + + -- If we have not arrived to the last cell, use it + if cx ~= cx2 or cy ~= cy2 then f(cx2, cy2) end + +end + +local function grid_toCellRect(cellSize, x,y,w,h) + local cx,cy = grid_toCell(cellSize, x, y) + local cr,cb = ceil((x+w) / cellSize), ceil((y+h) / cellSize) + return cx, cy, cr - cx + 1, cb - cy + 1 +end + +------------------------------------------ +-- Responses +------------------------------------------ + +local touch = function(world, col, x,y,w,h, goalX, goalY, filter) + return col.touch.x, col.touch.y, {}, 0 +end + +local cross = function(world, col, x,y,w,h, goalX, goalY, filter) + local cols, len = world:project(col.item, x,y,w,h, goalX, goalY, filter) + return goalX, goalY, cols, len +end + +local slide = function(world, col, x,y,w,h, goalX, goalY, filter) + goalX = goalX or x + goalY = goalY or y + + local tch, move = col.touch, col.move + if move.x ~= 0 or move.y ~= 0 then + if col.normal.x ~= 0 then + goalX = tch.x + else + goalY = tch.y + end + end + + col.slide = {x = goalX, y = goalY} + + x,y = tch.x, tch.y + local cols, len = world:project(col.item, x,y,w,h, goalX, goalY, filter) + return goalX, goalY, cols, len +end + +local bounce = function(world, col, x,y,w,h, goalX, goalY, filter) + goalX = goalX or x + goalY = goalY or y + + local tch, move = col.touch, col.move + local tx, ty = tch.x, tch.y + + local bx, by = tx, ty + + if move.x ~= 0 or move.y ~= 0 then + local bnx, bny = goalX - tx, goalY - ty + if col.normal.x == 0 then bny = -bny else bnx = -bnx end + bx, by = tx + bnx, ty + bny + end + + col.bounce = {x = bx, y = by} + x,y = tch.x, tch.y + goalX, goalY = bx, by + + local cols, len = world:project(col.item, x,y,w,h, goalX, goalY, filter) + return goalX, goalY, cols, len +end + +------------------------------------------ +-- World +------------------------------------------ + +local World = {} +local World_mt = {__index = World} + +-- Private functions and methods + +local function sortByWeight(a,b) return a.weight < b.weight end + +local function sortByTiAndDistance(a,b) + if a.ti == b.ti then + local ir, ar, br = a.itemRect, a.otherRect, b.otherRect + local ad = rect_getSquareDistance(ir.x,ir.y,ir.w,ir.h, ar.x,ar.y,ar.w,ar.h) + local bd = rect_getSquareDistance(ir.x,ir.y,ir.w,ir.h, br.x,br.y,br.w,br.h) + return ad < bd + end + return a.ti < b.ti +end + +local function addItemToCell(self, item, cx, cy) + self.rows[cy] = self.rows[cy] or setmetatable({}, {__mode = 'v'}) + local row = self.rows[cy] + row[cx] = row[cx] or {itemCount = 0, x = cx, y = cy, items = setmetatable({}, {__mode = 'k'})} + local cell = row[cx] + self.nonEmptyCells[cell] = true + if not cell.items[item] then + cell.items[item] = true + cell.itemCount = cell.itemCount + 1 + end +end + +local function removeItemFromCell(self, item, cx, cy) + local row = self.rows[cy] + if not row or not row[cx] or not row[cx].items[item] then return false end + + local cell = row[cx] + cell.items[item] = nil + cell.itemCount = cell.itemCount - 1 + if cell.itemCount == 0 then + self.nonEmptyCells[cell] = nil + end + return true +end + +local function getDictItemsInCellRect(self, cl,ct,cw,ch) + local items_dict = {} + for cy=ct,ct+ch-1 do + local row = self.rows[cy] + if row then + for cx=cl,cl+cw-1 do + local cell = row[cx] + if cell and cell.itemCount > 0 then -- no cell.itemCount > 1 because tunneling + for item,_ in pairs(cell.items) do + items_dict[item] = true + end + end + end + end + end + + return items_dict +end + +local function getCellsTouchedBySegment(self, x1,y1,x2,y2) + + local cells, cellsLen, visited = {}, 0, {} + + grid_traverse(self.cellSize, x1,y1,x2,y2, function(cx, cy) + local row = self.rows[cy] + if not row then return end + local cell = row[cx] + if not cell or visited[cell] then return end + + visited[cell] = true + cellsLen = cellsLen + 1 + cells[cellsLen] = cell + end) + + return cells, cellsLen +end + +local function getInfoAboutItemsTouchedBySegment(self, x1,y1, x2,y2, filter) + local cells, len = getCellsTouchedBySegment(self, x1,y1,x2,y2) + local cell, rect, l,t,w,h, ti1,ti2, tii0,tii1 + local visited, itemInfo, itemInfoLen = {},{},0 + for i=1,len do + cell = cells[i] + for item in pairs(cell.items) do + if not visited[item] then + visited[item] = true + if (not filter or filter(item)) then + rect = self.rects[item] + l,t,w,h = rect.x,rect.y,rect.w,rect.h + + ti1,ti2 = rect_getSegmentIntersectionIndices(l,t,w,h, x1,y1, x2,y2, 0, 1) + if ti1 and ((0 < ti1 and ti1 < 1) or (0 < ti2 and ti2 < 1)) then + -- the sorting is according to the t of an infinite line, not the segment + tii0,tii1 = rect_getSegmentIntersectionIndices(l,t,w,h, x1,y1, x2,y2, -math.huge, math.huge) + itemInfoLen = itemInfoLen + 1 + itemInfo[itemInfoLen] = {item = item, ti1 = ti1, ti2 = ti2, weight = min(tii0,tii1)} + end + end + end + end + end + table.sort(itemInfo, sortByWeight) + return itemInfo, itemInfoLen +end + +local function getResponseByName(self, name) + local response = self.responses[name] + if not response then + error(('Unknown collision type: %s (%s)'):format(name, type(name))) + end + return response +end + + +-- Misc Public Methods + +function World:addResponse(name, response) + self.responses[name] = response +end + +function World:project(item, x,y,w,h, goalX, goalY, filter) + assertIsRect(x,y,w,h) + + goalX = goalX or x + goalY = goalY or y + filter = filter or defaultFilter + + local collisions, len = {}, 0 + + local visited = {} + if item ~= nil then visited[item] = true end + + -- This could probably be done with less cells using a polygon raster over the cells instead of a + -- bounding rect of the whole movement. Conditional to building a queryPolygon method + local tl, tt = min(goalX, x), min(goalY, y) + local tr, tb = max(goalX + w, x+w), max(goalY + h, y+h) + local tw, th = tr-tl, tb-tt + + local cl,ct,cw,ch = grid_toCellRect(self.cellSize, tl,tt,tw,th) + + local dictItemsInCellRect = getDictItemsInCellRect(self, cl,ct,cw,ch) + + for other,_ in pairs(dictItemsInCellRect) do + if not visited[other] then + visited[other] = true + + local responseName = filter(item, other) + if responseName then + local ox,oy,ow,oh = self:getRect(other) + local col = rect_detectCollision(x,y,w,h, ox,oy,ow,oh, goalX, goalY) + + if col then + col.other = other + col.item = item + col.type = responseName + + len = len + 1 + collisions[len] = col + end + end + end + end + + table.sort(collisions, sortByTiAndDistance) + + return collisions, len +end + +function World:countCells() + local count = 0 + for _,row in pairs(self.rows) do + for _,_ in pairs(row) do + count = count + 1 + end + end + return count +end + +function World:hasItem(item) + return not not self.rects[item] +end + +function World:getItems() + local items, len = {}, 0 + for item,_ in pairs(self.rects) do + len = len + 1 + items[len] = item + end + return items, len +end + +function World:countItems() + local len = 0 + for _ in pairs(self.rects) do len = len + 1 end + return len +end + +function World:getRect(item) + local rect = self.rects[item] + if not rect then + error('Item ' .. tostring(item) .. ' must be added to the world before getting its rect. Use world:add(item, x,y,w,h) to add it first.') + end + return rect.x, rect.y, rect.w, rect.h +end + +function World:toWorld(cx, cy) + return grid_toWorld(self.cellSize, cx, cy) +end + +function World:toCell(x,y) + return grid_toCell(self.cellSize, x, y) +end + + +--- Query methods + +function World:queryRect(x,y,w,h, filter) + + assertIsRect(x,y,w,h) + + local cl,ct,cw,ch = grid_toCellRect(self.cellSize, x,y,w,h) + local dictItemsInCellRect = getDictItemsInCellRect(self, cl,ct,cw,ch) + + local items, len = {}, 0 + + local rect + for item,_ in pairs(dictItemsInCellRect) do + rect = self.rects[item] + if (not filter or filter(item)) + and rect_isIntersecting(x,y,w,h, rect.x, rect.y, rect.w, rect.h) + then + len = len + 1 + items[len] = item + end + end + + return items, len +end + +function World:queryPoint(x,y, filter) + local cx,cy = self:toCell(x,y) + local dictItemsInCellRect = getDictItemsInCellRect(self, cx,cy,1,1) + + local items, len = {}, 0 + + local rect + for item,_ in pairs(dictItemsInCellRect) do + rect = self.rects[item] + if (not filter or filter(item)) + and rect_containsPoint(rect.x, rect.y, rect.w, rect.h, x, y) + then + len = len + 1 + items[len] = item + end + end + + return items, len +end + +function World:querySegment(x1, y1, x2, y2, filter) + local itemInfo, len = getInfoAboutItemsTouchedBySegment(self, x1, y1, x2, y2, filter) + local items = {} + for i=1, len do + items[i] = itemInfo[i].item + end + return items, len +end + +function World:querySegmentWithCoords(x1, y1, x2, y2, filter) + local itemInfo, len = getInfoAboutItemsTouchedBySegment(self, x1, y1, x2, y2, filter) + local dx, dy = x2-x1, y2-y1 + local info, ti1, ti2 + for i=1, len do + info = itemInfo[i] + ti1 = info.ti1 + ti2 = info.ti2 + + info.weight = nil + info.x1 = x1 + dx * ti1 + info.y1 = y1 + dy * ti1 + info.x2 = x1 + dx * ti2 + info.y2 = y1 + dy * ti2 + end + return itemInfo, len +end + +--- Main methods + +function World:add(item, x,y,w,h) + local rect = self.rects[item] + if rect then + error('Item ' .. tostring(item) .. ' added to the world twice.') + end + assertIsRect(x,y,w,h) + + self.rects[item] = {x=x,y=y,w=w,h=h} + + local cl,ct,cw,ch = grid_toCellRect(self.cellSize, x,y,w,h) + for cy = ct, ct+ch-1 do + for cx = cl, cl+cw-1 do + addItemToCell(self, item, cx, cy) + end + end + + return item +end + +function World:remove(item) + local x,y,w,h = self:getRect(item) + + self.rects[item] = nil + local cl,ct,cw,ch = grid_toCellRect(self.cellSize, x,y,w,h) + for cy = ct, ct+ch-1 do + for cx = cl, cl+cw-1 do + removeItemFromCell(self, item, cx, cy) + end + end +end + +function World:update(item, x2,y2,w2,h2) + local x1,y1,w1,h1 = self:getRect(item) + w2,h2 = w2 or w1, h2 or h1 + assertIsRect(x2,y2,w2,h2) + + if x1 ~= x2 or y1 ~= y2 or w1 ~= w2 or h1 ~= h2 then + + local cellSize = self.cellSize + local cl1,ct1,cw1,ch1 = grid_toCellRect(cellSize, x1,y1,w1,h1) + local cl2,ct2,cw2,ch2 = grid_toCellRect(cellSize, x2,y2,w2,h2) + + if cl1 ~= cl2 or ct1 ~= ct2 or cw1 ~= cw2 or ch1 ~= ch2 then + + local cr1, cb1 = cl1+cw1-1, ct1+ch1-1 + local cr2, cb2 = cl2+cw2-1, ct2+ch2-1 + local cyOut + + for cy = ct1, cb1 do + cyOut = cy < ct2 or cy > cb2 + for cx = cl1, cr1 do + if cyOut or cx < cl2 or cx > cr2 then + removeItemFromCell(self, item, cx, cy) + end + end + end + + for cy = ct2, cb2 do + cyOut = cy < ct1 or cy > cb1 + for cx = cl2, cr2 do + if cyOut or cx < cl1 or cx > cr1 then + addItemToCell(self, item, cx, cy) + end + end + end + + end + + local rect = self.rects[item] + rect.x, rect.y, rect.w, rect.h = x2,y2,w2,h2 + + end +end + +function World:move(item, goalX, goalY, filter) + local actualX, actualY, cols, len = self:check(item, goalX, goalY, filter) + + self:update(item, actualX, actualY) + + return actualX, actualY, cols, len +end + +function World:check(item, goalX, goalY, filter) + filter = filter or defaultFilter + + local visited = {[item] = true} + local visitedFilter = function(itm, other) + if visited[other] then return false end + return filter(itm, other) + end + + local cols, len = {}, 0 + + local x,y,w,h = self:getRect(item) + + local projected_cols, projected_len = self:project(item, x,y,w,h, goalX,goalY, visitedFilter) + + while projected_len > 0 do + local col = projected_cols[1] + len = len + 1 + cols[len] = col + + visited[col.other] = true + + local response = getResponseByName(self, col.type) + + goalX, goalY, projected_cols, projected_len = response( + self, + col, + x, y, w, h, + goalX, goalY, + visitedFilter + ) + end + + return goalX, goalY, cols, len +end + + +-- Public library functions + +bump.newWorld = function(cellSize) + cellSize = cellSize or 64 + assertIsPositiveNumber(cellSize, 'cellSize') + local world = setmetatable({ + cellSize = cellSize, + rects = {}, + rows = {}, + nonEmptyCells = {}, + responses = {} + }, World_mt) + + world:addResponse('touch', touch) + world:addResponse('cross', cross) + world:addResponse('slide', slide) + world:addResponse('bounce', bounce) + + return world +end + +bump.rect = { + getNearestCorner = rect_getNearestCorner, + getSegmentIntersectionIndices = rect_getSegmentIntersectionIndices, + getDiff = rect_getDiff, + containsPoint = rect_containsPoint, + isIntersecting = rect_isIntersecting, + getSquareDistance = rect_getSquareDistance, + detectCollision = rect_detectCollision +} + +bump.responses = { + touch = touch, + cross = cross, + slide = slide, + bounce = bounce +} + +-- Export to Jin. + +jin.physics = bump diff --git a/src/libjin-lua/scripts/physics/physics.lua.h b/src/libjin-lua/scripts/physics/physics.lua.h new file mode 100644 index 0000000..c675cd3 --- /dev/null +++ b/src/libjin-lua/scripts/physics/physics.lua.h @@ -0,0 +1,1146 @@ +/*Auto generated, don't modify by hand.*/ +static char physics_lua[] = { +106,105,110,46,112,104,121,115,105,99,115,32,61,32,106,105,110,46,112,104, +121,115,105,99,115,32,111,114,32,123,125,13,10,13,10,45,45,32,104,116, +116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,107,105,107, +105,116,111,47,98,117,109,112,46,108,117,97,13,10,13,10,108,111,99,97, +108,32,98,117,109,112,32,61,32,123,125,13,10,13,10,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,13,10,45, +45,32,65,117,120,105,108,105,97,114,121,32,102,117,110,99,116,105,111,110, +115,13,10,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,13,10,108,111,99,97,108,32,68,69,76,84,65,32,61, +32,49,101,45,49,48,32,45,45,32,102,108,111,97,116,105,110,103,45,112, +111,105,110,116,32,109,97,114,103,105,110,32,111,102,32,101,114,114,111,114, +13,10,13,10,108,111,99,97,108,32,97,98,115,44,32,102,108,111,111,114, +44,32,99,101,105,108,44,32,109,105,110,44,32,109,97,120,32,61,32,109, +97,116,104,46,97,98,115,44,32,109,97,116,104,46,102,108,111,111,114,44, +32,109,97,116,104,46,99,101,105,108,44,32,109,97,116,104,46,109,105,110, +44,32,109,97,116,104,46,109,97,120,13,10,13,10,108,111,99,97,108,32, +102,117,110,99,116,105,111,110,32,115,105,103,110,40,120,41,13,10,32,32, +32,32,105,102,32,120,32,62,32,48,32,116,104,101,110,32,114,101,116,117, +114,110,32,49,32,101,110,100,13,10,32,32,32,32,105,102,32,120,32,61, +61,32,48,32,116,104,101,110,32,114,101,116,117,114,110,32,48,32,101,110, +100,13,10,32,32,32,32,114,101,116,117,114,110,32,45,49,13,10,101,110, +100,13,10,13,10,108,111,99,97,108,32,102,117,110,99,116,105,111,110,32, +110,101,97,114,101,115,116,40,120,44,32,97,44,32,98,41,13,10,32,32, +32,32,105,102,32,97,98,115,40,97,32,45,32,120,41,32,60,32,97,98, +115,40,98,32,45,32,120,41,32,116,104,101,110,32,114,101,116,117,114,110, +32,97,32,101,108,115,101,32,114,101,116,117,114,110,32,98,32,101,110,100, +13,10,101,110,100,13,10,13,10,108,111,99,97,108,32,102,117,110,99,116, +105,111,110,32,97,115,115,101,114,116,84,121,112,101,40,100,101,115,105,114, +101,100,84,121,112,101,44,32,118,97,108,117,101,44,32,110,97,109,101,41, +13,10,32,32,32,32,105,102,32,116,121,112,101,40,118,97,108,117,101,41, +32,126,61,32,100,101,115,105,114,101,100,84,121,112,101,32,116,104,101,110, +13,10,32,32,32,32,32,32,32,32,101,114,114,111,114,40,110,97,109,101, +32,46,46,32,39,32,109,117,115,116,32,98,101,32,97,32,39,32,46,46, +32,100,101,115,105,114,101,100,84,121,112,101,32,46,46,32,39,44,32,98, +117,116,32,119,97,115,32,39,32,46,46,32,116,111,115,116,114,105,110,103, +40,118,97,108,117,101,41,32,46,46,32,39,40,97,32,39,32,46,46,32, +116,121,112,101,40,118,97,108,117,101,41,32,46,46,32,39,41,39,41,13, +10,32,32,32,32,101,110,100,13,10,101,110,100,13,10,13,10,108,111,99, +97,108,32,102,117,110,99,116,105,111,110,32,97,115,115,101,114,116,73,115, +80,111,115,105,116,105,118,101,78,117,109,98,101,114,40,118,97,108,117,101, +44,32,110,97,109,101,41,13,10,32,32,32,32,105,102,32,116,121,112,101, +40,118,97,108,117,101,41,32,126,61,32,39,110,117,109,98,101,114,39,32, +111,114,32,118,97,108,117,101,32,60,61,32,48,32,116,104,101,110,13,10, +32,32,32,32,32,32,32,32,101,114,114,111,114,40,110,97,109,101,32,46, +46,32,39,32,109,117,115,116,32,98,101,32,97,32,112,111,115,105,116,105, +118,101,32,105,110,116,101,103,101,114,44,32,98,117,116,32,119,97,115,32, +39,32,46,46,32,116,111,115,116,114,105,110,103,40,118,97,108,117,101,41, +32,46,46,32,39,40,39,32,46,46,32,116,121,112,101,40,118,97,108,117, +101,41,32,46,46,32,39,41,39,41,13,10,32,32,32,32,101,110,100,13, +10,101,110,100,13,10,13,10,108,111,99,97,108,32,102,117,110,99,116,105, +111,110,32,97,115,115,101,114,116,73,115,82,101,99,116,40,120,44,121,44, +119,44,104,41,13,10,32,32,32,32,97,115,115,101,114,116,84,121,112,101, +40,39,110,117,109,98,101,114,39,44,32,120,44,32,39,120,39,41,13,10, +32,32,32,32,97,115,115,101,114,116,84,121,112,101,40,39,110,117,109,98, +101,114,39,44,32,121,44,32,39,121,39,41,13,10,32,32,32,32,97,115, +115,101,114,116,73,115,80,111,115,105,116,105,118,101,78,117,109,98,101,114, +40,119,44,32,39,119,39,41,13,10,32,32,32,32,97,115,115,101,114,116, +73,115,80,111,115,105,116,105,118,101,78,117,109,98,101,114,40,104,44,32, +39,104,39,41,13,10,101,110,100,13,10,13,10,108,111,99,97,108,32,100, +101,102,97,117,108,116,70,105,108,116,101,114,32,61,32,102,117,110,99,116, +105,111,110,40,41,13,10,32,32,32,32,114,101,116,117,114,110,32,39,115, +108,105,100,101,39,13,10,101,110,100,13,10,13,10,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,13,10,45,45, +32,82,101,99,116,97,110,103,108,101,32,102,117,110,99,116,105,111,110,115, +13,10,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,13,10,13,10,108,111,99,97,108,32,102,117,110,99,116,105, +111,110,32,114,101,99,116,95,103,101,116,78,101,97,114,101,115,116,67,111, +114,110,101,114,40,120,44,121,44,119,44,104,44,32,112,120,44,32,112,121, +41,13,10,32,32,32,32,114,101,116,117,114,110,32,110,101,97,114,101,115, +116,40,112,120,44,32,120,44,32,120,43,119,41,44,32,110,101,97,114,101, +115,116,40,112,121,44,32,121,44,32,121,43,104,41,13,10,101,110,100,13, +10,13,10,45,45,32,84,104,105,115,32,105,115,32,97,32,103,101,110,101, +114,97,108,105,122,101,100,32,105,109,112,108,101,109,101,110,116,97,116,105, +111,110,32,111,102,32,116,104,101,32,108,105,97,110,103,45,98,97,114,115, +107,121,32,97,108,103,111,114,105,116,104,109,44,32,119,104,105,99,104,32, +97,108,115,111,32,114,101,116,117,114,110,115,13,10,45,45,32,116,104,101, +32,110,111,114,109,97,108,115,32,111,102,32,116,104,101,32,115,105,100,101, +115,32,119,104,101,114,101,32,116,104,101,32,115,101,103,109,101,110,116,32, +105,110,116,101,114,115,101,99,116,115,46,13,10,45,45,32,82,101,116,117, +114,110,115,32,110,105,108,32,105,102,32,116,104,101,32,115,101,103,109,101, +110,116,32,110,101,118,101,114,32,116,111,117,99,104,101,115,32,116,104,101, +32,114,101,99,116,13,10,45,45,32,78,111,116,105,99,101,32,116,104,97, +116,32,110,111,114,109,97,108,115,32,97,114,101,32,111,110,108,121,32,103, +117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,97,99,99,117, +114,97,116,101,32,119,104,101,110,32,105,110,105,116,105,97,108,108,121,32, +116,105,49,44,32,116,105,50,32,61,61,32,45,109,97,116,104,46,104,117, +103,101,44,32,109,97,116,104,46,104,117,103,101,13,10,108,111,99,97,108, +32,102,117,110,99,116,105,111,110,32,114,101,99,116,95,103,101,116,83,101, +103,109,101,110,116,73,110,116,101,114,115,101,99,116,105,111,110,73,110,100, +105,99,101,115,40,120,44,121,44,119,44,104,44,32,120,49,44,121,49,44, +120,50,44,121,50,44,32,116,105,49,44,116,105,50,41,13,10,32,32,32, +32,116,105,49,44,32,116,105,50,32,61,32,116,105,49,32,111,114,32,48, +44,32,116,105,50,32,111,114,32,49,13,10,32,32,32,32,108,111,99,97, +108,32,100,120,44,32,100,121,32,61,32,120,50,45,120,49,44,32,121,50, +45,121,49,13,10,32,32,32,32,108,111,99,97,108,32,110,120,44,32,110, +121,13,10,32,32,32,32,108,111,99,97,108,32,110,120,49,44,32,110,121, +49,44,32,110,120,50,44,32,110,121,50,32,61,32,48,44,48,44,48,44, +48,13,10,32,32,32,32,108,111,99,97,108,32,112,44,32,113,44,32,114, +13,10,13,10,32,32,32,32,102,111,114,32,115,105,100,101,32,61,32,49, +44,52,32,100,111,13,10,32,32,32,32,32,32,32,32,105,102,32,32,32, +32,32,32,32,32,32,115,105,100,101,32,61,61,32,49,32,116,104,101,110, +32,110,120,44,110,121,44,112,44,113,32,61,32,45,49,44,32,32,32,32, +48,44,32,45,100,120,44,32,120,49,32,45,32,120,32,32,32,32,32,32, +32,32,32,45,45,32,108,101,102,116,13,10,32,32,32,32,32,32,32,32, +101,108,115,101,105,102,32,115,105,100,101,32,61,61,32,50,32,116,104,101, +110,32,110,120,44,110,121,44,112,44,113,32,61,32,32,32,32,49,44,32, +32,32,32,48,44,32,32,32,32,100,120,44,32,120,32,43,32,119,32,45, +32,120,49,32,45,45,32,114,105,103,104,116,13,10,32,32,32,32,32,32, +32,32,101,108,115,101,105,102,32,115,105,100,101,32,61,61,32,51,32,116, +104,101,110,32,110,120,44,110,121,44,112,44,113,32,61,32,32,32,32,48, +44,32,45,49,44,32,45,100,121,44,32,121,49,32,45,32,121,32,32,32, +32,32,32,32,32,32,45,45,32,116,111,112,13,10,32,32,32,32,32,32, +32,32,101,108,115,101,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,110,120,44,110,121,44,112,44,113,32,61,32,32,32,32,48,44,32, +32,32,32,49,44,32,32,32,32,100,121,44,32,121,32,43,32,104,32,45, +32,121,49,32,45,45,32,98,111,116,116,111,109,13,10,32,32,32,32,32, +32,32,32,101,110,100,13,10,13,10,32,32,32,32,32,32,32,32,105,102, +32,112,32,61,61,32,48,32,116,104,101,110,13,10,32,32,32,32,32,32, +32,32,32,32,32,32,105,102,32,113,32,60,61,32,48,32,116,104,101,110, +32,114,101,116,117,114,110,32,110,105,108,32,101,110,100,13,10,32,32,32, +32,32,32,32,32,101,108,115,101,13,10,32,32,32,32,32,32,32,32,32, +32,32,32,114,32,61,32,113,32,47,32,112,13,10,32,32,32,32,32,32, +32,32,32,32,32,32,105,102,32,112,32,60,32,48,32,116,104,101,110,13, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32, +32,32,32,32,32,32,32,32,114,32,62,32,116,105,50,32,116,104,101,110, +32,114,101,116,117,114,110,32,110,105,108,13,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,101,108,115,101,105,102,32,114,32,62,32, +116,105,49,32,116,104,101,110,32,116,105,49,44,110,120,49,44,110,121,49, +32,61,32,114,44,110,120,44,110,121,13,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,101,110,100,13,10,32,32,32,32,32,32,32, +32,32,32,32,32,101,108,115,101,32,45,45,32,112,32,62,32,48,13,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,32, +32,32,32,32,32,32,32,114,32,60,32,116,105,49,32,116,104,101,110,32, +114,101,116,117,114,110,32,110,105,108,13,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,101,108,115,101,105,102,32,114,32,60,32,116, +105,50,32,116,104,101,110,32,116,105,50,44,110,120,50,44,110,121,50,32, +61,32,114,44,110,120,44,110,121,13,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,101,110,100,13,10,32,32,32,32,32,32,32,32, +32,32,32,32,101,110,100,13,10,32,32,32,32,32,32,32,32,101,110,100, +13,10,32,32,32,32,101,110,100,13,10,13,10,32,32,32,32,114,101,116, +117,114,110,32,116,105,49,44,116,105,50,44,32,110,120,49,44,110,121,49, +44,32,110,120,50,44,110,121,50,13,10,101,110,100,13,10,13,10,45,45, +32,67,97,108,99,117,108,97,116,101,115,32,116,104,101,32,109,105,110,107, +111,119,115,107,121,32,100,105,102,102,101,114,101,110,99,101,32,98,101,116, +119,101,101,110,32,50,32,114,101,99,116,115,44,32,119,104,105,99,104,32, +105,115,32,97,110,111,116,104,101,114,32,114,101,99,116,13,10,108,111,99, +97,108,32,102,117,110,99,116,105,111,110,32,114,101,99,116,95,103,101,116, +68,105,102,102,40,120,49,44,121,49,44,119,49,44,104,49,44,32,120,50, +44,121,50,44,119,50,44,104,50,41,13,10,32,32,32,32,114,101,116,117, +114,110,32,120,50,32,45,32,120,49,32,45,32,119,49,44,13,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,121,50,32,45,32, +121,49,32,45,32,104,49,44,13,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,119,49,32,43,32,119,50,44,13,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,104,49,32,43,32,104, +50,13,10,101,110,100,13,10,13,10,108,111,99,97,108,32,102,117,110,99, +116,105,111,110,32,114,101,99,116,95,99,111,110,116,97,105,110,115,80,111, +105,110,116,40,120,44,121,44,119,44,104,44,32,112,120,44,112,121,41,13, +10,32,32,32,32,114,101,116,117,114,110,32,112,120,32,45,32,120,32,62, +32,68,69,76,84,65,32,32,32,32,32,32,32,32,32,32,32,32,97,110, +100,32,112,121,32,45,32,121,32,62,32,68,69,76,84,65,32,97,110,100, +13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120, +32,43,32,119,32,45,32,112,120,32,62,32,68,69,76,84,65,32,32,32, +32,97,110,100,32,121,32,43,32,104,32,45,32,112,121,32,62,32,68,69, +76,84,65,13,10,101,110,100,13,10,13,10,108,111,99,97,108,32,102,117, +110,99,116,105,111,110,32,114,101,99,116,95,105,115,73,110,116,101,114,115, +101,99,116,105,110,103,40,120,49,44,121,49,44,119,49,44,104,49,44,32, +120,50,44,121,50,44,119,50,44,104,50,41,13,10,32,32,32,32,114,101, +116,117,114,110,32,120,49,32,60,32,120,50,43,119,50,32,97,110,100,32, +120,50,32,60,32,120,49,43,119,49,32,97,110,100,13,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,121,49,32,60,32,121,50, +43,104,50,32,97,110,100,32,121,50,32,60,32,121,49,43,104,49,13,10, +101,110,100,13,10,13,10,108,111,99,97,108,32,102,117,110,99,116,105,111, +110,32,114,101,99,116,95,103,101,116,83,113,117,97,114,101,68,105,115,116, +97,110,99,101,40,120,49,44,121,49,44,119,49,44,104,49,44,32,120,50, +44,121,50,44,119,50,44,104,50,41,13,10,32,32,32,32,108,111,99,97, +108,32,100,120,32,61,32,120,49,32,45,32,120,50,32,43,32,40,119,49, +32,45,32,119,50,41,47,50,13,10,32,32,32,32,108,111,99,97,108,32, +100,121,32,61,32,121,49,32,45,32,121,50,32,43,32,40,104,49,32,45, +32,104,50,41,47,50,13,10,32,32,32,32,114,101,116,117,114,110,32,100, +120,42,100,120,32,43,32,100,121,42,100,121,13,10,101,110,100,13,10,13, +10,108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,114,101,99,116, +95,100,101,116,101,99,116,67,111,108,108,105,115,105,111,110,40,120,49,44, +121,49,44,119,49,44,104,49,44,32,120,50,44,121,50,44,119,50,44,104, +50,44,32,103,111,97,108,88,44,32,103,111,97,108,89,41,13,10,32,32, +32,32,103,111,97,108,88,32,61,32,103,111,97,108,88,32,111,114,32,120, +49,13,10,32,32,32,32,103,111,97,108,89,32,61,32,103,111,97,108,89, +32,111,114,32,121,49,13,10,13,10,32,32,32,32,108,111,99,97,108,32, +100,120,44,32,100,121,32,32,32,32,32,32,32,32,32,32,32,32,61,32, +103,111,97,108,88,32,45,32,120,49,44,32,103,111,97,108,89,32,45,32, +121,49,13,10,32,32,32,32,108,111,99,97,108,32,120,44,121,44,119,44, +104,32,32,32,32,32,32,32,32,32,61,32,114,101,99,116,95,103,101,116, +68,105,102,102,40,120,49,44,121,49,44,119,49,44,104,49,44,32,120,50, +44,121,50,44,119,50,44,104,50,41,13,10,13,10,32,32,32,32,108,111, +99,97,108,32,111,118,101,114,108,97,112,115,44,32,116,105,44,32,110,120, +44,32,110,121,13,10,13,10,32,32,32,32,105,102,32,114,101,99,116,95, +99,111,110,116,97,105,110,115,80,111,105,110,116,40,120,44,121,44,119,44, +104,44,32,48,44,48,41,32,116,104,101,110,32,45,45,32,105,116,101,109, +32,119,97,115,32,105,110,116,101,114,115,101,99,116,105,110,103,32,111,116, +104,101,114,13,10,32,32,32,32,32,32,32,32,108,111,99,97,108,32,112, +120,44,32,112,121,32,32,32,32,32,32,32,32,61,32,114,101,99,116,95, +103,101,116,78,101,97,114,101,115,116,67,111,114,110,101,114,40,120,44,121, +44,119,44,104,44,32,48,44,32,48,41,13,10,32,32,32,32,32,32,32, +32,108,111,99,97,108,32,119,105,44,32,104,105,32,32,32,32,32,32,32, +32,61,32,109,105,110,40,119,49,44,32,97,98,115,40,112,120,41,41,44, +32,109,105,110,40,104,49,44,32,97,98,115,40,112,121,41,41,32,45,45, +32,97,114,101,97,32,111,102,32,105,110,116,101,114,115,101,99,116,105,111, +110,13,10,32,32,32,32,32,32,32,32,116,105,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,61,32,45,119,105,32,42,32,104,105,32,45,45,32,116,105,32,105,115, +32,116,104,101,32,110,101,103,97,116,105,118,101,32,97,114,101,97,32,111, +102,32,105,110,116,101,114,115,101,99,116,105,111,110,13,10,32,32,32,32, +32,32,32,32,111,118,101,114,108,97,112,115,32,61,32,116,114,117,101,13, +10,32,32,32,32,101,108,115,101,13,10,32,32,32,32,32,32,32,32,108, +111,99,97,108,32,116,105,49,44,116,105,50,44,110,120,49,44,110,121,49, +32,61,32,114,101,99,116,95,103,101,116,83,101,103,109,101,110,116,73,110, +116,101,114,115,101,99,116,105,111,110,73,110,100,105,99,101,115,40,120,44, +121,44,119,44,104,44,32,48,44,48,44,100,120,44,100,121,44,32,45,109, +97,116,104,46,104,117,103,101,44,32,109,97,116,104,46,104,117,103,101,41, +13,10,13,10,32,32,32,32,32,32,32,32,45,45,32,105,116,101,109,32, +116,117,110,110,101,108,115,32,105,110,116,111,32,111,116,104,101,114,13,10, +32,32,32,32,32,32,32,32,105,102,32,116,105,49,13,10,32,32,32,32, +32,32,32,32,97,110,100,32,116,105,49,32,60,32,49,13,10,32,32,32, +32,32,32,32,32,97,110,100,32,40,97,98,115,40,116,105,49,32,45,32, +116,105,50,41,32,62,61,32,68,69,76,84,65,41,32,45,45,32,115,112, +101,99,105,97,108,32,99,97,115,101,32,102,111,114,32,114,101,99,116,32, +103,111,105,110,103,32,116,104,114,111,117,103,104,32,97,110,111,116,104,101, +114,32,114,101,99,116,39,115,32,99,111,114,110,101,114,13,10,32,32,32, +32,32,32,32,32,97,110,100,32,40,48,32,60,32,116,105,49,32,43,32, +68,69,76,84,65,13,10,32,32,32,32,32,32,32,32,32,32,32,32,111, +114,32,48,32,61,61,32,116,105,49,32,97,110,100,32,116,105,50,32,62, +32,48,41,13,10,32,32,32,32,32,32,32,32,116,104,101,110,13,10,32, +32,32,32,32,32,32,32,32,32,32,32,116,105,44,32,110,120,44,32,110, +121,32,61,32,116,105,49,44,32,110,120,49,44,32,110,121,49,13,10,32, +32,32,32,32,32,32,32,32,32,32,32,111,118,101,114,108,97,112,115,32, +32,32,32,32,61,32,102,97,108,115,101,13,10,32,32,32,32,32,32,32, +32,101,110,100,13,10,32,32,32,32,101,110,100,13,10,13,10,32,32,32, +32,105,102,32,110,111,116,32,116,105,32,116,104,101,110,32,114,101,116,117, +114,110,32,101,110,100,13,10,13,10,32,32,32,32,108,111,99,97,108,32, +116,120,44,32,116,121,13,10,13,10,32,32,32,32,105,102,32,111,118,101, +114,108,97,112,115,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32, +105,102,32,100,120,32,61,61,32,48,32,97,110,100,32,100,121,32,61,61, +32,48,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,32,32,32, +32,45,45,32,105,110,116,101,114,115,101,99,116,105,110,103,32,97,110,100, +32,110,111,116,32,109,111,118,105,110,103,32,45,32,117,115,101,32,109,105, +110,105,109,117,109,32,100,105,115,112,108,97,99,101,109,101,110,116,32,118, +101,99,116,111,114,13,10,32,32,32,32,32,32,32,32,32,32,32,32,108, +111,99,97,108,32,112,120,44,32,112,121,32,61,32,114,101,99,116,95,103, +101,116,78,101,97,114,101,115,116,67,111,114,110,101,114,40,120,44,121,44, +119,44,104,44,32,48,44,48,41,13,10,32,32,32,32,32,32,32,32,32, +32,32,32,105,102,32,97,98,115,40,112,120,41,32,60,32,97,98,115,40, +112,121,41,32,116,104,101,110,32,112,121,32,61,32,48,32,101,108,115,101, +32,112,120,32,61,32,48,32,101,110,100,13,10,32,32,32,32,32,32,32, +32,32,32,32,32,110,120,44,32,110,121,32,61,32,115,105,103,110,40,112, +120,41,44,32,115,105,103,110,40,112,121,41,13,10,32,32,32,32,32,32, +32,32,32,32,32,32,116,120,44,32,116,121,32,61,32,120,49,32,43,32, +112,120,44,32,121,49,32,43,32,112,121,13,10,32,32,32,32,32,32,32, +32,101,108,115,101,13,10,32,32,32,32,32,32,32,32,32,32,32,32,45, +45,32,105,110,116,101,114,115,101,99,116,105,110,103,32,97,110,100,32,109, +111,118,105,110,103,32,45,32,109,111,118,101,32,105,110,32,116,104,101,32, +111,112,112,111,115,105,116,101,32,100,105,114,101,99,116,105,111,110,13,10, +32,32,32,32,32,32,32,32,32,32,32,32,108,111,99,97,108,32,116,105, +49,44,32,95,13,10,32,32,32,32,32,32,32,32,32,32,32,32,116,105, +49,44,95,44,110,120,44,110,121,32,61,32,114,101,99,116,95,103,101,116, +83,101,103,109,101,110,116,73,110,116,101,114,115,101,99,116,105,111,110,73, +110,100,105,99,101,115,40,120,44,121,44,119,44,104,44,32,48,44,48,44, +100,120,44,100,121,44,32,45,109,97,116,104,46,104,117,103,101,44,32,49, +41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,110,111, +116,32,116,105,49,32,116,104,101,110,32,114,101,116,117,114,110,32,101,110, +100,13,10,32,32,32,32,32,32,32,32,32,32,32,32,116,120,44,32,116, +121,32,61,32,120,49,32,43,32,100,120,32,42,32,116,105,49,44,32,121, +49,32,43,32,100,121,32,42,32,116,105,49,13,10,32,32,32,32,32,32, +32,32,101,110,100,13,10,32,32,32,32,101,108,115,101,32,45,45,32,116, +117,110,110,101,108,13,10,32,32,32,32,32,32,32,32,116,120,44,32,116, +121,32,61,32,120,49,32,43,32,100,120,32,42,32,116,105,44,32,121,49, +32,43,32,100,121,32,42,32,116,105,13,10,32,32,32,32,101,110,100,13, +10,13,10,32,32,32,32,114,101,116,117,114,110,32,123,13,10,32,32,32, +32,32,32,32,32,111,118,101,114,108,97,112,115,32,32,61,32,111,118,101, +114,108,97,112,115,44,13,10,32,32,32,32,32,32,32,32,116,105,32,32, +32,32,32,32,32,32,61,32,116,105,44,13,10,32,32,32,32,32,32,32, +32,109,111,118,101,32,32,32,32,32,32,61,32,123,120,32,61,32,100,120, +44,32,121,32,61,32,100,121,125,44,13,10,32,32,32,32,32,32,32,32, +110,111,114,109,97,108,32,32,32,32,61,32,123,120,32,61,32,110,120,44, +32,121,32,61,32,110,121,125,44,13,10,32,32,32,32,32,32,32,32,116, +111,117,99,104,32,32,32,32,32,61,32,123,120,32,61,32,116,120,44,32, +121,32,61,32,116,121,125,44,13,10,32,32,32,32,32,32,32,32,105,116, +101,109,82,101,99,116,32,32,61,32,123,120,32,61,32,120,49,44,32,121, +32,61,32,121,49,44,32,119,32,61,32,119,49,44,32,104,32,61,32,104, +49,125,44,13,10,32,32,32,32,32,32,32,32,111,116,104,101,114,82,101, +99,116,32,61,32,123,120,32,61,32,120,50,44,32,121,32,61,32,121,50, +44,32,119,32,61,32,119,50,44,32,104,32,61,32,104,50,125,13,10,32, +32,32,32,125,13,10,101,110,100,13,10,13,10,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,13,10,45,45,32, +71,114,105,100,32,102,117,110,99,116,105,111,110,115,13,10,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,13,10, +13,10,108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,103,114,105, +100,95,116,111,87,111,114,108,100,40,99,101,108,108,83,105,122,101,44,32, +99,120,44,32,99,121,41,13,10,32,32,32,32,114,101,116,117,114,110,32, +40,99,120,32,45,32,49,41,42,99,101,108,108,83,105,122,101,44,32,40, +99,121,45,49,41,42,99,101,108,108,83,105,122,101,13,10,101,110,100,13, +10,13,10,108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,103,114, +105,100,95,116,111,67,101,108,108,40,99,101,108,108,83,105,122,101,44,32, +120,44,32,121,41,13,10,32,32,32,32,114,101,116,117,114,110,32,102,108, +111,111,114,40,120,32,47,32,99,101,108,108,83,105,122,101,41,32,43,32, +49,44,32,102,108,111,111,114,40,121,32,47,32,99,101,108,108,83,105,122, +101,41,32,43,32,49,13,10,101,110,100,13,10,13,10,45,45,32,103,114, +105,100,95,116,114,97,118,101,114,115,101,42,32,102,117,110,99,116,105,111, +110,115,32,97,114,101,32,98,97,115,101,100,32,111,110,32,34,65,32,70, +97,115,116,32,86,111,120,101,108,32,84,114,97,118,101,114,115,97,108,32, +65,108,103,111,114,105,116,104,109,32,102,111,114,32,82,97,121,32,84,114, +97,99,105,110,103,34,44,13,10,45,45,32,98,121,32,74,111,104,110,32, +65,109,97,110,105,100,101,115,32,97,110,100,32,65,110,100,114,101,119,32, +87,111,111,32,45,32,104,116,116,112,58,47,47,119,119,119,46,99,115,101, +46,121,111,114,107,117,46,99,97,47,126,97,109,97,110,97,47,114,101,115, +101,97,114,99,104,47,103,114,105,100,46,112,100,102,13,10,45,45,32,73, +116,32,104,97,115,32,98,101,101,110,32,109,111,100,105,102,105,101,100,32, +116,111,32,105,110,99,108,117,100,101,32,98,111,116,104,32,99,101,108,108, +115,32,119,104,101,110,32,116,104,101,32,114,97,121,32,34,116,111,117,99, +104,101,115,32,97,32,103,114,105,100,32,99,111,114,110,101,114,34,44,13, +10,45,45,32,97,110,100,32,119,105,116,104,32,97,32,100,105,102,102,101, +114,101,110,116,32,101,120,105,116,32,99,111,110,100,105,116,105,111,110,13, +10,13,10,108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,103,114, +105,100,95,116,114,97,118,101,114,115,101,95,105,110,105,116,83,116,101,112, +40,99,101,108,108,83,105,122,101,44,32,99,116,44,32,116,49,44,32,116, +50,41,13,10,32,32,32,32,108,111,99,97,108,32,118,32,61,32,116,50, +32,45,32,116,49,13,10,32,32,32,32,105,102,32,32,32,32,32,32,32, +32,32,118,32,62,32,48,32,116,104,101,110,13,10,32,32,32,32,32,32, +32,32,114,101,116,117,114,110,32,32,32,32,49,44,32,32,32,32,99,101, +108,108,83,105,122,101,32,47,32,118,44,32,40,40,99,116,32,43,32,118, +41,32,42,32,99,101,108,108,83,105,122,101,32,45,32,116,49,41,32,47, +32,118,13,10,32,32,32,32,101,108,115,101,105,102,32,118,32,60,32,48, +32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,114,101,116,117,114, +110,32,45,49,44,32,45,99,101,108,108,83,105,122,101,32,47,32,118,44, +32,40,40,99,116,32,43,32,118,32,45,32,49,41,32,42,32,99,101,108, +108,83,105,122,101,32,45,32,116,49,41,32,47,32,118,13,10,32,32,32, +32,101,108,115,101,13,10,32,32,32,32,32,32,32,32,114,101,116,117,114, +110,32,48,44,32,109,97,116,104,46,104,117,103,101,44,32,109,97,116,104, +46,104,117,103,101,13,10,32,32,32,32,101,110,100,13,10,101,110,100,13, +10,13,10,108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,103,114, +105,100,95,116,114,97,118,101,114,115,101,40,99,101,108,108,83,105,122,101, +44,32,120,49,44,121,49,44,120,50,44,121,50,44,32,102,41,13,10,32, +32,32,32,108,111,99,97,108,32,99,120,49,44,99,121,49,32,32,32,32, +32,32,32,61,32,103,114,105,100,95,116,111,67,101,108,108,40,99,101,108, +108,83,105,122,101,44,32,120,49,44,121,49,41,13,10,32,32,32,32,108, +111,99,97,108,32,99,120,50,44,99,121,50,32,32,32,32,32,32,32,61, +32,103,114,105,100,95,116,111,67,101,108,108,40,99,101,108,108,83,105,122, +101,44,32,120,50,44,121,50,41,13,10,32,32,32,32,108,111,99,97,108, +32,115,116,101,112,88,44,32,100,120,44,32,116,120,32,61,32,103,114,105, +100,95,116,114,97,118,101,114,115,101,95,105,110,105,116,83,116,101,112,40, +99,101,108,108,83,105,122,101,44,32,99,120,49,44,32,120,49,44,32,120, +50,41,13,10,32,32,32,32,108,111,99,97,108,32,115,116,101,112,89,44, +32,100,121,44,32,116,121,32,61,32,103,114,105,100,95,116,114,97,118,101, +114,115,101,95,105,110,105,116,83,116,101,112,40,99,101,108,108,83,105,122, +101,44,32,99,121,49,44,32,121,49,44,32,121,50,41,13,10,32,32,32, +32,108,111,99,97,108,32,99,120,44,99,121,32,32,32,32,32,32,32,32, +32,61,32,99,120,49,44,99,121,49,13,10,13,10,32,32,32,32,102,40, +99,120,44,32,99,121,41,13,10,13,10,32,32,32,32,45,45,32,84,104, +101,32,100,101,102,97,117,108,116,32,105,109,112,108,101,109,101,110,116,97, +116,105,111,110,32,104,97,100,32,97,110,32,105,110,102,105,110,105,116,101, +32,108,111,111,112,32,112,114,111,98,108,101,109,32,119,104,101,110,13,10, +32,32,32,32,45,45,32,97,112,112,114,111,97,99,104,105,110,103,32,116, +104,101,32,108,97,115,116,32,99,101,108,108,32,105,110,32,115,111,109,101, +32,111,99,99,97,115,115,105,111,110,115,46,32,87,101,32,102,105,110,105, +115,104,32,105,116,101,114,97,116,105,110,103,13,10,32,32,32,32,45,45, +32,119,104,101,110,32,119,101,32,97,114,101,32,42,110,101,120,116,42,32, +116,111,32,116,104,101,32,108,97,115,116,32,99,101,108,108,13,10,32,32, +32,32,119,104,105,108,101,32,97,98,115,40,99,120,32,45,32,99,120,50, +41,32,43,32,97,98,115,40,99,121,32,45,32,99,121,50,41,32,62,32, +49,32,100,111,13,10,32,32,32,32,32,32,32,32,105,102,32,116,120,32, +60,32,116,121,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,32, +32,32,32,116,120,44,32,99,120,32,61,32,116,120,32,43,32,100,120,44, +32,99,120,32,43,32,115,116,101,112,88,13,10,32,32,32,32,32,32,32, +32,32,32,32,32,102,40,99,120,44,32,99,121,41,13,10,32,32,32,32, +32,32,32,32,101,108,115,101,13,10,32,32,32,32,32,32,32,32,32,32, +32,32,45,45,32,65,100,100,105,116,105,111,110,58,32,105,110,99,108,117, +100,101,32,98,111,116,104,32,99,101,108,108,115,32,119,104,101,110,32,103, +111,105,110,103,32,116,104,114,111,117,103,104,32,99,111,114,110,101,114,115, +13,10,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,116,120,32, +61,61,32,116,121,32,116,104,101,110,32,102,40,99,120,32,43,32,115,116, +101,112,88,44,32,99,121,41,32,101,110,100,13,10,32,32,32,32,32,32, +32,32,32,32,32,32,116,121,44,32,99,121,32,61,32,116,121,32,43,32, +100,121,44,32,99,121,32,43,32,115,116,101,112,89,13,10,32,32,32,32, +32,32,32,32,32,32,32,32,102,40,99,120,44,32,99,121,41,13,10,32, +32,32,32,32,32,32,32,101,110,100,13,10,32,32,32,32,101,110,100,13, +10,13,10,32,32,32,32,45,45,32,73,102,32,119,101,32,104,97,118,101, +32,110,111,116,32,97,114,114,105,118,101,100,32,116,111,32,116,104,101,32, +108,97,115,116,32,99,101,108,108,44,32,117,115,101,32,105,116,13,10,32, +32,32,32,105,102,32,99,120,32,126,61,32,99,120,50,32,111,114,32,99, +121,32,126,61,32,99,121,50,32,116,104,101,110,32,102,40,99,120,50,44, +32,99,121,50,41,32,101,110,100,13,10,13,10,101,110,100,13,10,13,10, +108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,103,114,105,100,95, +116,111,67,101,108,108,82,101,99,116,40,99,101,108,108,83,105,122,101,44, +32,120,44,121,44,119,44,104,41,13,10,32,32,32,32,108,111,99,97,108, +32,99,120,44,99,121,32,61,32,103,114,105,100,95,116,111,67,101,108,108, +40,99,101,108,108,83,105,122,101,44,32,120,44,32,121,41,13,10,32,32, +32,32,108,111,99,97,108,32,99,114,44,99,98,32,61,32,99,101,105,108, +40,40,120,43,119,41,32,47,32,99,101,108,108,83,105,122,101,41,44,32, +99,101,105,108,40,40,121,43,104,41,32,47,32,99,101,108,108,83,105,122, +101,41,13,10,32,32,32,32,114,101,116,117,114,110,32,99,120,44,32,99, +121,44,32,99,114,32,45,32,99,120,32,43,32,49,44,32,99,98,32,45, +32,99,121,32,43,32,49,13,10,101,110,100,13,10,13,10,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,13,10, +45,45,32,82,101,115,112,111,110,115,101,115,13,10,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,13,10,13,10, +108,111,99,97,108,32,116,111,117,99,104,32,61,32,102,117,110,99,116,105, +111,110,40,119,111,114,108,100,44,32,99,111,108,44,32,120,44,121,44,119, +44,104,44,32,103,111,97,108,88,44,32,103,111,97,108,89,44,32,102,105, +108,116,101,114,41,13,10,32,32,32,32,114,101,116,117,114,110,32,99,111, +108,46,116,111,117,99,104,46,120,44,32,99,111,108,46,116,111,117,99,104, +46,121,44,32,123,125,44,32,48,13,10,101,110,100,13,10,13,10,108,111, +99,97,108,32,99,114,111,115,115,32,61,32,102,117,110,99,116,105,111,110, +40,119,111,114,108,100,44,32,99,111,108,44,32,120,44,121,44,119,44,104, +44,32,103,111,97,108,88,44,32,103,111,97,108,89,44,32,102,105,108,116, +101,114,41,13,10,32,32,32,32,108,111,99,97,108,32,99,111,108,115,44, +32,108,101,110,32,61,32,119,111,114,108,100,58,112,114,111,106,101,99,116, +40,99,111,108,46,105,116,101,109,44,32,120,44,121,44,119,44,104,44,32, +103,111,97,108,88,44,32,103,111,97,108,89,44,32,102,105,108,116,101,114, +41,13,10,32,32,32,32,114,101,116,117,114,110,32,103,111,97,108,88,44, +32,103,111,97,108,89,44,32,99,111,108,115,44,32,108,101,110,13,10,101, +110,100,13,10,13,10,108,111,99,97,108,32,115,108,105,100,101,32,61,32, +102,117,110,99,116,105,111,110,40,119,111,114,108,100,44,32,99,111,108,44, +32,120,44,121,44,119,44,104,44,32,103,111,97,108,88,44,32,103,111,97, +108,89,44,32,102,105,108,116,101,114,41,13,10,32,32,32,32,103,111,97, +108,88,32,61,32,103,111,97,108,88,32,111,114,32,120,13,10,32,32,32, +32,103,111,97,108,89,32,61,32,103,111,97,108,89,32,111,114,32,121,13, +10,13,10,32,32,32,32,108,111,99,97,108,32,116,99,104,44,32,109,111, +118,101,32,32,32,32,61,32,99,111,108,46,116,111,117,99,104,44,32,99, +111,108,46,109,111,118,101,13,10,32,32,32,32,105,102,32,109,111,118,101, +46,120,32,126,61,32,48,32,111,114,32,109,111,118,101,46,121,32,126,61, +32,48,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,105,102,32, +99,111,108,46,110,111,114,109,97,108,46,120,32,126,61,32,48,32,116,104, +101,110,13,10,32,32,32,32,32,32,32,32,32,32,32,32,103,111,97,108, +88,32,61,32,116,99,104,46,120,13,10,32,32,32,32,32,32,32,32,101, +108,115,101,13,10,32,32,32,32,32,32,32,32,32,32,32,32,103,111,97, +108,89,32,61,32,116,99,104,46,121,13,10,32,32,32,32,32,32,32,32, +101,110,100,13,10,32,32,32,32,101,110,100,13,10,13,10,32,32,32,32, +99,111,108,46,115,108,105,100,101,32,61,32,123,120,32,61,32,103,111,97, +108,88,44,32,121,32,61,32,103,111,97,108,89,125,13,10,13,10,32,32, +32,32,120,44,121,32,61,32,116,99,104,46,120,44,32,116,99,104,46,121, +13,10,32,32,32,32,108,111,99,97,108,32,99,111,108,115,44,32,108,101, +110,32,32,32,32,61,32,119,111,114,108,100,58,112,114,111,106,101,99,116, +40,99,111,108,46,105,116,101,109,44,32,120,44,121,44,119,44,104,44,32, +103,111,97,108,88,44,32,103,111,97,108,89,44,32,102,105,108,116,101,114, +41,13,10,32,32,32,32,114,101,116,117,114,110,32,103,111,97,108,88,44, +32,103,111,97,108,89,44,32,99,111,108,115,44,32,108,101,110,13,10,101, +110,100,13,10,13,10,108,111,99,97,108,32,98,111,117,110,99,101,32,61, +32,102,117,110,99,116,105,111,110,40,119,111,114,108,100,44,32,99,111,108, +44,32,120,44,121,44,119,44,104,44,32,103,111,97,108,88,44,32,103,111, +97,108,89,44,32,102,105,108,116,101,114,41,13,10,32,32,32,32,103,111, +97,108,88,32,61,32,103,111,97,108,88,32,111,114,32,120,13,10,32,32, +32,32,103,111,97,108,89,32,61,32,103,111,97,108,89,32,111,114,32,121, +13,10,13,10,32,32,32,32,108,111,99,97,108,32,116,99,104,44,32,109, +111,118,101,32,61,32,99,111,108,46,116,111,117,99,104,44,32,99,111,108, +46,109,111,118,101,13,10,32,32,32,32,108,111,99,97,108,32,116,120,44, +32,116,121,32,61,32,116,99,104,46,120,44,32,116,99,104,46,121,13,10, +13,10,32,32,32,32,108,111,99,97,108,32,98,120,44,32,98,121,32,61, +32,116,120,44,32,116,121,13,10,13,10,32,32,32,32,105,102,32,109,111, +118,101,46,120,32,126,61,32,48,32,111,114,32,109,111,118,101,46,121,32, +126,61,32,48,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,108, +111,99,97,108,32,98,110,120,44,32,98,110,121,32,61,32,103,111,97,108, +88,32,45,32,116,120,44,32,103,111,97,108,89,32,45,32,116,121,13,10, +32,32,32,32,32,32,32,32,105,102,32,99,111,108,46,110,111,114,109,97, +108,46,120,32,61,61,32,48,32,116,104,101,110,32,98,110,121,32,61,32, +45,98,110,121,32,101,108,115,101,32,98,110,120,32,61,32,45,98,110,120, +32,101,110,100,13,10,32,32,32,32,32,32,32,32,98,120,44,32,98,121, +32,61,32,116,120,32,43,32,98,110,120,44,32,116,121,32,43,32,98,110, +121,13,10,32,32,32,32,101,110,100,13,10,13,10,32,32,32,32,99,111, +108,46,98,111,117,110,99,101,32,32,32,32,32,61,32,123,120,32,61,32, +98,120,44,32,32,32,32,121,32,61,32,98,121,125,13,10,32,32,32,32, +120,44,121,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,61,32,116,99,104,46,120,44,32,116,99,104,46,121,13,10,32, +32,32,32,103,111,97,108,88,44,32,103,111,97,108,89,32,61,32,98,120, +44,32,98,121,13,10,13,10,32,32,32,32,108,111,99,97,108,32,99,111, +108,115,44,32,108,101,110,32,32,32,32,32,32,32,32,61,32,119,111,114, +108,100,58,112,114,111,106,101,99,116,40,99,111,108,46,105,116,101,109,44, +32,120,44,121,44,119,44,104,44,32,103,111,97,108,88,44,32,103,111,97, +108,89,44,32,102,105,108,116,101,114,41,13,10,32,32,32,32,114,101,116, +117,114,110,32,103,111,97,108,88,44,32,103,111,97,108,89,44,32,99,111, +108,115,44,32,108,101,110,13,10,101,110,100,13,10,13,10,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,13,10, +45,45,32,87,111,114,108,100,13,10,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,13,10,13,10,108,111,99,97, +108,32,87,111,114,108,100,32,61,32,123,125,13,10,108,111,99,97,108,32, +87,111,114,108,100,95,109,116,32,61,32,123,95,95,105,110,100,101,120,32, +61,32,87,111,114,108,100,125,13,10,13,10,45,45,32,80,114,105,118,97, +116,101,32,102,117,110,99,116,105,111,110,115,32,97,110,100,32,109,101,116, +104,111,100,115,13,10,13,10,108,111,99,97,108,32,102,117,110,99,116,105, +111,110,32,115,111,114,116,66,121,87,101,105,103,104,116,40,97,44,98,41, +32,114,101,116,117,114,110,32,97,46,119,101,105,103,104,116,32,60,32,98, +46,119,101,105,103,104,116,32,101,110,100,13,10,13,10,108,111,99,97,108, +32,102,117,110,99,116,105,111,110,32,115,111,114,116,66,121,84,105,65,110, +100,68,105,115,116,97,110,99,101,40,97,44,98,41,13,10,32,32,32,32, +105,102,32,97,46,116,105,32,61,61,32,98,46,116,105,32,116,104,101,110, +13,10,32,32,32,32,32,32,32,32,108,111,99,97,108,32,105,114,44,32, +97,114,44,32,98,114,32,61,32,97,46,105,116,101,109,82,101,99,116,44, +32,97,46,111,116,104,101,114,82,101,99,116,44,32,98,46,111,116,104,101, +114,82,101,99,116,13,10,32,32,32,32,32,32,32,32,108,111,99,97,108, +32,97,100,32,61,32,114,101,99,116,95,103,101,116,83,113,117,97,114,101, +68,105,115,116,97,110,99,101,40,105,114,46,120,44,105,114,46,121,44,105, +114,46,119,44,105,114,46,104,44,32,97,114,46,120,44,97,114,46,121,44, +97,114,46,119,44,97,114,46,104,41,13,10,32,32,32,32,32,32,32,32, +108,111,99,97,108,32,98,100,32,61,32,114,101,99,116,95,103,101,116,83, +113,117,97,114,101,68,105,115,116,97,110,99,101,40,105,114,46,120,44,105, +114,46,121,44,105,114,46,119,44,105,114,46,104,44,32,98,114,46,120,44, +98,114,46,121,44,98,114,46,119,44,98,114,46,104,41,13,10,32,32,32, +32,32,32,32,32,114,101,116,117,114,110,32,97,100,32,60,32,98,100,13, +10,32,32,32,32,101,110,100,13,10,32,32,32,32,114,101,116,117,114,110, +32,97,46,116,105,32,60,32,98,46,116,105,13,10,101,110,100,13,10,13, +10,108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,97,100,100,73, +116,101,109,84,111,67,101,108,108,40,115,101,108,102,44,32,105,116,101,109, +44,32,99,120,44,32,99,121,41,13,10,32,32,32,32,115,101,108,102,46, +114,111,119,115,91,99,121,93,32,61,32,115,101,108,102,46,114,111,119,115, +91,99,121,93,32,111,114,32,115,101,116,109,101,116,97,116,97,98,108,101, +40,123,125,44,32,123,95,95,109,111,100,101,32,61,32,39,118,39,125,41, +13,10,32,32,32,32,108,111,99,97,108,32,114,111,119,32,61,32,115,101, +108,102,46,114,111,119,115,91,99,121,93,13,10,32,32,32,32,114,111,119, +91,99,120,93,32,61,32,114,111,119,91,99,120,93,32,111,114,32,123,105, +116,101,109,67,111,117,110,116,32,61,32,48,44,32,120,32,61,32,99,120, +44,32,121,32,61,32,99,121,44,32,105,116,101,109,115,32,61,32,115,101, +116,109,101,116,97,116,97,98,108,101,40,123,125,44,32,123,95,95,109,111, +100,101,32,61,32,39,107,39,125,41,125,13,10,32,32,32,32,108,111,99, +97,108,32,99,101,108,108,32,61,32,114,111,119,91,99,120,93,13,10,32, +32,32,32,115,101,108,102,46,110,111,110,69,109,112,116,121,67,101,108,108, +115,91,99,101,108,108,93,32,61,32,116,114,117,101,13,10,32,32,32,32, +105,102,32,110,111,116,32,99,101,108,108,46,105,116,101,109,115,91,105,116, +101,109,93,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,99,101, +108,108,46,105,116,101,109,115,91,105,116,101,109,93,32,61,32,116,114,117, +101,13,10,32,32,32,32,32,32,32,32,99,101,108,108,46,105,116,101,109, +67,111,117,110,116,32,61,32,99,101,108,108,46,105,116,101,109,67,111,117, +110,116,32,43,32,49,13,10,32,32,32,32,101,110,100,13,10,101,110,100, +13,10,13,10,108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,114, +101,109,111,118,101,73,116,101,109,70,114,111,109,67,101,108,108,40,115,101, +108,102,44,32,105,116,101,109,44,32,99,120,44,32,99,121,41,13,10,32, +32,32,32,108,111,99,97,108,32,114,111,119,32,61,32,115,101,108,102,46, +114,111,119,115,91,99,121,93,13,10,32,32,32,32,105,102,32,110,111,116, +32,114,111,119,32,111,114,32,110,111,116,32,114,111,119,91,99,120,93,32, +111,114,32,110,111,116,32,114,111,119,91,99,120,93,46,105,116,101,109,115, +91,105,116,101,109,93,32,116,104,101,110,32,114,101,116,117,114,110,32,102, +97,108,115,101,32,101,110,100,13,10,13,10,32,32,32,32,108,111,99,97, +108,32,99,101,108,108,32,61,32,114,111,119,91,99,120,93,13,10,32,32, +32,32,99,101,108,108,46,105,116,101,109,115,91,105,116,101,109,93,32,61, +32,110,105,108,13,10,32,32,32,32,99,101,108,108,46,105,116,101,109,67, +111,117,110,116,32,61,32,99,101,108,108,46,105,116,101,109,67,111,117,110, +116,32,45,32,49,13,10,32,32,32,32,105,102,32,99,101,108,108,46,105, +116,101,109,67,111,117,110,116,32,61,61,32,48,32,116,104,101,110,13,10, +32,32,32,32,32,32,32,32,115,101,108,102,46,110,111,110,69,109,112,116, +121,67,101,108,108,115,91,99,101,108,108,93,32,61,32,110,105,108,13,10, +32,32,32,32,101,110,100,13,10,32,32,32,32,114,101,116,117,114,110,32, +116,114,117,101,13,10,101,110,100,13,10,13,10,108,111,99,97,108,32,102, +117,110,99,116,105,111,110,32,103,101,116,68,105,99,116,73,116,101,109,115, +73,110,67,101,108,108,82,101,99,116,40,115,101,108,102,44,32,99,108,44, +99,116,44,99,119,44,99,104,41,13,10,32,32,32,32,108,111,99,97,108, +32,105,116,101,109,115,95,100,105,99,116,32,61,32,123,125,13,10,32,32, +32,32,102,111,114,32,99,121,61,99,116,44,99,116,43,99,104,45,49,32, +100,111,13,10,32,32,32,32,32,32,32,32,108,111,99,97,108,32,114,111, +119,32,61,32,115,101,108,102,46,114,111,119,115,91,99,121,93,13,10,32, +32,32,32,32,32,32,32,105,102,32,114,111,119,32,116,104,101,110,13,10, +32,32,32,32,32,32,32,32,32,32,32,32,102,111,114,32,99,120,61,99, +108,44,99,108,43,99,119,45,49,32,100,111,13,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,108,111,99,97,108,32,99,101,108,108, +32,61,32,114,111,119,91,99,120,93,13,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,105,102,32,99,101,108,108,32,97,110,100,32, +99,101,108,108,46,105,116,101,109,67,111,117,110,116,32,62,32,48,32,116, +104,101,110,32,45,45,32,110,111,32,99,101,108,108,46,105,116,101,109,67, +111,117,110,116,32,62,32,49,32,98,101,99,97,117,115,101,32,116,117,110, +110,101,108,105,110,103,13,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,102,111,114,32,105,116,101,109,44,95,32,105, +110,32,112,97,105,114,115,40,99,101,108,108,46,105,116,101,109,115,41,32, +100,111,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,105,116,101,109,115,95,100,105,99,116,91,105, +116,101,109,93,32,61,32,116,114,117,101,13,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,101,110,100,13,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,101,110,100,13,10,32, +32,32,32,32,32,32,32,32,32,32,32,101,110,100,13,10,32,32,32,32, +32,32,32,32,101,110,100,13,10,32,32,32,32,101,110,100,13,10,13,10, +32,32,32,32,114,101,116,117,114,110,32,105,116,101,109,115,95,100,105,99, +116,13,10,101,110,100,13,10,13,10,108,111,99,97,108,32,102,117,110,99, +116,105,111,110,32,103,101,116,67,101,108,108,115,84,111,117,99,104,101,100, +66,121,83,101,103,109,101,110,116,40,115,101,108,102,44,32,120,49,44,121, +49,44,120,50,44,121,50,41,13,10,13,10,32,32,32,32,108,111,99,97, +108,32,99,101,108,108,115,44,32,99,101,108,108,115,76,101,110,44,32,118, +105,115,105,116,101,100,32,61,32,123,125,44,32,48,44,32,123,125,13,10, +13,10,32,32,32,32,103,114,105,100,95,116,114,97,118,101,114,115,101,40, +115,101,108,102,46,99,101,108,108,83,105,122,101,44,32,120,49,44,121,49, +44,120,50,44,121,50,44,32,102,117,110,99,116,105,111,110,40,99,120,44, +32,99,121,41,13,10,32,32,32,32,32,32,32,32,108,111,99,97,108,32, +114,111,119,32,32,32,32,61,32,115,101,108,102,46,114,111,119,115,91,99, +121,93,13,10,32,32,32,32,32,32,32,32,105,102,32,110,111,116,32,114, +111,119,32,116,104,101,110,32,114,101,116,117,114,110,32,101,110,100,13,10, +32,32,32,32,32,32,32,32,108,111,99,97,108,32,99,101,108,108,32,61, +32,114,111,119,91,99,120,93,13,10,32,32,32,32,32,32,32,32,105,102, +32,110,111,116,32,99,101,108,108,32,111,114,32,118,105,115,105,116,101,100, +91,99,101,108,108,93,32,116,104,101,110,32,114,101,116,117,114,110,32,101, +110,100,13,10,13,10,32,32,32,32,32,32,32,32,118,105,115,105,116,101, +100,91,99,101,108,108,93,32,61,32,116,114,117,101,13,10,32,32,32,32, +32,32,32,32,99,101,108,108,115,76,101,110,32,61,32,99,101,108,108,115, +76,101,110,32,43,32,49,13,10,32,32,32,32,32,32,32,32,99,101,108, +108,115,91,99,101,108,108,115,76,101,110,93,32,61,32,99,101,108,108,13, +10,32,32,32,32,101,110,100,41,13,10,13,10,32,32,32,32,114,101,116, +117,114,110,32,99,101,108,108,115,44,32,99,101,108,108,115,76,101,110,13, +10,101,110,100,13,10,13,10,108,111,99,97,108,32,102,117,110,99,116,105, +111,110,32,103,101,116,73,110,102,111,65,98,111,117,116,73,116,101,109,115, +84,111,117,99,104,101,100,66,121,83,101,103,109,101,110,116,40,115,101,108, +102,44,32,120,49,44,121,49,44,32,120,50,44,121,50,44,32,102,105,108, +116,101,114,41,13,10,32,32,32,32,108,111,99,97,108,32,99,101,108,108, +115,44,32,108,101,110,32,61,32,103,101,116,67,101,108,108,115,84,111,117, +99,104,101,100,66,121,83,101,103,109,101,110,116,40,115,101,108,102,44,32, +120,49,44,121,49,44,120,50,44,121,50,41,13,10,32,32,32,32,108,111, +99,97,108,32,99,101,108,108,44,32,114,101,99,116,44,32,108,44,116,44, +119,44,104,44,32,116,105,49,44,116,105,50,44,32,116,105,105,48,44,116, +105,105,49,13,10,32,32,32,32,108,111,99,97,108,32,118,105,115,105,116, +101,100,44,32,105,116,101,109,73,110,102,111,44,32,105,116,101,109,73,110, +102,111,76,101,110,32,61,32,123,125,44,123,125,44,48,13,10,32,32,32, +32,102,111,114,32,105,61,49,44,108,101,110,32,100,111,13,10,32,32,32, +32,32,32,32,32,99,101,108,108,32,61,32,99,101,108,108,115,91,105,93, +13,10,32,32,32,32,32,32,32,32,102,111,114,32,105,116,101,109,32,105, +110,32,112,97,105,114,115,40,99,101,108,108,46,105,116,101,109,115,41,32, +100,111,13,10,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,110, +111,116,32,118,105,115,105,116,101,100,91,105,116,101,109,93,32,116,104,101, +110,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,118, +105,115,105,116,101,100,91,105,116,101,109,93,32,32,32,32,61,32,116,114, +117,101,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +105,102,32,40,110,111,116,32,102,105,108,116,101,114,32,111,114,32,102,105, +108,116,101,114,40,105,116,101,109,41,41,32,116,104,101,110,13,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,114,101, +99,116,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,61,32,115,101,108,102,46,114,101,99,116,115,91,105,116,101,109, +93,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,108,44,116,44,119,44,104,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,61,32,114,101,99,116,46,120,44,114,101,99,116,46, +121,44,114,101,99,116,46,119,44,114,101,99,116,46,104,13,10,13,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,116, +105,49,44,116,105,50,32,61,32,114,101,99,116,95,103,101,116,83,101,103, +109,101,110,116,73,110,116,101,114,115,101,99,116,105,111,110,73,110,100,105, +99,101,115,40,108,44,116,44,119,44,104,44,32,120,49,44,121,49,44,32, +120,50,44,121,50,44,32,48,44,32,49,41,13,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,116,105,49, +32,97,110,100,32,40,40,48,32,60,32,116,105,49,32,97,110,100,32,116, +105,49,32,60,32,49,41,32,111,114,32,40,48,32,60,32,116,105,50,32, +97,110,100,32,116,105,50,32,60,32,49,41,41,32,116,104,101,110,13,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,45,45,32,116,104,101,32,115,111,114,116,105,110,103,32,105, +115,32,97,99,99,111,114,100,105,110,103,32,116,111,32,116,104,101,32,116, +32,111,102,32,97,110,32,105,110,102,105,110,105,116,101,32,108,105,110,101, +44,32,110,111,116,32,116,104,101,32,115,101,103,109,101,110,116,13,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,116,105,105,48,44,116,105,105,49,32,32,32,32,32,32,32,32, +61,32,114,101,99,116,95,103,101,116,83,101,103,109,101,110,116,73,110,116, +101,114,115,101,99,116,105,111,110,73,110,100,105,99,101,115,40,108,44,116, +44,119,44,104,44,32,120,49,44,121,49,44,32,120,50,44,121,50,44,32, +45,109,97,116,104,46,104,117,103,101,44,32,109,97,116,104,46,104,117,103, +101,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,105,116,101,109,73,110,102,111,76,101,110,32, +32,32,32,61,32,105,116,101,109,73,110,102,111,76,101,110,32,43,32,49, +13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,105,116,101,109,73,110,102,111,91,105,116,101,109,73, +110,102,111,76,101,110,93,32,61,32,123,105,116,101,109,32,61,32,105,116, +101,109,44,32,116,105,49,32,61,32,116,105,49,44,32,116,105,50,32,61, +32,116,105,50,44,32,119,101,105,103,104,116,32,61,32,109,105,110,40,116, +105,105,48,44,116,105,105,49,41,125,13,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,101,110,100,13,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,101,110,100,13,10,32,32, +32,32,32,32,32,32,32,32,32,32,101,110,100,13,10,32,32,32,32,32, +32,32,32,101,110,100,13,10,32,32,32,32,101,110,100,13,10,32,32,32, +32,116,97,98,108,101,46,115,111,114,116,40,105,116,101,109,73,110,102,111, +44,32,115,111,114,116,66,121,87,101,105,103,104,116,41,13,10,32,32,32, +32,114,101,116,117,114,110,32,105,116,101,109,73,110,102,111,44,32,105,116, +101,109,73,110,102,111,76,101,110,13,10,101,110,100,13,10,13,10,108,111, +99,97,108,32,102,117,110,99,116,105,111,110,32,103,101,116,82,101,115,112, +111,110,115,101,66,121,78,97,109,101,40,115,101,108,102,44,32,110,97,109, +101,41,13,10,32,32,32,32,108,111,99,97,108,32,114,101,115,112,111,110, +115,101,32,61,32,115,101,108,102,46,114,101,115,112,111,110,115,101,115,91, +110,97,109,101,93,13,10,32,32,32,32,105,102,32,110,111,116,32,114,101, +115,112,111,110,115,101,32,116,104,101,110,13,10,32,32,32,32,32,32,32, +32,101,114,114,111,114,40,40,39,85,110,107,110,111,119,110,32,99,111,108, +108,105,115,105,111,110,32,116,121,112,101,58,32,37,115,32,40,37,115,41, +39,41,58,102,111,114,109,97,116,40,110,97,109,101,44,32,116,121,112,101, +40,110,97,109,101,41,41,41,13,10,32,32,32,32,101,110,100,13,10,32, +32,32,32,114,101,116,117,114,110,32,114,101,115,112,111,110,115,101,13,10, +101,110,100,13,10,13,10,13,10,45,45,32,77,105,115,99,32,80,117,98, +108,105,99,32,77,101,116,104,111,100,115,13,10,13,10,102,117,110,99,116, +105,111,110,32,87,111,114,108,100,58,97,100,100,82,101,115,112,111,110,115, +101,40,110,97,109,101,44,32,114,101,115,112,111,110,115,101,41,13,10,32, +32,32,32,115,101,108,102,46,114,101,115,112,111,110,115,101,115,91,110,97, +109,101,93,32,61,32,114,101,115,112,111,110,115,101,13,10,101,110,100,13, +10,13,10,102,117,110,99,116,105,111,110,32,87,111,114,108,100,58,112,114, +111,106,101,99,116,40,105,116,101,109,44,32,120,44,121,44,119,44,104,44, +32,103,111,97,108,88,44,32,103,111,97,108,89,44,32,102,105,108,116,101, +114,41,13,10,32,32,32,32,97,115,115,101,114,116,73,115,82,101,99,116, +40,120,44,121,44,119,44,104,41,13,10,13,10,32,32,32,32,103,111,97, +108,88,32,61,32,103,111,97,108,88,32,111,114,32,120,13,10,32,32,32, +32,103,111,97,108,89,32,61,32,103,111,97,108,89,32,111,114,32,121,13, +10,32,32,32,32,102,105,108,116,101,114,32,61,32,102,105,108,116,101,114, +32,111,114,32,100,101,102,97,117,108,116,70,105,108,116,101,114,13,10,13, +10,32,32,32,32,108,111,99,97,108,32,99,111,108,108,105,115,105,111,110, +115,44,32,108,101,110,32,61,32,123,125,44,32,48,13,10,13,10,32,32, +32,32,108,111,99,97,108,32,118,105,115,105,116,101,100,32,61,32,123,125, +13,10,32,32,32,32,105,102,32,105,116,101,109,32,126,61,32,110,105,108, +32,116,104,101,110,32,118,105,115,105,116,101,100,91,105,116,101,109,93,32, +61,32,116,114,117,101,32,101,110,100,13,10,13,10,32,32,32,32,45,45, +32,84,104,105,115,32,99,111,117,108,100,32,112,114,111,98,97,98,108,121, +32,98,101,32,100,111,110,101,32,119,105,116,104,32,108,101,115,115,32,99, +101,108,108,115,32,117,115,105,110,103,32,97,32,112,111,108,121,103,111,110, +32,114,97,115,116,101,114,32,111,118,101,114,32,116,104,101,32,99,101,108, +108,115,32,105,110,115,116,101,97,100,32,111,102,32,97,13,10,32,32,32, +32,45,45,32,98,111,117,110,100,105,110,103,32,114,101,99,116,32,111,102, +32,116,104,101,32,119,104,111,108,101,32,109,111,118,101,109,101,110,116,46, +32,67,111,110,100,105,116,105,111,110,97,108,32,116,111,32,98,117,105,108, +100,105,110,103,32,97,32,113,117,101,114,121,80,111,108,121,103,111,110,32, +109,101,116,104,111,100,13,10,32,32,32,32,108,111,99,97,108,32,116,108, +44,32,116,116,32,61,32,109,105,110,40,103,111,97,108,88,44,32,120,41, +44,32,32,32,32,32,32,32,32,32,32,32,32,32,109,105,110,40,103,111, +97,108,89,44,32,121,41,13,10,32,32,32,32,108,111,99,97,108,32,116, +114,44,32,116,98,32,61,32,109,97,120,40,103,111,97,108,88,32,43,32, +119,44,32,120,43,119,41,44,32,109,97,120,40,103,111,97,108,89,32,43, +32,104,44,32,121,43,104,41,13,10,32,32,32,32,108,111,99,97,108,32, +116,119,44,32,116,104,32,61,32,116,114,45,116,108,44,32,116,98,45,116, +116,13,10,13,10,32,32,32,32,108,111,99,97,108,32,99,108,44,99,116, +44,99,119,44,99,104,32,61,32,103,114,105,100,95,116,111,67,101,108,108, +82,101,99,116,40,115,101,108,102,46,99,101,108,108,83,105,122,101,44,32, +116,108,44,116,116,44,116,119,44,116,104,41,13,10,13,10,32,32,32,32, +108,111,99,97,108,32,100,105,99,116,73,116,101,109,115,73,110,67,101,108, +108,82,101,99,116,32,61,32,103,101,116,68,105,99,116,73,116,101,109,115, +73,110,67,101,108,108,82,101,99,116,40,115,101,108,102,44,32,99,108,44, +99,116,44,99,119,44,99,104,41,13,10,13,10,32,32,32,32,102,111,114, +32,111,116,104,101,114,44,95,32,105,110,32,112,97,105,114,115,40,100,105, +99,116,73,116,101,109,115,73,110,67,101,108,108,82,101,99,116,41,32,100, +111,13,10,32,32,32,32,32,32,32,32,105,102,32,110,111,116,32,118,105, +115,105,116,101,100,91,111,116,104,101,114,93,32,116,104,101,110,13,10,32, +32,32,32,32,32,32,32,32,32,32,32,118,105,115,105,116,101,100,91,111, +116,104,101,114,93,32,61,32,116,114,117,101,13,10,13,10,32,32,32,32, +32,32,32,32,32,32,32,32,108,111,99,97,108,32,114,101,115,112,111,110, +115,101,78,97,109,101,32,61,32,102,105,108,116,101,114,40,105,116,101,109, +44,32,111,116,104,101,114,41,13,10,32,32,32,32,32,32,32,32,32,32, +32,32,105,102,32,114,101,115,112,111,110,115,101,78,97,109,101,32,116,104, +101,110,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +108,111,99,97,108,32,111,120,44,111,121,44,111,119,44,111,104,32,32,32, +32,32,61,32,115,101,108,102,58,103,101,116,82,101,99,116,40,111,116,104, +101,114,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,108,111,99,97,108,32,99,111,108,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,61,32,114,101,99,116,95,100,101, +116,101,99,116,67,111,108,108,105,115,105,111,110,40,120,44,121,44,119,44, +104,44,32,111,120,44,111,121,44,111,119,44,111,104,44,32,103,111,97,108, +88,44,32,103,111,97,108,89,41,13,10,13,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,105,102,32,99,111,108,32,116,104,101,110, +13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,99,111,108,46,111,116,104,101,114,32,61,32,111,116,104,101,114,13, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,99,111,108,46,105,116,101,109,32,32,61,32,105,116,101,109,13,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99, +111,108,46,116,121,112,101,32,32,61,32,114,101,115,112,111,110,115,101,78, +97,109,101,13,10,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,108,101,110,32,61,32,108,101,110,32,43,32,49, +13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,99,111,108,108,105,115,105,111,110,115,91,108,101,110,93,32,61,32, +99,111,108,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,101,110,100,13,10,32,32,32,32,32,32,32,32,32,32,32,32,101,110, +100,13,10,32,32,32,32,32,32,32,32,101,110,100,13,10,32,32,32,32, +101,110,100,13,10,13,10,32,32,32,32,116,97,98,108,101,46,115,111,114, +116,40,99,111,108,108,105,115,105,111,110,115,44,32,115,111,114,116,66,121, +84,105,65,110,100,68,105,115,116,97,110,99,101,41,13,10,13,10,32,32, +32,32,114,101,116,117,114,110,32,99,111,108,108,105,115,105,111,110,115,44, +32,108,101,110,13,10,101,110,100,13,10,13,10,102,117,110,99,116,105,111, +110,32,87,111,114,108,100,58,99,111,117,110,116,67,101,108,108,115,40,41, +13,10,32,32,32,32,108,111,99,97,108,32,99,111,117,110,116,32,61,32, +48,13,10,32,32,32,32,102,111,114,32,95,44,114,111,119,32,105,110,32, +112,97,105,114,115,40,115,101,108,102,46,114,111,119,115,41,32,100,111,13, +10,32,32,32,32,32,32,32,32,102,111,114,32,95,44,95,32,105,110,32, +112,97,105,114,115,40,114,111,119,41,32,100,111,13,10,32,32,32,32,32, +32,32,32,32,32,32,32,99,111,117,110,116,32,61,32,99,111,117,110,116, +32,43,32,49,13,10,32,32,32,32,32,32,32,32,101,110,100,13,10,32, +32,32,32,101,110,100,13,10,32,32,32,32,114,101,116,117,114,110,32,99, +111,117,110,116,13,10,101,110,100,13,10,13,10,102,117,110,99,116,105,111, +110,32,87,111,114,108,100,58,104,97,115,73,116,101,109,40,105,116,101,109, +41,13,10,32,32,32,32,114,101,116,117,114,110,32,110,111,116,32,110,111, +116,32,115,101,108,102,46,114,101,99,116,115,91,105,116,101,109,93,13,10, +101,110,100,13,10,13,10,102,117,110,99,116,105,111,110,32,87,111,114,108, +100,58,103,101,116,73,116,101,109,115,40,41,13,10,32,32,32,32,108,111, +99,97,108,32,105,116,101,109,115,44,32,108,101,110,32,61,32,123,125,44, +32,48,13,10,32,32,32,32,102,111,114,32,105,116,101,109,44,95,32,105, +110,32,112,97,105,114,115,40,115,101,108,102,46,114,101,99,116,115,41,32, +100,111,13,10,32,32,32,32,32,32,32,32,108,101,110,32,61,32,108,101, +110,32,43,32,49,13,10,32,32,32,32,32,32,32,32,105,116,101,109,115, +91,108,101,110,93,32,61,32,105,116,101,109,13,10,32,32,32,32,101,110, +100,13,10,32,32,32,32,114,101,116,117,114,110,32,105,116,101,109,115,44, +32,108,101,110,13,10,101,110,100,13,10,13,10,102,117,110,99,116,105,111, +110,32,87,111,114,108,100,58,99,111,117,110,116,73,116,101,109,115,40,41, +13,10,32,32,32,32,108,111,99,97,108,32,108,101,110,32,61,32,48,13, +10,32,32,32,32,102,111,114,32,95,32,105,110,32,112,97,105,114,115,40, +115,101,108,102,46,114,101,99,116,115,41,32,100,111,32,108,101,110,32,61, +32,108,101,110,32,43,32,49,32,101,110,100,13,10,32,32,32,32,114,101, +116,117,114,110,32,108,101,110,13,10,101,110,100,13,10,13,10,102,117,110, +99,116,105,111,110,32,87,111,114,108,100,58,103,101,116,82,101,99,116,40, +105,116,101,109,41,13,10,32,32,32,32,108,111,99,97,108,32,114,101,99, +116,32,61,32,115,101,108,102,46,114,101,99,116,115,91,105,116,101,109,93, +13,10,32,32,32,32,105,102,32,110,111,116,32,114,101,99,116,32,116,104, +101,110,13,10,32,32,32,32,32,32,32,32,101,114,114,111,114,40,39,73, +116,101,109,32,39,32,46,46,32,116,111,115,116,114,105,110,103,40,105,116, +101,109,41,32,46,46,32,39,32,109,117,115,116,32,98,101,32,97,100,100, +101,100,32,116,111,32,116,104,101,32,119,111,114,108,100,32,98,101,102,111, +114,101,32,103,101,116,116,105,110,103,32,105,116,115,32,114,101,99,116,46, +32,85,115,101,32,119,111,114,108,100,58,97,100,100,40,105,116,101,109,44, +32,120,44,121,44,119,44,104,41,32,116,111,32,97,100,100,32,105,116,32, +102,105,114,115,116,46,39,41,13,10,32,32,32,32,101,110,100,13,10,32, +32,32,32,114,101,116,117,114,110,32,114,101,99,116,46,120,44,32,114,101, +99,116,46,121,44,32,114,101,99,116,46,119,44,32,114,101,99,116,46,104, +13,10,101,110,100,13,10,13,10,102,117,110,99,116,105,111,110,32,87,111, +114,108,100,58,116,111,87,111,114,108,100,40,99,120,44,32,99,121,41,13, +10,32,32,32,32,114,101,116,117,114,110,32,103,114,105,100,95,116,111,87, +111,114,108,100,40,115,101,108,102,46,99,101,108,108,83,105,122,101,44,32, +99,120,44,32,99,121,41,13,10,101,110,100,13,10,13,10,102,117,110,99, +116,105,111,110,32,87,111,114,108,100,58,116,111,67,101,108,108,40,120,44, +121,41,13,10,32,32,32,32,114,101,116,117,114,110,32,103,114,105,100,95, +116,111,67,101,108,108,40,115,101,108,102,46,99,101,108,108,83,105,122,101, +44,32,120,44,32,121,41,13,10,101,110,100,13,10,13,10,13,10,45,45, +45,32,81,117,101,114,121,32,109,101,116,104,111,100,115,13,10,13,10,102, +117,110,99,116,105,111,110,32,87,111,114,108,100,58,113,117,101,114,121,82, +101,99,116,40,120,44,121,44,119,44,104,44,32,102,105,108,116,101,114,41, +13,10,13,10,32,32,32,32,97,115,115,101,114,116,73,115,82,101,99,116, +40,120,44,121,44,119,44,104,41,13,10,13,10,32,32,32,32,108,111,99, +97,108,32,99,108,44,99,116,44,99,119,44,99,104,32,61,32,103,114,105, +100,95,116,111,67,101,108,108,82,101,99,116,40,115,101,108,102,46,99,101, +108,108,83,105,122,101,44,32,120,44,121,44,119,44,104,41,13,10,32,32, +32,32,108,111,99,97,108,32,100,105,99,116,73,116,101,109,115,73,110,67, +101,108,108,82,101,99,116,32,61,32,103,101,116,68,105,99,116,73,116,101, +109,115,73,110,67,101,108,108,82,101,99,116,40,115,101,108,102,44,32,99, +108,44,99,116,44,99,119,44,99,104,41,13,10,13,10,32,32,32,32,108, +111,99,97,108,32,105,116,101,109,115,44,32,108,101,110,32,61,32,123,125, +44,32,48,13,10,13,10,32,32,32,32,108,111,99,97,108,32,114,101,99, +116,13,10,32,32,32,32,102,111,114,32,105,116,101,109,44,95,32,105,110, +32,112,97,105,114,115,40,100,105,99,116,73,116,101,109,115,73,110,67,101, +108,108,82,101,99,116,41,32,100,111,13,10,32,32,32,32,32,32,32,32, +114,101,99,116,32,61,32,115,101,108,102,46,114,101,99,116,115,91,105,116, +101,109,93,13,10,32,32,32,32,32,32,32,32,105,102,32,40,110,111,116, +32,102,105,108,116,101,114,32,111,114,32,102,105,108,116,101,114,40,105,116, +101,109,41,41,13,10,32,32,32,32,32,32,32,32,97,110,100,32,114,101, +99,116,95,105,115,73,110,116,101,114,115,101,99,116,105,110,103,40,120,44, +121,44,119,44,104,44,32,114,101,99,116,46,120,44,32,114,101,99,116,46, +121,44,32,114,101,99,116,46,119,44,32,114,101,99,116,46,104,41,13,10, +32,32,32,32,32,32,32,32,116,104,101,110,13,10,32,32,32,32,32,32, +32,32,32,32,32,32,108,101,110,32,61,32,108,101,110,32,43,32,49,13, +10,32,32,32,32,32,32,32,32,32,32,32,32,105,116,101,109,115,91,108, +101,110,93,32,61,32,105,116,101,109,13,10,32,32,32,32,32,32,32,32, +101,110,100,13,10,32,32,32,32,101,110,100,13,10,13,10,32,32,32,32, +114,101,116,117,114,110,32,105,116,101,109,115,44,32,108,101,110,13,10,101, +110,100,13,10,13,10,102,117,110,99,116,105,111,110,32,87,111,114,108,100, +58,113,117,101,114,121,80,111,105,110,116,40,120,44,121,44,32,102,105,108, +116,101,114,41,13,10,32,32,32,32,108,111,99,97,108,32,99,120,44,99, +121,32,61,32,115,101,108,102,58,116,111,67,101,108,108,40,120,44,121,41, +13,10,32,32,32,32,108,111,99,97,108,32,100,105,99,116,73,116,101,109, +115,73,110,67,101,108,108,82,101,99,116,32,61,32,103,101,116,68,105,99, +116,73,116,101,109,115,73,110,67,101,108,108,82,101,99,116,40,115,101,108, +102,44,32,99,120,44,99,121,44,49,44,49,41,13,10,13,10,32,32,32, +32,108,111,99,97,108,32,105,116,101,109,115,44,32,108,101,110,32,61,32, +123,125,44,32,48,13,10,13,10,32,32,32,32,108,111,99,97,108,32,114, +101,99,116,13,10,32,32,32,32,102,111,114,32,105,116,101,109,44,95,32, +105,110,32,112,97,105,114,115,40,100,105,99,116,73,116,101,109,115,73,110, +67,101,108,108,82,101,99,116,41,32,100,111,13,10,32,32,32,32,32,32, +32,32,114,101,99,116,32,61,32,115,101,108,102,46,114,101,99,116,115,91, +105,116,101,109,93,13,10,32,32,32,32,32,32,32,32,105,102,32,40,110, +111,116,32,102,105,108,116,101,114,32,111,114,32,102,105,108,116,101,114,40, +105,116,101,109,41,41,13,10,32,32,32,32,32,32,32,32,97,110,100,32, +114,101,99,116,95,99,111,110,116,97,105,110,115,80,111,105,110,116,40,114, +101,99,116,46,120,44,32,114,101,99,116,46,121,44,32,114,101,99,116,46, +119,44,32,114,101,99,116,46,104,44,32,120,44,32,121,41,13,10,32,32, +32,32,32,32,32,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32, +32,32,32,32,108,101,110,32,61,32,108,101,110,32,43,32,49,13,10,32, +32,32,32,32,32,32,32,32,32,32,32,105,116,101,109,115,91,108,101,110, +93,32,61,32,105,116,101,109,13,10,32,32,32,32,32,32,32,32,101,110, +100,13,10,32,32,32,32,101,110,100,13,10,13,10,32,32,32,32,114,101, +116,117,114,110,32,105,116,101,109,115,44,32,108,101,110,13,10,101,110,100, +13,10,13,10,102,117,110,99,116,105,111,110,32,87,111,114,108,100,58,113, +117,101,114,121,83,101,103,109,101,110,116,40,120,49,44,32,121,49,44,32, +120,50,44,32,121,50,44,32,102,105,108,116,101,114,41,13,10,32,32,32, +32,108,111,99,97,108,32,105,116,101,109,73,110,102,111,44,32,108,101,110, +32,61,32,103,101,116,73,110,102,111,65,98,111,117,116,73,116,101,109,115, +84,111,117,99,104,101,100,66,121,83,101,103,109,101,110,116,40,115,101,108, +102,44,32,120,49,44,32,121,49,44,32,120,50,44,32,121,50,44,32,102, +105,108,116,101,114,41,13,10,32,32,32,32,108,111,99,97,108,32,105,116, +101,109,115,32,61,32,123,125,13,10,32,32,32,32,102,111,114,32,105,61, +49,44,32,108,101,110,32,100,111,13,10,32,32,32,32,32,32,32,32,105, +116,101,109,115,91,105,93,32,61,32,105,116,101,109,73,110,102,111,91,105, +93,46,105,116,101,109,13,10,32,32,32,32,101,110,100,13,10,32,32,32, +32,114,101,116,117,114,110,32,105,116,101,109,115,44,32,108,101,110,13,10, +101,110,100,13,10,13,10,102,117,110,99,116,105,111,110,32,87,111,114,108, +100,58,113,117,101,114,121,83,101,103,109,101,110,116,87,105,116,104,67,111, +111,114,100,115,40,120,49,44,32,121,49,44,32,120,50,44,32,121,50,44, +32,102,105,108,116,101,114,41,13,10,32,32,32,32,108,111,99,97,108,32, +105,116,101,109,73,110,102,111,44,32,108,101,110,32,61,32,103,101,116,73, +110,102,111,65,98,111,117,116,73,116,101,109,115,84,111,117,99,104,101,100, +66,121,83,101,103,109,101,110,116,40,115,101,108,102,44,32,120,49,44,32, +121,49,44,32,120,50,44,32,121,50,44,32,102,105,108,116,101,114,41,13, +10,32,32,32,32,108,111,99,97,108,32,100,120,44,32,100,121,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,61,32,120,50,45,120,49, +44,32,121,50,45,121,49,13,10,32,32,32,32,108,111,99,97,108,32,105, +110,102,111,44,32,116,105,49,44,32,116,105,50,13,10,32,32,32,32,102, +111,114,32,105,61,49,44,32,108,101,110,32,100,111,13,10,32,32,32,32, +32,32,32,32,105,110,102,111,32,61,32,105,116,101,109,73,110,102,111,91, +105,93,13,10,32,32,32,32,32,32,32,32,116,105,49,32,32,61,32,105, +110,102,111,46,116,105,49,13,10,32,32,32,32,32,32,32,32,116,105,50, +32,32,61,32,105,110,102,111,46,116,105,50,13,10,13,10,32,32,32,32, +32,32,32,32,105,110,102,111,46,119,101,105,103,104,116,32,61,32,110,105, +108,13,10,32,32,32,32,32,32,32,32,105,110,102,111,46,120,49,32,32, +32,32,32,61,32,120,49,32,43,32,100,120,32,42,32,116,105,49,13,10, +32,32,32,32,32,32,32,32,105,110,102,111,46,121,49,32,32,32,32,32, +61,32,121,49,32,43,32,100,121,32,42,32,116,105,49,13,10,32,32,32, +32,32,32,32,32,105,110,102,111,46,120,50,32,32,32,32,32,61,32,120, +49,32,43,32,100,120,32,42,32,116,105,50,13,10,32,32,32,32,32,32, +32,32,105,110,102,111,46,121,50,32,32,32,32,32,61,32,121,49,32,43, +32,100,121,32,42,32,116,105,50,13,10,32,32,32,32,101,110,100,13,10, +32,32,32,32,114,101,116,117,114,110,32,105,116,101,109,73,110,102,111,44, +32,108,101,110,13,10,101,110,100,13,10,13,10,45,45,45,32,77,97,105, +110,32,109,101,116,104,111,100,115,13,10,13,10,102,117,110,99,116,105,111, +110,32,87,111,114,108,100,58,97,100,100,40,105,116,101,109,44,32,120,44, +121,44,119,44,104,41,13,10,32,32,32,32,108,111,99,97,108,32,114,101, +99,116,32,61,32,115,101,108,102,46,114,101,99,116,115,91,105,116,101,109, +93,13,10,32,32,32,32,105,102,32,114,101,99,116,32,116,104,101,110,13, +10,32,32,32,32,32,32,32,32,101,114,114,111,114,40,39,73,116,101,109, +32,39,32,46,46,32,116,111,115,116,114,105,110,103,40,105,116,101,109,41, +32,46,46,32,39,32,97,100,100,101,100,32,116,111,32,116,104,101,32,119, +111,114,108,100,32,116,119,105,99,101,46,39,41,13,10,32,32,32,32,101, +110,100,13,10,32,32,32,32,97,115,115,101,114,116,73,115,82,101,99,116, +40,120,44,121,44,119,44,104,41,13,10,13,10,32,32,32,32,115,101,108, +102,46,114,101,99,116,115,91,105,116,101,109,93,32,61,32,123,120,61,120, +44,121,61,121,44,119,61,119,44,104,61,104,125,13,10,13,10,32,32,32, +32,108,111,99,97,108,32,99,108,44,99,116,44,99,119,44,99,104,32,61, +32,103,114,105,100,95,116,111,67,101,108,108,82,101,99,116,40,115,101,108, +102,46,99,101,108,108,83,105,122,101,44,32,120,44,121,44,119,44,104,41, +13,10,32,32,32,32,102,111,114,32,99,121,32,61,32,99,116,44,32,99, +116,43,99,104,45,49,32,100,111,13,10,32,32,32,32,32,32,32,32,102, +111,114,32,99,120,32,61,32,99,108,44,32,99,108,43,99,119,45,49,32, +100,111,13,10,32,32,32,32,32,32,32,32,32,32,32,32,97,100,100,73, +116,101,109,84,111,67,101,108,108,40,115,101,108,102,44,32,105,116,101,109, +44,32,99,120,44,32,99,121,41,13,10,32,32,32,32,32,32,32,32,101, +110,100,13,10,32,32,32,32,101,110,100,13,10,13,10,32,32,32,32,114, +101,116,117,114,110,32,105,116,101,109,13,10,101,110,100,13,10,13,10,102, +117,110,99,116,105,111,110,32,87,111,114,108,100,58,114,101,109,111,118,101, +40,105,116,101,109,41,13,10,32,32,32,32,108,111,99,97,108,32,120,44, +121,44,119,44,104,32,61,32,115,101,108,102,58,103,101,116,82,101,99,116, +40,105,116,101,109,41,13,10,13,10,32,32,32,32,115,101,108,102,46,114, +101,99,116,115,91,105,116,101,109,93,32,61,32,110,105,108,13,10,32,32, +32,32,108,111,99,97,108,32,99,108,44,99,116,44,99,119,44,99,104,32, +61,32,103,114,105,100,95,116,111,67,101,108,108,82,101,99,116,40,115,101, +108,102,46,99,101,108,108,83,105,122,101,44,32,120,44,121,44,119,44,104, +41,13,10,32,32,32,32,102,111,114,32,99,121,32,61,32,99,116,44,32, +99,116,43,99,104,45,49,32,100,111,13,10,32,32,32,32,32,32,32,32, +102,111,114,32,99,120,32,61,32,99,108,44,32,99,108,43,99,119,45,49, +32,100,111,13,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,109, +111,118,101,73,116,101,109,70,114,111,109,67,101,108,108,40,115,101,108,102, +44,32,105,116,101,109,44,32,99,120,44,32,99,121,41,13,10,32,32,32, +32,32,32,32,32,101,110,100,13,10,32,32,32,32,101,110,100,13,10,101, +110,100,13,10,13,10,102,117,110,99,116,105,111,110,32,87,111,114,108,100, +58,117,112,100,97,116,101,40,105,116,101,109,44,32,120,50,44,121,50,44, +119,50,44,104,50,41,13,10,32,32,32,32,108,111,99,97,108,32,120,49, +44,121,49,44,119,49,44,104,49,32,61,32,115,101,108,102,58,103,101,116, +82,101,99,116,40,105,116,101,109,41,13,10,32,32,32,32,119,50,44,104, +50,32,61,32,119,50,32,111,114,32,119,49,44,32,104,50,32,111,114,32, +104,49,13,10,32,32,32,32,97,115,115,101,114,116,73,115,82,101,99,116, +40,120,50,44,121,50,44,119,50,44,104,50,41,13,10,13,10,32,32,32, +32,105,102,32,120,49,32,126,61,32,120,50,32,111,114,32,121,49,32,126, +61,32,121,50,32,111,114,32,119,49,32,126,61,32,119,50,32,111,114,32, +104,49,32,126,61,32,104,50,32,116,104,101,110,13,10,13,10,32,32,32, +32,32,32,32,32,108,111,99,97,108,32,99,101,108,108,83,105,122,101,32, +61,32,115,101,108,102,46,99,101,108,108,83,105,122,101,13,10,32,32,32, +32,32,32,32,32,108,111,99,97,108,32,99,108,49,44,99,116,49,44,99, +119,49,44,99,104,49,32,61,32,103,114,105,100,95,116,111,67,101,108,108, +82,101,99,116,40,99,101,108,108,83,105,122,101,44,32,120,49,44,121,49, +44,119,49,44,104,49,41,13,10,32,32,32,32,32,32,32,32,108,111,99, +97,108,32,99,108,50,44,99,116,50,44,99,119,50,44,99,104,50,32,61, +32,103,114,105,100,95,116,111,67,101,108,108,82,101,99,116,40,99,101,108, +108,83,105,122,101,44,32,120,50,44,121,50,44,119,50,44,104,50,41,13, +10,13,10,32,32,32,32,32,32,32,32,105,102,32,99,108,49,32,126,61, +32,99,108,50,32,111,114,32,99,116,49,32,126,61,32,99,116,50,32,111, +114,32,99,119,49,32,126,61,32,99,119,50,32,111,114,32,99,104,49,32, +126,61,32,99,104,50,32,116,104,101,110,13,10,13,10,32,32,32,32,32, +32,32,32,32,32,32,32,108,111,99,97,108,32,99,114,49,44,32,99,98, +49,32,61,32,99,108,49,43,99,119,49,45,49,44,32,99,116,49,43,99, +104,49,45,49,13,10,32,32,32,32,32,32,32,32,32,32,32,32,108,111, +99,97,108,32,99,114,50,44,32,99,98,50,32,61,32,99,108,50,43,99, +119,50,45,49,44,32,99,116,50,43,99,104,50,45,49,13,10,32,32,32, +32,32,32,32,32,32,32,32,32,108,111,99,97,108,32,99,121,79,117,116, +13,10,13,10,32,32,32,32,32,32,32,32,32,32,32,32,102,111,114,32, +99,121,32,61,32,99,116,49,44,32,99,98,49,32,100,111,13,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,121,79,117,116,32, +61,32,99,121,32,60,32,99,116,50,32,111,114,32,99,121,32,62,32,99, +98,50,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +102,111,114,32,99,120,32,61,32,99,108,49,44,32,99,114,49,32,100,111, +13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,105,102,32,99,121,79,117,116,32,111,114,32,99,120,32,60,32,99, +108,50,32,111,114,32,99,120,32,62,32,99,114,50,32,116,104,101,110,13, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,114,101,109,111,118,101,73,116,101,109,70,114,111,109,67, +101,108,108,40,115,101,108,102,44,32,105,116,101,109,44,32,99,120,44,32, +99,121,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,101,110,100,13,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,101,110,100,13,10,32,32,32,32,32,32,32,32,32, +32,32,32,101,110,100,13,10,13,10,32,32,32,32,32,32,32,32,32,32, +32,32,102,111,114,32,99,121,32,61,32,99,116,50,44,32,99,98,50,32, +100,111,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +99,121,79,117,116,32,61,32,99,121,32,60,32,99,116,49,32,111,114,32, +99,121,32,62,32,99,98,49,13,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,102,111,114,32,99,120,32,61,32,99,108,50,44,32, +99,114,50,32,100,111,13,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,105,102,32,99,121,79,117,116,32,111,114,32, +99,120,32,60,32,99,108,49,32,111,114,32,99,120,32,62,32,99,114,49, +32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,97,100,100,73,116,101,109,84,111, +67,101,108,108,40,115,101,108,102,44,32,105,116,101,109,44,32,99,120,44, +32,99,121,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,101,110,100,13,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,101,110,100,13,10,32,32,32,32,32,32,32,32, +32,32,32,32,101,110,100,13,10,13,10,32,32,32,32,32,32,32,32,101, +110,100,13,10,13,10,32,32,32,32,32,32,32,32,108,111,99,97,108,32, +114,101,99,116,32,61,32,115,101,108,102,46,114,101,99,116,115,91,105,116, +101,109,93,13,10,32,32,32,32,32,32,32,32,114,101,99,116,46,120,44, +32,114,101,99,116,46,121,44,32,114,101,99,116,46,119,44,32,114,101,99, +116,46,104,32,61,32,120,50,44,121,50,44,119,50,44,104,50,13,10,13, +10,32,32,32,32,101,110,100,13,10,101,110,100,13,10,13,10,102,117,110, +99,116,105,111,110,32,87,111,114,108,100,58,109,111,118,101,40,105,116,101, +109,44,32,103,111,97,108,88,44,32,103,111,97,108,89,44,32,102,105,108, +116,101,114,41,13,10,32,32,32,32,108,111,99,97,108,32,97,99,116,117, +97,108,88,44,32,97,99,116,117,97,108,89,44,32,99,111,108,115,44,32, +108,101,110,32,61,32,115,101,108,102,58,99,104,101,99,107,40,105,116,101, +109,44,32,103,111,97,108,88,44,32,103,111,97,108,89,44,32,102,105,108, +116,101,114,41,13,10,13,10,32,32,32,32,115,101,108,102,58,117,112,100, +97,116,101,40,105,116,101,109,44,32,97,99,116,117,97,108,88,44,32,97, +99,116,117,97,108,89,41,13,10,13,10,32,32,32,32,114,101,116,117,114, +110,32,97,99,116,117,97,108,88,44,32,97,99,116,117,97,108,89,44,32, +99,111,108,115,44,32,108,101,110,13,10,101,110,100,13,10,13,10,102,117, +110,99,116,105,111,110,32,87,111,114,108,100,58,99,104,101,99,107,40,105, +116,101,109,44,32,103,111,97,108,88,44,32,103,111,97,108,89,44,32,102, +105,108,116,101,114,41,13,10,32,32,32,32,102,105,108,116,101,114,32,61, +32,102,105,108,116,101,114,32,111,114,32,100,101,102,97,117,108,116,70,105, +108,116,101,114,13,10,13,10,32,32,32,32,108,111,99,97,108,32,118,105, +115,105,116,101,100,32,61,32,123,91,105,116,101,109,93,32,61,32,116,114, +117,101,125,13,10,32,32,32,32,108,111,99,97,108,32,118,105,115,105,116, +101,100,70,105,108,116,101,114,32,61,32,102,117,110,99,116,105,111,110,40, +105,116,109,44,32,111,116,104,101,114,41,13,10,32,32,32,32,32,32,32, +32,105,102,32,118,105,115,105,116,101,100,91,111,116,104,101,114,93,32,116, +104,101,110,32,114,101,116,117,114,110,32,102,97,108,115,101,32,101,110,100, +13,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,102,105,108, +116,101,114,40,105,116,109,44,32,111,116,104,101,114,41,13,10,32,32,32, +32,101,110,100,13,10,13,10,32,32,32,32,108,111,99,97,108,32,99,111, +108,115,44,32,108,101,110,32,61,32,123,125,44,32,48,13,10,13,10,32, +32,32,32,108,111,99,97,108,32,120,44,121,44,119,44,104,32,61,32,115, +101,108,102,58,103,101,116,82,101,99,116,40,105,116,101,109,41,13,10,13, +10,32,32,32,32,108,111,99,97,108,32,112,114,111,106,101,99,116,101,100, +95,99,111,108,115,44,32,112,114,111,106,101,99,116,101,100,95,108,101,110, +32,61,32,115,101,108,102,58,112,114,111,106,101,99,116,40,105,116,101,109, +44,32,120,44,121,44,119,44,104,44,32,103,111,97,108,88,44,103,111,97, +108,89,44,32,118,105,115,105,116,101,100,70,105,108,116,101,114,41,13,10, +13,10,32,32,32,32,119,104,105,108,101,32,112,114,111,106,101,99,116,101, +100,95,108,101,110,32,62,32,48,32,100,111,13,10,32,32,32,32,32,32, +32,32,108,111,99,97,108,32,99,111,108,32,61,32,112,114,111,106,101,99, +116,101,100,95,99,111,108,115,91,49,93,13,10,32,32,32,32,32,32,32, +32,108,101,110,32,32,32,32,32,32,32,32,32,32,32,32,32,61,32,108, +101,110,32,43,32,49,13,10,32,32,32,32,32,32,32,32,99,111,108,115, +91,108,101,110,93,32,61,32,99,111,108,13,10,13,10,32,32,32,32,32, +32,32,32,118,105,115,105,116,101,100,91,99,111,108,46,111,116,104,101,114, +93,32,61,32,116,114,117,101,13,10,13,10,32,32,32,32,32,32,32,32, +108,111,99,97,108,32,114,101,115,112,111,110,115,101,32,61,32,103,101,116, +82,101,115,112,111,110,115,101,66,121,78,97,109,101,40,115,101,108,102,44, +32,99,111,108,46,116,121,112,101,41,13,10,13,10,32,32,32,32,32,32, +32,32,103,111,97,108,88,44,32,103,111,97,108,89,44,32,112,114,111,106, +101,99,116,101,100,95,99,111,108,115,44,32,112,114,111,106,101,99,116,101, +100,95,108,101,110,32,61,32,114,101,115,112,111,110,115,101,40,13,10,32, +32,32,32,32,32,32,32,32,32,32,32,115,101,108,102,44,13,10,32,32, +32,32,32,32,32,32,32,32,32,32,99,111,108,44,13,10,32,32,32,32, +32,32,32,32,32,32,32,32,120,44,32,121,44,32,119,44,32,104,44,13, +10,32,32,32,32,32,32,32,32,32,32,32,32,103,111,97,108,88,44,32, +103,111,97,108,89,44,13,10,32,32,32,32,32,32,32,32,32,32,32,32, +118,105,115,105,116,101,100,70,105,108,116,101,114,13,10,32,32,32,32,32, +32,32,32,41,13,10,32,32,32,32,101,110,100,13,10,13,10,32,32,32, +32,114,101,116,117,114,110,32,103,111,97,108,88,44,32,103,111,97,108,89, +44,32,99,111,108,115,44,32,108,101,110,13,10,101,110,100,13,10,13,10, +13,10,45,45,32,80,117,98,108,105,99,32,108,105,98,114,97,114,121,32, +102,117,110,99,116,105,111,110,115,13,10,13,10,98,117,109,112,46,110,101, +119,87,111,114,108,100,32,61,32,102,117,110,99,116,105,111,110,40,99,101, +108,108,83,105,122,101,41,13,10,32,32,32,32,99,101,108,108,83,105,122, +101,32,61,32,99,101,108,108,83,105,122,101,32,111,114,32,54,52,13,10, +32,32,32,32,97,115,115,101,114,116,73,115,80,111,115,105,116,105,118,101, +78,117,109,98,101,114,40,99,101,108,108,83,105,122,101,44,32,39,99,101, +108,108,83,105,122,101,39,41,13,10,32,32,32,32,108,111,99,97,108,32, +119,111,114,108,100,32,61,32,115,101,116,109,101,116,97,116,97,98,108,101, +40,123,13,10,32,32,32,32,32,32,32,32,99,101,108,108,83,105,122,101, +32,32,32,32,32,32,61,32,99,101,108,108,83,105,122,101,44,13,10,32, +32,32,32,32,32,32,32,114,101,99,116,115,32,32,32,32,32,32,32,32, +32,61,32,123,125,44,13,10,32,32,32,32,32,32,32,32,114,111,119,115, +32,32,32,32,32,32,32,32,32,32,61,32,123,125,44,13,10,32,32,32, +32,32,32,32,32,110,111,110,69,109,112,116,121,67,101,108,108,115,32,61, +32,123,125,44,13,10,32,32,32,32,32,32,32,32,114,101,115,112,111,110, +115,101,115,32,32,32,32,32,61,32,123,125,13,10,32,32,32,32,125,44, +32,87,111,114,108,100,95,109,116,41,13,10,13,10,32,32,32,32,119,111, +114,108,100,58,97,100,100,82,101,115,112,111,110,115,101,40,39,116,111,117, +99,104,39,44,32,116,111,117,99,104,41,13,10,32,32,32,32,119,111,114, +108,100,58,97,100,100,82,101,115,112,111,110,115,101,40,39,99,114,111,115, +115,39,44,32,99,114,111,115,115,41,13,10,32,32,32,32,119,111,114,108, +100,58,97,100,100,82,101,115,112,111,110,115,101,40,39,115,108,105,100,101, +39,44,32,115,108,105,100,101,41,13,10,32,32,32,32,119,111,114,108,100, +58,97,100,100,82,101,115,112,111,110,115,101,40,39,98,111,117,110,99,101, +39,44,32,98,111,117,110,99,101,41,13,10,13,10,32,32,32,32,114,101, +116,117,114,110,32,119,111,114,108,100,13,10,101,110,100,13,10,13,10,98, +117,109,112,46,114,101,99,116,32,61,32,123,13,10,32,32,32,32,103,101, +116,78,101,97,114,101,115,116,67,111,114,110,101,114,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,61,32,114,101,99,116,95,103,101,116,78,101, +97,114,101,115,116,67,111,114,110,101,114,44,13,10,32,32,32,32,103,101, +116,83,101,103,109,101,110,116,73,110,116,101,114,115,101,99,116,105,111,110, +73,110,100,105,99,101,115,32,61,32,114,101,99,116,95,103,101,116,83,101, +103,109,101,110,116,73,110,116,101,114,115,101,99,116,105,111,110,73,110,100, +105,99,101,115,44,13,10,32,32,32,32,103,101,116,68,105,102,102,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,61,32,114,101,99,116,95,103,101,116,68,105,102,102,44,13,10,32,32, +32,32,99,111,110,116,97,105,110,115,80,111,105,110,116,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,61,32,114,101,99,116,95,99, +111,110,116,97,105,110,115,80,111,105,110,116,44,13,10,32,32,32,32,105, +115,73,110,116,101,114,115,101,99,116,105,110,103,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,61,32,114,101,99,116,95,105,115,73,110, +116,101,114,115,101,99,116,105,110,103,44,13,10,32,32,32,32,103,101,116, +83,113,117,97,114,101,68,105,115,116,97,110,99,101,32,32,32,32,32,32, +32,32,32,32,32,32,32,61,32,114,101,99,116,95,103,101,116,83,113,117, +97,114,101,68,105,115,116,97,110,99,101,44,13,10,32,32,32,32,100,101, +116,101,99,116,67,111,108,108,105,115,105,111,110,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,61,32,114,101,99,116,95,100,101,116,101,99, +116,67,111,108,108,105,115,105,111,110,13,10,125,13,10,13,10,98,117,109, +112,46,114,101,115,112,111,110,115,101,115,32,61,32,123,13,10,32,32,32, +32,116,111,117,99,104,32,32,32,32,61,32,116,111,117,99,104,44,13,10, +32,32,32,32,99,114,111,115,115,32,32,32,32,61,32,99,114,111,115,115, +44,13,10,32,32,32,32,115,108,105,100,101,32,32,32,32,61,32,115,108, +105,100,101,44,13,10,32,32,32,32,98,111,117,110,99,101,32,61,32,98, +111,117,110,99,101,13,10,125,13,10,13,10,45,45,32,69,120,112,111,114, +116,32,116,111,32,74,105,110,46,32,13,10,13,10,106,105,110,46,112,104, +121,115,105,99,115,32,61,32,98,117,109,112,13,10 +}; + diff --git a/src/libjin-lua/scripts/utils/xml.lua b/src/libjin-lua/scripts/utils/xml.lua index d220bd2..e4ff786 100644 --- a/src/libjin-lua/scripts/utils/xml.lua +++ b/src/libjin-lua/scripts/utils/xml.lua @@ -103,6 +103,7 @@ local function newNode(name) return node end + function XmlParser.parseXmlText(xmlText) local stack = {} local top = newNode() diff --git a/src/libjin-lua/scripts/utils/xml.lua.h b/src/libjin-lua/scripts/utils/xml.lua.h index ffd85c2..585335d 100644 --- a/src/libjin-lua/scripts/utils/xml.lua.h +++ b/src/libjin-lua/scripts/utils/xml.lua.h @@ -182,109 +182,109 @@ static char xml_lua[] = { 110,97,109,101,44,32,118,97,108,117,101,32,61,32,115,101,108,102,91,110, 97,109,101,93,32,125,41,13,10,32,32,32,32,101,110,100,13,10,13,10, 32,32,32,32,114,101,116,117,114,110,32,110,111,100,101,13,10,101,110,100, -13,10,102,117,110,99,116,105,111,110,32,88,109,108,80,97,114,115,101,114, -46,112,97,114,115,101,88,109,108,84,101,120,116,40,120,109,108,84,101,120, -116,41,13,10,32,32,32,32,108,111,99,97,108,32,115,116,97,99,107,32, -61,32,123,125,13,10,32,32,32,32,108,111,99,97,108,32,116,111,112,32, -61,32,110,101,119,78,111,100,101,40,41,13,10,32,32,32,32,116,97,98, -108,101,46,105,110,115,101,114,116,40,115,116,97,99,107,44,32,116,111,112, -41,13,10,32,32,32,32,108,111,99,97,108,32,110,105,44,32,99,44,32, -108,97,98,101,108,44,32,120,97,114,103,44,32,101,109,112,116,121,13,10, -32,32,32,32,108,111,99,97,108,32,105,44,32,106,32,61,32,49,44,32, -49,13,10,32,32,32,32,119,104,105,108,101,32,116,114,117,101,32,100,111, -13,10,32,32,32,32,32,32,32,32,110,105,44,32,106,44,32,99,44,32, -108,97,98,101,108,44,32,120,97,114,103,44,32,101,109,112,116,121,32,61, -32,115,116,114,105,110,103,46,102,105,110,100,40,120,109,108,84,101,120,116, -44,32,34,60,40,37,47,63,41,40,91,37,119,95,58,93,43,41,40,46, -45,41,40,37,47,63,41,62,34,44,32,105,41,13,10,32,32,32,32,32, -32,32,32,105,102,32,110,111,116,32,110,105,32,116,104,101,110,32,98,114, -101,97,107,32,101,110,100,13,10,32,32,32,32,32,32,32,32,108,111,99, -97,108,32,116,101,120,116,32,61,32,115,116,114,105,110,103,46,115,117,98, -40,120,109,108,84,101,120,116,44,32,105,44,32,110,105,32,45,32,49,41, -59,13,10,32,32,32,32,32,32,32,32,105,102,32,110,111,116,32,115,116, -114,105,110,103,46,102,105,110,100,40,116,101,120,116,44,32,34,94,37,115, -42,36,34,41,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,32, -32,32,32,108,111,99,97,108,32,108,86,97,108,32,61,32,40,116,111,112, -58,118,97,108,117,101,40,41,32,111,114,32,34,34,41,32,46,46,32,88, -109,108,80,97,114,115,101,114,46,102,114,111,109,88,109,108,83,116,114,105, -110,103,40,116,101,120,116,41,13,10,32,32,32,32,32,32,32,32,32,32, -32,32,115,116,97,99,107,91,35,115,116,97,99,107,93,58,115,101,116,86, -97,108,117,101,40,108,86,97,108,41,13,10,32,32,32,32,32,32,32,32, -101,110,100,13,10,32,32,32,32,32,32,32,32,105,102,32,101,109,112,116, -121,32,61,61,32,34,47,34,32,116,104,101,110,32,45,45,32,101,109,112, -116,121,32,101,108,101,109,101,110,116,32,116,97,103,13,10,32,32,32,32, -32,32,32,32,32,32,32,32,108,111,99,97,108,32,108,78,111,100,101,32, -61,32,110,101,119,78,111,100,101,40,108,97,98,101,108,41,13,10,32,32, -32,32,32,32,32,32,32,32,32,32,88,109,108,80,97,114,115,101,114,46, -112,97,114,115,101,65,114,103,115,40,108,78,111,100,101,44,32,120,97,114, -103,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,116,111,112,58, -97,100,100,67,104,105,108,100,40,108,78,111,100,101,41,13,10,32,32,32, -32,32,32,32,32,101,108,115,101,105,102,32,99,32,61,61,32,34,34,32, -116,104,101,110,32,45,45,32,115,116,97,114,116,32,116,97,103,13,10,32, -32,32,32,32,32,32,32,32,32,32,32,108,111,99,97,108,32,108,78,111, -100,101,32,61,32,110,101,119,78,111,100,101,40,108,97,98,101,108,41,13, -10,32,32,32,32,32,32,32,32,32,32,32,32,88,109,108,80,97,114,115, -101,114,46,112,97,114,115,101,65,114,103,115,40,108,78,111,100,101,44,32, -120,97,114,103,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,116, -97,98,108,101,46,105,110,115,101,114,116,40,115,116,97,99,107,44,32,108, -78,111,100,101,41,13,10,9,116,111,112,32,61,32,108,78,111,100,101,13, -10,32,32,32,32,32,32,32,32,101,108,115,101,32,45,45,32,101,110,100, -32,116,97,103,13,10,32,32,32,32,32,32,32,32,32,32,32,32,108,111, -99,97,108,32,116,111,99,108,111,115,101,32,61,32,116,97,98,108,101,46, -114,101,109,111,118,101,40,115,116,97,99,107,41,32,45,45,32,114,101,109, -111,118,101,32,116,111,112,13,10,13,10,32,32,32,32,32,32,32,32,32, -32,32,32,116,111,112,32,61,32,115,116,97,99,107,91,35,115,116,97,99, -107,93,13,10,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,35, -115,116,97,99,107,32,60,32,49,32,116,104,101,110,13,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,101,114,114,111,114,40,34,88, -109,108,80,97,114,115,101,114,46,32,110,111,116,104,105,110,103,32,116,111, -32,99,108,111,115,101,32,119,105,116,104,32,34,32,46,46,32,108,97,98, -101,108,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,101,110,100, -13,10,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,116,111,99, -108,111,115,101,58,110,97,109,101,40,41,32,126,61,32,108,97,98,101,108, -32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,101,114,114,111,114,40,34,88,109,108,80,97,114,115,101,114,46, -32,116,114,121,105,110,103,32,116,111,32,99,108,111,115,101,32,34,32,46, -46,32,116,111,99,108,111,115,101,46,110,97,109,101,32,46,46,32,34,32, -119,105,116,104,32,34,32,46,46,32,108,97,98,101,108,41,13,10,32,32, -32,32,32,32,32,32,32,32,32,32,101,110,100,13,10,32,32,32,32,32, -32,32,32,32,32,32,32,116,111,112,58,97,100,100,67,104,105,108,100,40, -116,111,99,108,111,115,101,41,13,10,32,32,32,32,32,32,32,32,101,110, -100,13,10,32,32,32,32,32,32,32,32,105,32,61,32,106,32,43,32,49, -13,10,32,32,32,32,101,110,100,13,10,32,32,32,32,108,111,99,97,108, -32,116,101,120,116,32,61,32,115,116,114,105,110,103,46,115,117,98,40,120, -109,108,84,101,120,116,44,32,105,41,59,13,10,32,32,32,32,105,102,32, -35,115,116,97,99,107,32,62,32,49,32,116,104,101,110,13,10,32,32,32, +13,10,13,10,102,117,110,99,116,105,111,110,32,88,109,108,80,97,114,115, +101,114,46,112,97,114,115,101,88,109,108,84,101,120,116,40,120,109,108,84, +101,120,116,41,13,10,32,32,32,32,108,111,99,97,108,32,115,116,97,99, +107,32,61,32,123,125,13,10,32,32,32,32,108,111,99,97,108,32,116,111, +112,32,61,32,110,101,119,78,111,100,101,40,41,13,10,32,32,32,32,116, +97,98,108,101,46,105,110,115,101,114,116,40,115,116,97,99,107,44,32,116, +111,112,41,13,10,32,32,32,32,108,111,99,97,108,32,110,105,44,32,99, +44,32,108,97,98,101,108,44,32,120,97,114,103,44,32,101,109,112,116,121, +13,10,32,32,32,32,108,111,99,97,108,32,105,44,32,106,32,61,32,49, +44,32,49,13,10,32,32,32,32,119,104,105,108,101,32,116,114,117,101,32, +100,111,13,10,32,32,32,32,32,32,32,32,110,105,44,32,106,44,32,99, +44,32,108,97,98,101,108,44,32,120,97,114,103,44,32,101,109,112,116,121, +32,61,32,115,116,114,105,110,103,46,102,105,110,100,40,120,109,108,84,101, +120,116,44,32,34,60,40,37,47,63,41,40,91,37,119,95,58,93,43,41, +40,46,45,41,40,37,47,63,41,62,34,44,32,105,41,13,10,32,32,32, +32,32,32,32,32,105,102,32,110,111,116,32,110,105,32,116,104,101,110,32, +98,114,101,97,107,32,101,110,100,13,10,32,32,32,32,32,32,32,32,108, +111,99,97,108,32,116,101,120,116,32,61,32,115,116,114,105,110,103,46,115, +117,98,40,120,109,108,84,101,120,116,44,32,105,44,32,110,105,32,45,32, +49,41,59,13,10,32,32,32,32,32,32,32,32,105,102,32,110,111,116,32, +115,116,114,105,110,103,46,102,105,110,100,40,116,101,120,116,44,32,34,94, +37,115,42,36,34,41,32,116,104,101,110,13,10,32,32,32,32,32,32,32, +32,32,32,32,32,108,111,99,97,108,32,108,86,97,108,32,61,32,40,116, +111,112,58,118,97,108,117,101,40,41,32,111,114,32,34,34,41,32,46,46, +32,88,109,108,80,97,114,115,101,114,46,102,114,111,109,88,109,108,83,116, +114,105,110,103,40,116,101,120,116,41,13,10,32,32,32,32,32,32,32,32, +32,32,32,32,115,116,97,99,107,91,35,115,116,97,99,107,93,58,115,101, +116,86,97,108,117,101,40,108,86,97,108,41,13,10,32,32,32,32,32,32, +32,32,101,110,100,13,10,32,32,32,32,32,32,32,32,105,102,32,101,109, +112,116,121,32,61,61,32,34,47,34,32,116,104,101,110,32,45,45,32,101, +109,112,116,121,32,101,108,101,109,101,110,116,32,116,97,103,13,10,32,32, +32,32,32,32,32,32,32,32,32,32,108,111,99,97,108,32,108,78,111,100, +101,32,61,32,110,101,119,78,111,100,101,40,108,97,98,101,108,41,13,10, +32,32,32,32,32,32,32,32,32,32,32,32,88,109,108,80,97,114,115,101, +114,46,112,97,114,115,101,65,114,103,115,40,108,78,111,100,101,44,32,120, +97,114,103,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,116,111, +112,58,97,100,100,67,104,105,108,100,40,108,78,111,100,101,41,13,10,32, +32,32,32,32,32,32,32,101,108,115,101,105,102,32,99,32,61,61,32,34, +34,32,116,104,101,110,32,45,45,32,115,116,97,114,116,32,116,97,103,13, +10,32,32,32,32,32,32,32,32,32,32,32,32,108,111,99,97,108,32,108, +78,111,100,101,32,61,32,110,101,119,78,111,100,101,40,108,97,98,101,108, +41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,88,109,108,80,97, +114,115,101,114,46,112,97,114,115,101,65,114,103,115,40,108,78,111,100,101, +44,32,120,97,114,103,41,13,10,32,32,32,32,32,32,32,32,32,32,32, +32,116,97,98,108,101,46,105,110,115,101,114,116,40,115,116,97,99,107,44, +32,108,78,111,100,101,41,13,10,9,116,111,112,32,61,32,108,78,111,100, +101,13,10,32,32,32,32,32,32,32,32,101,108,115,101,32,45,45,32,101, +110,100,32,116,97,103,13,10,32,32,32,32,32,32,32,32,32,32,32,32, +108,111,99,97,108,32,116,111,99,108,111,115,101,32,61,32,116,97,98,108, +101,46,114,101,109,111,118,101,40,115,116,97,99,107,41,32,45,45,32,114, +101,109,111,118,101,32,116,111,112,13,10,13,10,32,32,32,32,32,32,32, +32,32,32,32,32,116,111,112,32,61,32,115,116,97,99,107,91,35,115,116, +97,99,107,93,13,10,32,32,32,32,32,32,32,32,32,32,32,32,105,102, +32,35,115,116,97,99,107,32,60,32,49,32,116,104,101,110,13,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,101,114,114,111,114,40, +34,88,109,108,80,97,114,115,101,114,46,32,110,111,116,104,105,110,103,32, +116,111,32,99,108,111,115,101,32,119,105,116,104,32,34,32,46,46,32,108, +97,98,101,108,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,101, +110,100,13,10,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,116, +111,99,108,111,115,101,58,110,97,109,101,40,41,32,126,61,32,108,97,98, +101,108,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,101,114,114,111,114,40,34,88,109,108,80,97,114,115,101, -114,46,32,117,110,99,108,111,115,101,100,32,34,32,46,46,32,115,116,97, -99,107,91,35,115,116,97,99,107,93,58,110,97,109,101,40,41,41,13,10, -32,32,32,32,101,110,100,13,10,32,32,32,32,114,101,116,117,114,110,32, -116,111,112,13,10,101,110,100,13,10,13,10,102,117,110,99,116,105,111,110, -32,88,109,108,80,97,114,115,101,114,46,108,111,97,100,70,105,108,101,40, -120,109,108,70,105,108,101,110,97,109,101,44,32,98,97,115,101,41,13,10, -32,32,32,32,105,102,32,110,111,116,32,98,97,115,101,32,116,104,101,110, -13,10,32,32,32,32,32,32,32,32,98,97,115,101,32,61,32,115,121,115, -116,101,109,46,82,101,115,111,117,114,99,101,68,105,114,101,99,116,111,114, -121,13,10,32,32,32,32,101,110,100,13,10,13,10,32,32,32,32,108,111, -99,97,108,32,112,97,116,104,32,61,32,115,121,115,116,101,109,46,112,97, -116,104,70,111,114,70,105,108,101,40,120,109,108,70,105,108,101,110,97,109, -101,44,32,98,97,115,101,41,13,10,32,32,32,32,108,111,99,97,108,32, -104,70,105,108,101,44,32,101,114,114,32,61,32,105,111,46,111,112,101,110, -40,112,97,116,104,44,32,34,114,34,41,59,13,10,13,10,32,32,32,32, -105,102,32,104,70,105,108,101,32,97,110,100,32,110,111,116,32,101,114,114, -32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,108,111,99,97,108, -32,120,109,108,84,101,120,116,32,61,32,104,70,105,108,101,58,114,101,97, -100,40,34,42,97,34,41,59,32,45,45,32,114,101,97,100,32,102,105,108, -101,32,99,111,110,116,101,110,116,13,10,32,32,32,32,32,32,32,32,105, -111,46,99,108,111,115,101,40,104,70,105,108,101,41,59,13,10,32,32,32, -32,32,32,32,32,114,101,116,117,114,110,32,88,109,108,80,97,114,115,101, -114,46,112,97,114,115,101,88,109,108,84,101,120,116,40,120,109,108,84,101, -120,116,41,44,32,110,105,108,59,13,10,32,32,32,32,101,108,115,101,13, -10,32,32,32,32,32,32,32,32,112,114,105,110,116,40,101,114,114,41,13, -10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,110,105,108,13, -10,32,32,32,32,101,110,100,13,10,101,110,100,13,10,13,10,45,45,32, -69,120,112,111,114,116,32,116,111,32,74,105,110,46,32,13,10,13,10,106, -105,110,46,117,116,105,108,115,46,120,109,108,32,61,32,88,109,108,80,97, -114,115,101,114,13,10 +114,46,32,116,114,121,105,110,103,32,116,111,32,99,108,111,115,101,32,34, +32,46,46,32,116,111,99,108,111,115,101,46,110,97,109,101,32,46,46,32, +34,32,119,105,116,104,32,34,32,46,46,32,108,97,98,101,108,41,13,10, +32,32,32,32,32,32,32,32,32,32,32,32,101,110,100,13,10,32,32,32, +32,32,32,32,32,32,32,32,32,116,111,112,58,97,100,100,67,104,105,108, +100,40,116,111,99,108,111,115,101,41,13,10,32,32,32,32,32,32,32,32, +101,110,100,13,10,32,32,32,32,32,32,32,32,105,32,61,32,106,32,43, +32,49,13,10,32,32,32,32,101,110,100,13,10,32,32,32,32,108,111,99, +97,108,32,116,101,120,116,32,61,32,115,116,114,105,110,103,46,115,117,98, +40,120,109,108,84,101,120,116,44,32,105,41,59,13,10,32,32,32,32,105, +102,32,35,115,116,97,99,107,32,62,32,49,32,116,104,101,110,13,10,32, +32,32,32,32,32,32,32,101,114,114,111,114,40,34,88,109,108,80,97,114, +115,101,114,46,32,117,110,99,108,111,115,101,100,32,34,32,46,46,32,115, +116,97,99,107,91,35,115,116,97,99,107,93,58,110,97,109,101,40,41,41, +13,10,32,32,32,32,101,110,100,13,10,32,32,32,32,114,101,116,117,114, +110,32,116,111,112,13,10,101,110,100,13,10,13,10,102,117,110,99,116,105, +111,110,32,88,109,108,80,97,114,115,101,114,46,108,111,97,100,70,105,108, +101,40,120,109,108,70,105,108,101,110,97,109,101,44,32,98,97,115,101,41, +13,10,32,32,32,32,105,102,32,110,111,116,32,98,97,115,101,32,116,104, +101,110,13,10,32,32,32,32,32,32,32,32,98,97,115,101,32,61,32,115, +121,115,116,101,109,46,82,101,115,111,117,114,99,101,68,105,114,101,99,116, +111,114,121,13,10,32,32,32,32,101,110,100,13,10,13,10,32,32,32,32, +108,111,99,97,108,32,112,97,116,104,32,61,32,115,121,115,116,101,109,46, +112,97,116,104,70,111,114,70,105,108,101,40,120,109,108,70,105,108,101,110, +97,109,101,44,32,98,97,115,101,41,13,10,32,32,32,32,108,111,99,97, +108,32,104,70,105,108,101,44,32,101,114,114,32,61,32,105,111,46,111,112, +101,110,40,112,97,116,104,44,32,34,114,34,41,59,13,10,13,10,32,32, +32,32,105,102,32,104,70,105,108,101,32,97,110,100,32,110,111,116,32,101, +114,114,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,108,111,99, +97,108,32,120,109,108,84,101,120,116,32,61,32,104,70,105,108,101,58,114, +101,97,100,40,34,42,97,34,41,59,32,45,45,32,114,101,97,100,32,102, +105,108,101,32,99,111,110,116,101,110,116,13,10,32,32,32,32,32,32,32, +32,105,111,46,99,108,111,115,101,40,104,70,105,108,101,41,59,13,10,32, +32,32,32,32,32,32,32,114,101,116,117,114,110,32,88,109,108,80,97,114, +115,101,114,46,112,97,114,115,101,88,109,108,84,101,120,116,40,120,109,108, +84,101,120,116,41,44,32,110,105,108,59,13,10,32,32,32,32,101,108,115, +101,13,10,32,32,32,32,32,32,32,32,112,114,105,110,116,40,101,114,114, +41,13,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,110,105, +108,13,10,32,32,32,32,101,110,100,13,10,101,110,100,13,10,13,10,45, +45,32,69,120,112,111,114,116,32,116,111,32,74,105,110,46,32,13,10,13, +10,106,105,110,46,117,116,105,108,115,46,120,109,108,32,61,32,88,109,108, +80,97,114,115,101,114,13,10 }; diff --git a/src/libjin/graphics/je_graphics.h b/src/libjin/graphics/je_graphics.h index e8f06c1..519c5d0 100644 --- a/src/libjin/graphics/je_graphics.h +++ b/src/libjin/graphics/je_graphics.h @@ -25,17 +25,5 @@ #include "animations/je_animation.h" #include "animations/je_animator.h" -//struct Stats -//{ -// int drawCalls; -// int drawCallsBatched; -// int canvasSwitches; -// int shaderSwitches; -// int canvases; -// int images; -// int fonts; -// int64 textureMemory; -//}; - #endif // defined(jin_graphics) #endif // __JE_GRAPHICS_H__
\ No newline at end of file |